From 7189dfd77d8512b1804349a93ebc8b3c4274955c Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 27 Nov 2013 18:41:44 -0400 Subject: [PATCH] git-annex (5.20131127) unstable; urgency=low * webapp: Detect when upgrades are available, and upgrade if the user desires. (Only when git-annex is installed using the prebuilt binaries from git-annex upstream, not from eg Debian.) * assistant: Detect when the git-annex binary is modified or replaced, and either prompt the user to restart the program, or automatically restart it. * annex.autoupgrade configures both the above upgrade behaviors. * Added support for quvi 0.9. Slightly suboptimal due to limitations in its interface compared with the old version. * Bug fix: annex.version did not get set on automatic upgrade to v5 direct mode repo, so the upgrade was performed repeatedly, slowing commands down. * webapp: Fix bug that broke switching between local repositories that use the new guarded direct mode. * Android: Fix stripping of the git-annex binary. * Android: Make terminal app show git-annex version number. * Android: Re-enable XMPP support. * reinject: Allow to be used in direct mode. * Futher improvements to git repo repair. Has now been tested in tens of thousands of intentionally damaged repos, and successfully repaired them all. * Allow use of --unused in bare repository. # imported from the archive --- .ghci | 1 + Annex.hs | 252 + Annex/Branch.hs | 533 + Annex/Branch/Transitions.hs | 53 + Annex/BranchState.hs | 43 + Annex/CatFile.hs | 139 + Annex/CheckAttr.hs | 35 + Annex/CheckIgnore.hs | 32 + Annex/Content.hs | 529 + Annex/Content/Direct.hs | 259 + Annex/Direct.hs | 306 + Annex/Direct/Fixup.hs | 31 + Annex/Environment.hs | 65 + Annex/Exception.hs | 46 + Annex/FileMatcher.hs | 102 + Annex/Hook.hs | 42 + Annex/Journal.hs | 128 + Annex/Link.hs | 105 + Annex/LockPool.hs | 56 + Annex/Path.hs | 34 + Annex/Perms.hs | 125 + Annex/Queue.hs | 62 + Annex/Quvi.hs | 20 + Annex/ReplaceFile.hs | 39 + Annex/Ssh.hs | 198 + Annex/TaggedPush.hs | 61 + Annex/UUID.hs | 96 + Annex/Url.hs | 27 + Annex/Version.hs | 47 + Annex/Wanted.hs | 32 + Assistant.hs | 175 + Assistant/Alert.hs | 433 + Assistant/Alert/Utility.hs | 130 + Assistant/BranchChange.hs | 19 + Assistant/Changes.hs | 47 + Assistant/Commits.hs | 23 + Assistant/Common.hs | 14 + Assistant/DaemonStatus.hs | 262 + Assistant/DeleteRemote.hs | 89 + Assistant/Drop.hs | 112 + Assistant/Fsck.hs | 50 + Assistant/Gpg.hs | 36 + Assistant/Install.hs | 101 + Assistant/Install/AutoStart.hs | 39 + Assistant/Install/Menu.hs | 47 + Assistant/MakeRemote.hs | 165 + Assistant/Monad.hs | 144 + Assistant/NamedThread.hs | 102 + Assistant/NetMessager.hs | 180 + Assistant/Pairing.hs | 92 + Assistant/Pairing/MakeRemote.hs | 95 + Assistant/Pairing/Network.hs | 130 + Assistant/Pushes.hs | 40 + Assistant/Repair.hs | 153 + Assistant/RepoProblem.hs | 34 + Assistant/Restart.hs | 86 + Assistant/ScanRemotes.hs | 41 + Assistant/Ssh.hs | 342 + Assistant/Sync.hs | 276 + Assistant/Threads/Committer.hs | 493 + Assistant/Threads/ConfigMonitor.hs | 87 + Assistant/Threads/Cronner.hs | 225 + Assistant/Threads/DaemonStatus.hs | 29 + Assistant/Threads/Glacier.hs | 43 + Assistant/Threads/Merger.hs | 118 + Assistant/Threads/MountWatcher.hs | 195 + Assistant/Threads/NetWatcher.hs | 138 + Assistant/Threads/PairListener.hs | 160 + Assistant/Threads/ProblemFixer.hs | 70 + Assistant/Threads/Pusher.hs | 49 + Assistant/Threads/SanityChecker.hs | 175 + Assistant/Threads/TransferPoller.hs | 56 + Assistant/Threads/TransferScanner.hs | 183 + Assistant/Threads/TransferWatcher.hs | 104 + Assistant/Threads/Transferrer.hs | 25 + Assistant/Threads/UpgradeWatcher.hs | 109 + Assistant/Threads/Upgrader.hs | 101 + Assistant/Threads/Watcher.hs | 355 + Assistant/Threads/WebApp.hs | 109 + Assistant/Threads/XMPPClient.hs | 368 + Assistant/Threads/XMPPPusher.hs | 81 + Assistant/TransferQueue.hs | 223 + Assistant/TransferSlots.hs | 286 + Assistant/TransferrerPool.hs | 95 + Assistant/Types/Alert.hs | 78 + Assistant/Types/BranchChange.hs | 19 + Assistant/Types/Buddies.hs | 80 + Assistant/Types/Changes.hs | 77 + Assistant/Types/Commits.hs | 19 + Assistant/Types/DaemonStatus.hs | 119 + Assistant/Types/NamedThread.hs | 21 + Assistant/Types/NetMessager.hs | 155 + Assistant/Types/Pushes.hs | 24 + Assistant/Types/RepoProblem.hs | 28 + Assistant/Types/ScanRemotes.hs | 25 + Assistant/Types/ThreadName.hs | 14 + Assistant/Types/ThreadedMonad.hs | 38 + Assistant/Types/TransferQueue.hs | 29 + Assistant/Types/TransferSlots.hs | 34 + Assistant/Types/TransferrerPool.hs | 23 + Assistant/Types/UrlRenderer.hs | 26 + Assistant/Upgrade.hs | 316 + Assistant/WebApp.hs | 73 + Assistant/WebApp/Common.hs | 18 + Assistant/WebApp/Configurators.hs | 44 + Assistant/WebApp/Configurators/AWS.hs | 230 + Assistant/WebApp/Configurators/Delete.hs | 132 + Assistant/WebApp/Configurators/Edit.hs | 269 + Assistant/WebApp/Configurators/Fsck.hs | 195 + Assistant/WebApp/Configurators/IA.hs | 209 + Assistant/WebApp/Configurators/Local.hs | 471 + Assistant/WebApp/Configurators/Pairing.hs | 328 + Assistant/WebApp/Configurators/Preferences.hs | 120 + Assistant/WebApp/Configurators/Ssh.hs | 505 + Assistant/WebApp/Configurators/Upgrade.hs | 48 + Assistant/WebApp/Configurators/WebDAV.hs | 142 + Assistant/WebApp/Configurators/XMPP.hs | 223 + Assistant/WebApp/Control.hs | 79 + Assistant/WebApp/DashBoard.hs | 153 + Assistant/WebApp/Documentation.hs | 42 + Assistant/WebApp/Form.hs | 89 + Assistant/WebApp/Gpg.hs | 106 + Assistant/WebApp/MakeRemote.hs | 36 + Assistant/WebApp/Notifications.hs | 106 + Assistant/WebApp/OtherRepos.hs | 36 + Assistant/WebApp/Page.hs | 77 + Assistant/WebApp/Repair.hs | 35 + Assistant/WebApp/RepoId.hs | 40 + Assistant/WebApp/RepoList.hs | 240 + Assistant/WebApp/SideBar.hs | 110 + Assistant/WebApp/Types.hs | 233 + Assistant/WebApp/routes | 121 + Assistant/XMPP.hs | 273 + Assistant/XMPP/Buddies.hs | 87 + Assistant/XMPP/Client.hs | 84 + Assistant/XMPP/Git.hs | 382 + Backend.hs | 120 + Backend/Hash.hs | 168 + Backend/URL.hs | 37 + Backend/Utilities.hs | 25 + Backend/WORM.hs | 43 + Build/BundledPrograms.hs | 58 + Build/Configure.hs | 140 + Build/DesktopFile.hs | 82 + Build/DistributionUpdate.hs | 64 + Build/EvilSplicer.hs | 606 ++ Build/InstallDesktopFile.hs | 19 + Build/NullSoftInstaller.hs | 139 + Build/OSXMkLibs.hs | 157 + Build/Standalone.hs | 54 + Build/TestConfig.hs | 143 + Build/Version.hs | 69 + Build/make-sdist.sh | 21 + Build/mdwn2man | 44 + BuildFlags.hs | 66 + CHANGELOG | 1 + COPYRIGHT | 1 + Checks.hs | 49 + CmdLine.hs | 138 + Command.hs | 123 + Command/Add.hs | 261 + Command/AddUnused.hs | 41 + Command/AddUrl.hs | 231 + Command/Assistant.hs | 88 + Command/Commit.hs | 29 + Command/ConfigList.hs | 30 + Command/Copy.hs | 39 + Command/Dead.hs | 40 + Command/Describe.hs | 32 + Command/Direct.hs | 73 + Command/Drop.hs | 161 + Command/DropKey.hs | 39 + Command/DropUnused.hs | 43 + Command/EnableRemote.hs | 56 + Command/Find.hs | 61 + Command/Fix.hs | 61 + Command/Forget.hs | 52 + Command/FromKey.hs | 46 + Command/Fsck.hs | 508 + Command/FuzzTest.hs | 288 + Command/GCryptSetup.hs | 39 + Command/Get.hs | 90 + Command/Group.hs | 35 + Command/Help.hs | 62 + Command/Import.hs | 104 + Command/ImportFeed.hs | 218 + Command/InAnnex.hs | 27 + Command/Indirect.hs | 113 + Command/Info.hs | 384 + Command/Init.hs | 31 + Command/InitRemote.hs | 98 + Command/List.hs | 88 + Command/Lock.hs | 29 + Command/Log.hs | 171 + Command/Map.hs | 247 + Command/Merge.hs | 38 + Command/Migrate.hs | 77 + Command/Mirror.hs | 58 + Command/Move.hs | 166 + Command/PreCommit.hs | 57 + Command/ReKey.hs | 71 + Command/RecvKey.hs | 89 + Command/Reinject.hs | 58 + Command/Repair.hs | 71 + Command/RmUrl.hs | 30 + Command/Schedule.hs | 50 + Command/Semitrust.hs | 32 + Command/SendKey.hs | 49 + Command/Status.hs | 89 + Command/Sync.hs | 450 + Command/Test.hs | 24 + Command/TransferInfo.hs | 64 + Command/TransferKey.hs | 59 + Command/TransferKeys.hs | 142 + Command/Trust.hs | 32 + Command/Unannex.hs | 98 + Command/Ungroup.hs | 35 + Command/Uninit.hs | 100 + Command/Unlock.hs | 50 + Command/Untrust.hs | 32 + Command/Unused.hs | 369 + Command/Upgrade.hs | 28 + Command/Version.hs | 48 + Command/Vicfg.hs | 213 + Command/Wanted.hs | 48 + Command/Watch.hs | 36 + Command/WebApp.hs | 226 + Command/Whereis.hs | 54 + Command/XMPPGit.hs | 43 + Common.hs | 35 + Common/Annex.hs | 8 + Config.hs | 88 + Config/Cost.hs | 82 + Config/Files.hs | 69 + Creds.hs | 147 + Crypto.hs | 211 + Fields.hs | 35 + Git.hs | 140 + Git/AutoCorrect.hs | 71 + Git/Branch.hs | 133 + Git/BuildVersion.hs | 21 + Git/CatFile.hs | 108 + Git/CheckAttr.hs | 93 + Git/CheckIgnore.hs | 71 + Git/Command.hs | 138 + Git/Config.hs | 198 + Git/Construct.hs | 236 + Git/CurrentRepo.hs | 67 + Git/DiffTree.hs | 102 + Git/FileMode.hs | 23 + Git/FilePath.hs | 64 + Git/Filename.hs | 28 + Git/Fsck.hs | 79 + Git/GCrypt.hs | 103 + Git/HashObject.hs | 46 + Git/Hook.hs | 54 + Git/Index.hs | 27 + Git/LsFiles.hs | 214 + Git/LsTree.hs | 65 + Git/Merge.hs | 21 + Git/Objects.hs | 35 + Git/Queue.hs | 167 + Git/Ref.hs | 133 + Git/RefLog.hs | 22 + Git/Remote.hs | 115 + Git/Repair.hs | 551 + Git/Sha.hs | 39 + Git/SharedRepository.hs | 27 + Git/Types.hs | 95 + Git/UnionMerge.hs | 110 + Git/UpdateIndex.hs | 86 + Git/Url.hs | 71 + Git/Version.hs | 43 + GitAnnex.hs | 181 + GitAnnex/Options.hs | 87 + GitAnnexShell.hs | 200 + INSTALL | 1 + Init.hs | 175 + Limit.hs | 251 + Limit/Wanted.hs | 21 + Locations.hs | 412 + Logs.hs | 114 + Logs/FsckResults.hs | 43 + Logs/Group.hs | 83 + Logs/Location.hs | 63 + Logs/PreferredContent.hs | 114 + Logs/Presence.hs | 45 + Logs/Presence/Pure.hs | 84 + Logs/Remote.hs | 97 + Logs/Schedule.hs | 72 + Logs/Transfer.hs | 394 + Logs/Transitions.hs | 86 + Logs/Trust.hs | 97 + Logs/Trust/Pure.hs | 36 + Logs/UUID.hs | 96 + Logs/UUIDBased.hs | 119 + Logs/Unused.hs | 45 + Logs/Web.hs | 95 + Makefile | 228 + Messages.hs | 245 + Messages/JSON.hs | 37 + NEWS | 1 + Option.hs | 79 + README | 6 + Remote.hs | 294 + Remote/Bup.hs | 288 + Remote/Directory.hs | 254 + Remote/GCrypt.hs | 402 + Remote/Git.hs | 489 + Remote/Glacier.hs | 302 + Remote/Helper/AWS.hs | 66 + Remote/Helper/Chunked.hs | 144 + Remote/Helper/Encryptable.hs | 164 + Remote/Helper/Git.hs | 30 + Remote/Helper/Hooks.hs | 94 + Remote/Helper/Messages.hs | 17 + Remote/Helper/Special.hs | 40 + Remote/Helper/Ssh.hs | 146 + Remote/Hook.hs | 159 + Remote/List.hs | 107 + Remote/Rsync.hs | 308 + Remote/S3.hs | 345 + Remote/Web.hs | 128 + Remote/WebDAV.hs | 356 + Seek.hs | 178 + Setup.hs | 63 + Test.hs | 1331 +++ Types.hs | 31 + Types/Backend.hs | 26 + Types/BranchState.hs | 16 + Types/Command.hs | 77 + Types/Crypto.hs | 73 + Types/Distribution.hs | 38 + Types/FileMatcher.hs | 13 + Types/GitConfig.hs | 157 + Types/Group.hs | 27 + Types/Key.hs | 96 + Types/KeySource.hs | 29 + Types/Limit.hs | 20 + Types/Messages.hs | 24 + Types/Option.hs | 17 + Types/Remote.hs | 98 + Types/ScheduledActivity.hs | 69 + Types/StandardGroups.hs | 96 + Types/TrustLevel.hs | 43 + Types/UUID.hs | 24 + Upgrade.hs | 58 + Upgrade/V0.hs | 49 + Upgrade/V1.hs | 241 + Upgrade/V2.hs | 137 + Upgrade/V4.hs | 23 + Usage.hs | 111 + Utility/Applicative.hs | 16 + Utility/Base64.hs | 24 + Utility/Batch.hs | 91 + Utility/CoProcess.hs | 93 + Utility/CopyFile.hs | 48 + Utility/DBus.hs | 84 + Utility/Daemon.hs | 124 + Utility/Data.hs | 17 + Utility/DataUnits.hs | 160 + Utility/DirWatcher.hs | 157 + Utility/DirWatcher/Types.hs | 24 + Utility/Directory.hs | 107 + Utility/DiskFree.hs | 38 + Utility/Dot.hs | 63 + Utility/Env.hs | 63 + Utility/Exception.hs | 59 + Utility/ExternalSHA.hs | 68 + Utility/FSEvents.hs | 92 + Utility/FileMode.hs | 142 + Utility/FileSystemEncoding.hs | 93 + Utility/Format.hs | 178 + Utility/FreeDesktop.hs | 144 + Utility/Gpg.hs | 379 + Utility/Hash.hs | 69 + Utility/HumanNumber.hs | 21 + Utility/HumanTime.hs | 86 + Utility/INotify.hs | 185 + Utility/InodeCache.hs | 94 + Utility/JSONStream.hs | 44 + Utility/Kqueue.hs | 267 + Utility/LogFile.hs | 68 + Utility/Lsof.hs | 120 + Utility/Matcher.hs | 169 + Utility/Metered.hs | 116 + Utility/Misc.hs | 153 + Utility/Monad.hs | 69 + Utility/Mounts.hsc | 93 + Utility/Network.hs | 21 + Utility/NotificationBroadcaster.hs | 86 + Utility/OSX.hs | 44 + Utility/Parallel.hs | 35 + Utility/PartialPrelude.hs | 68 + Utility/Path.hs | 254 + Utility/Percentage.hs | 33 + Utility/Process.hs | 356 + Utility/QuickCheck.hs | 48 + Utility/Quvi.hs | 133 + Utility/Rsync.hs | 152 + Utility/SRV.hs | 112 + Utility/SafeCommand.hs | 120 + Utility/Scheduled.hs | 350 + Utility/Shell.hs | 26 + Utility/TList.hs | 66 + Utility/Tense.hs | 57 + Utility/ThreadLock.hs | 19 + Utility/ThreadScheduler.hs | 69 + Utility/Tmp.hs | 88 + Utility/Touch.hsc | 120 + Utility/Url.hs | 190 + Utility/UserInfo.hs | 55 + Utility/Verifiable.hs | 37 + Utility/WebApp.hs | 281 + Utility/Win32Notify.hs | 65 + Utility/Yesod.hs | 71 + Utility/libdiskfree.c | 73 + Utility/libdiskfree.h | 1 + Utility/libkqueue.c | 74 + Utility/libkqueue.h | 3 + Utility/libmounts.c | 103 + Utility/libmounts.h | 38 + configure.hs | 6 + debian/NEWS | 44 + debian/changelog | 2542 +++++ debian/compat | 1 + debian/control | 90 + debian/copyright | 780 ++ debian/doc-base | 9 + debian/menu | 2 + debian/rules | 17 + debian/tests/basics | 4 + debian/tests/control | 4 + doc/Android.mdwn | 53 + ..._77bafc01b47d4cf8f96bde2b6704ed71._comment | 8 + ..._dc7b428f525a082834cb87221fc627ff._comment | 8 + ..._81940ea56ace3dcd5fa84dfccd88ad96._comment | 10 + ..._37aa87a451d4390ed367402eec740855._comment | 12 + ..._ba11b81c671d9bcd6f496fbd6f562b0f._comment | 16 + doc/Android/oldcomments.mdwn | 2 + ..._20e3d513b8b97496d76aca4619026cd6._comment | 16 + ..._c96b8f1cc1583a74eb2483f48357f023._comment | 15 + ..._6551f5fa081494b079c10a33c9b0d8ad._comment | 10 + ..._7c633d245651ec08f63194fe1fc194ae._comment | 8 + ..._60c2403140085f9caf48a33b59a36ab4._comment | 8 + ..._9af73451be09f03cfff81fdf9481ffc4._comment | 27 + ..._f76561a654b534df3a807b1c045710b2._comment | 8 + ..._1b46cdf154ddadfe17e4b6e4054dc619._comment | 17 + ..._cc9caa5dd22dd67e5c1d22d697096dd2._comment | 15 + ..._5903f6a4a81a6534fa8cfafb3b6c37bb._comment | 8 + ..._36afd354f9669a154d7b6b2c4d43ded9._comment | 8 + ..._de98154792e8611a134429f06d82bcb1._comment | 8 + ..._7ab509c25243009bfbffd796ec64e77b._comment | 10 + ..._026d1a01d5753d71ac3dfc002f2a5eec._comment | 10 + ..._f0a044fb649d43e32c96b08edbc336c3._comment | 12 + ..._6b9ae35b1ceeba14cd7a74e142870705._comment | 34 + ..._c91db1215f529aa68bfb0576c3c5eddc._comment | 10 + ..._c2422b7dd9d526b3616e49f48cf178c2._comment | 10 + ..._0e4980c27b13dbc28477c02a82898248._comment | 14 + ..._86f7b5444e2eaea7f8f7b9160f671a1d._comment | 10 + ..._9d78009435736a178d5a3f5a9bc0ed6a._comment | 8 + ..._7b9523ddb20dc4a929e556c3ed0c7406._comment | 18 + ..._a56628a622da752806c42c5b8b54ceef._comment | 8 + ..._19656ec99b8f6aa64c1d01a3c9ae9bd0._comment | 8 + ..._55e703ae105d0c0ee9ac50df8cc59dfb._comment | 10 + doc/android/DCIM.png | Bin 0 -> 95786 bytes doc/android/appinstalled.png | Bin 0 -> 16805 bytes doc/android/apps.png | Bin 0 -> 53971 bytes doc/android/install.png | Bin 0 -> 55106 bytes doc/android/newwindow.png | Bin 0 -> 1009 bytes doc/android/terminal.png | Bin 0 -> 20565 bytes doc/android/webapp.png | Bin 0 -> 64097 bytes doc/assistant.mdwn | 43 + doc/assistant/addsshserver.png | Bin 0 -> 31740 bytes doc/assistant/archival_walkthrough.mdwn | 32 + doc/assistant/brokenrepositoryalert.png | Bin 0 -> 5806 bytes doc/assistant/buddylist.png | Bin 0 -> 4347 bytes doc/assistant/cloudnudge.png | Bin 0 -> 7332 bytes doc/assistant/combinerepos.png | Bin 0 -> 10677 bytes ..._f2c4857b7b000e005f0c19279db14eaf._comment | 8 + ..._befa1f48e5a43a7965060491430a6bc4._comment | 9 + doc/assistant/controlmenu.png | Bin 0 -> 8863 bytes doc/assistant/crashrecovery.png | Bin 0 -> 6594 bytes doc/assistant/dashboard.png | Bin 0 -> 41061 bytes doc/assistant/deleterepository.png | Bin 0 -> 22780 bytes doc/assistant/downloadupgrade.png | Bin 0 -> 9071 bytes doc/assistant/encryptdrive.png | Bin 0 -> 42725 bytes doc/assistant/example.png | Bin 0 -> 110994 bytes doc/assistant/fsckconfig.png | Bin 0 -> 59050 bytes doc/assistant/genkey.png | Bin 0 -> 27854 bytes doc/assistant/iaitem.png | Bin 0 -> 34868 bytes doc/assistant/inotify_max_limit_alert.png | Bin 0 -> 12583 bytes doc/assistant/local_pairing_walkthrough.mdwn | 90 + .../addrepository.png | Bin 0 -> 2259 bytes ..._b33deed054d3aa8cfa6c9e3958643f16._comment | 8 + ..._39f1162b4d43b61e957e7497df4b9e2b._comment | 8 + ..._588869692b290483f58f3a7aa2bfb55f._comment | 17 + ..._f6bf82c263fefe38701709d9dbd974cc._comment | 10 + ..._bada601ea4b7104f162a3e00def4be2b._comment | 19 + ..._01ba0f9bfa0ed066c4b73d2d6028eecc._comment | 8 + ..._17d44229e4fa46c50815672b96a9735a._comment | 10 + ..._b9d4c29cf2cca0427808df6af08fb789._comment | 8 + .../local_pairing_walkthrough/pairing.png | Bin 0 -> 6771 bytes .../local_pairing_walkthrough/pairrequest.png | Bin 0 -> 5383 bytes .../local_pairing_walkthrough/secret.png | Bin 0 -> 5132 bytes .../local_pairing_walkthrough/secretempty.png | Bin 0 -> 9575 bytes doc/assistant/logs.png | Bin 0 -> 33631 bytes doc/assistant/makerepo.png | Bin 0 -> 32061 bytes doc/assistant/menu.png | Bin 0 -> 22921 bytes doc/assistant/osx-app.png | Bin 0 -> 2604 bytes doc/assistant/preferences.png | Bin 0 -> 22815 bytes doc/assistant/quickstart.mdwn | 30 + doc/assistant/release_notes.mdwn | 365 + ..._bd8f376c9d0c1d5ed07fb013907a60ee._comment | 14 + ..._75e0774ad042717fbd059a8a9ec2db1e._comment | 12 + ..._b3bfd8e547e20c51f7c32c6c9424e936._comment | 10 + ..._c6caa2b521b456bb4ce594d64919cffe._comment | 8 + doc/assistant/remote_sharing_walkthrough.mdwn | 12 + ..._e0187b0a926904b363065ab0f850f0b2._comment | 10 + ..._dabcbc9aaf0bdb82716f5a5d55807a21._comment | 8 + ..._978fab3cd165b4ca245e32fc48cf0970._comment | 8 + ..._d7e879f7b098964040df2e27a18eda72._comment | 18 + ..._00852736d47c05772b15c5ff54ae7da7._comment | 8 + doc/assistant/repairrepository.png | Bin 0 -> 31791 bytes doc/assistant/repogroups.png | Bin 0 -> 15636 bytes doc/assistant/repoinfo.png | Bin 0 -> 7603 bytes doc/assistant/repositories.png | Bin 0 -> 63405 bytes doc/assistant/rsync.net.encryption.png | Bin 0 -> 40504 bytes doc/assistant/rsync.net.png | Bin 0 -> 61465 bytes doc/assistant/running.png | Bin 0 -> 24664 bytes .../share_with_a_friend_walkthrough.mdwn | 58 + .../buddylist.png | Bin 0 -> 5114 bytes .../pairing.png | Bin 0 -> 6892 bytes .../repolist.png | Bin 0 -> 8525 bytes .../xmppalert.png | Bin 0 -> 4070 bytes doc/assistant/thanks.mdwn | 243 + doc/assistant/thumbnail.png | Bin 0 -> 3491 bytes doc/assistant/upgradecomplete.png | Bin 0 -> 4817 bytes doc/assistant/xmpp.png | Bin 0 -> 27753 bytes doc/assistant/xmppnudge.png | Bin 0 -> 6156 bytes doc/assistant/xmpppairingend.png | Bin 0 -> 34379 bytes doc/automatic_conflict_resolution.mdwn | 23 + doc/backends.mdwn | 42 + ..._375bb1fb5973e8fa67b763f2dd6e404b._comment | 13 + ..._1f2626eca9004b31a0b7fc1a0df8027b._comment | 24 + ..._fdcbf8727fdefb9942a54689234b9698._comment | 12 + ..._46591a3ba888fb686b1b319b80ca2c22._comment | 9 + ..._2210c7ff2d5812fb3b778ac172291656._comment | 8 + ..._82f239b58680a2681bd8074c7ef9584d._comment | 8 + doc/bare_repositories.mdwn | 48 + ..._148e1da70d37d311634a0309a4ff8dcd._comment | 22 + doc/bugs.mdwn | 18 + ...references_on_remote_assistant_access.mdwn | 20 + .../3.20121112:_build_error_in_assistant.mdwn | 432 + ..._b42f40ffd83321ab5cc0ef24ced15e98._comment | 8 + ..._b1d2aa10ea84c5c370b3e76507fc8761._comment | 476 + ..._b38e40d36bba95b16afbce68e7f25a80._comment | 8 + ....20121112_build_fails_on_Ubuntu_12.04.mdwn | 97 + ..._ce2efd2196e7682f4cdbabdb0616d449._comment | 8 + ..._2a6faf662ebb85a8f1c89adcdfb9adb6._comment | 10 + ..._37f34baa34068def1adf794d0942e462._comment | 8 + ..._2f8a859fef9edc8eb93bf1cc74296702._comment | 8 + ..._39__not_in_scope_getAddBoxComR__39__.mdwn | 33 + ...4___because_testpack_won__39__t_build.mdwn | 57 + ..._b7140e2bf1ea9c73ecc9e214095968e7._comment | 8 + ..._6be87b2fb2ed828e7b4bf785729e910e._comment | 9 + doc/bugs/4.20130601_xmpp_sync_error.mdwn | 125 + ..._5b50d97e44cbd5b31ff24537ec3f8603._comment | 14 + doc/bugs/400_mode_leakage.mdwn | 25 + ...ository_on_USB_drive_causes_sync_loop.mdwn | 22 + ..._81839a6de7450734ee75b51e47a0898e._comment | 10 + ..._907ce31a31df94984c2bd7aaafe5b10b._comment | 8 + ..._d8a86ae0ae5fa1f91e0b40b8b2ba0406._comment | 10 + ..._1f08fd5dd4f5d8723c2b5391cc3b60f9._comment | 22 + ...e_repository_next_to_the_existing_one.mdwn | 21 + ..._cb781d34889d583663e855c4074f8e0e._comment | 16 + ..._c0c87957d7c7a09664e60571a2ca0e8c._comment | 12 + ...ox.com_remote_on_Android_fails_for_me.mdwn | 20 + ..._0303ce880415d7e043533551c2b24694._comment | 10 + doc/bugs/Adding_git_ssh_remote_fails.mdwn | 32 + ..._05c0bd9ac7c6f0045217fd72fc1f0a1b._comment | 10 + ..._df05456cafdd89e8ceea830199f42d45._comment | 10 + ...cond_remote_repository_over_ssh_fails.mdwn | 41 + ..._308d5f517bf00c8edc53db438de52355._comment | 14 + ..._webapp_gives_internal_server_error__.mdwn | 69 + ...downloads_but_does_not_checkout_files.mdwn | 74 + ..._a_specific_directory_on_a_USB_remote.mdwn | 30 + ..._13ecedfbb34c3564af3a790b8bf0f591._comment | 25 + ..._in_the_Dashboard_seems_to_do_nothing.mdwn | 21 + ..._a9b03d4f4760fea2754a4dc93547f0a3._comment | 10 + ..._015e859a16b1ce4c0c7601df0594d555._comment | 10 + ...x_does_not_support_XMPP_pairing__34__.mdwn | 24 + ..._c034bb84e58b2dda1038ba205ec78c56._comment | 273 + ..._99a754f41d59fdd401ba6d169945e7c9._comment | 8 + ...roid_app_permission_denial_on_startup.mdwn | 18 + ..._dc06737997c8883ef0a12dbecd9ac30f._comment | 8 + ..._b444cd6717658116533745c51481dd3d._comment | 8 + ..._66181f34ed7496d1f6601b39e5ae3c65._comment | 13 + ..._ddf5761bf14de30ac97030ad338601ae._comment | 14 + ..._8b9fafa73ebf5f803c7da9531cfb5b34._comment | 10 + ..._58501bb043b4c5836d7472ffd6baa72c._comment | 23 + ..._d3a04dc7bbc1816cccc8d85c73ffb689._comment | 8 + ..._eeabbc0cc434ed84c36a3f4e03fcef36._comment | 10 + ..._4203b496bee1bdd424466ed63b5d31cf._comment | 10 + ..._74373eb2cc46b76659e3c463d6682d15._comment | 10 + ..._0923d2a09df01d152ec4784c92689c96._comment | 8 + ..._b60928e54a5b620899cf29820b9b8e70._comment | 10 + .../Android_daily_build_missing_webapp.mdwn | 23 + ...thinks_file_exists_afer_being_dropped.mdwn | 27 + ..._1d100441fd1ef529eb854b350fece9ee._comment | 29 + ..._166c459c2b27859cf457e17da685fe75._comment | 14 + ..._9d985b6e7973bfaaf8b4f5349d8c13ee._comment | 8 + ..._3e084cff454b95c7170c0225a53f0c30._comment | 11 + ...les_into_git_until_daily_sanity_check.mdwn | 106 + ...ctually_sync_file_contents_by_default.mdwn | 16 + ..._8577fdaa4d49e6241c4372b159694c9c._comment | 12 + ..._027521e48283c68b39315bb8213f6e45._comment | 10 + ..._fd8f6938596aace60b04fb35c4069e37._comment | 10 + ..._ca908021ab5a2a50fd0d4a7e8d12498f._comment | 9 + ..._73532556cfc354ad5f37a3f3a048fb32._comment | 12 + ..._ced397b9e6119a0798a282ee07e885df._comment | 61 + ..._8acb66850e5db8337cf3f2b2dd236ccc._comment | 10 + ..._7eb530851ae6fa1a69813725c4e8fcec._comment | 59 + ..._c7d51a26e1febc3894d02546940d64e5._comment | 19 + ..._has_just_transferred_elsewhere_again.mdwn | 26 + .../Assistant_dropping_from_backup_repo.mdwn | 28 + ..._c13d86fb2541676ee4ca1446b99e0e68._comment | 8 + ...nd_eats_up_all_of_RAM_after_X_restart.mdwn | 24 + ..._created_155_semitrusted_repositories.mdwn | 191 + ..._169b24b34cce3f5c8446c2150beb6827._comment | 8 + ..._6acd6f38297772a07d8d5fb999bd2eaa._comment | 183 + ..._6a4118e5c5fbe5e84d27094ac72b741b._comment | 22 + ..._04daa20d5d7c74bb34ec48e752ed9fe8._comment | 8 + ..._11af8ab2587e6eeb671051ba8191995b._comment | 11 + ..._26236cdc2bce532017854791bcd727d1._comment | 8 + ..._3c532dd5b8a01ecdeda1300b49aba675._comment | 12 + ..._119142c5ebc499f0ee0926dbca265308._comment | 10 + ...me_cases__44___although_used_remotely.mdwn | 29 + ...dding__47__creating_repo_on_ArchLinux.mdwn | 75 + ..._ec4a7388ea7106a953f599b664b37f1d._comment | 8 + ..._6a60c23850a5e2a7bba355e1317abc69._comment | 13 + ..._90b6ed232b2917b9fe041532284e1212._comment | 10 + ..._5a89d79395d96c43d7d8a6fd9dc275f1._comment | 248 + ..._cdd26c71875428dbe3c100944a443d3f._comment | 9 + ..._76242f5d6c815acd5bd58213bd8bb0fe._comment | 10 + ..._10852171c0207ca61ea6df1082107353._comment | 8 + ..._73e8a5696709f8154e63693ba5e569c3._comment | 10 + ..._392fc344e5833b0eb665fcd38f956b7a._comment | 8 + ..._9f0fc19a7fcaf7a5827e59e1495cf8c9._comment | 8 + ...tant_uses_obsolete_GDU_volume_monitor.mdwn | 28 + ..._0e1db417a5815ea903c1f7ccd07308c4._comment | 8 + ..._28b0cfcba8902c9c16dbe6c4b07984c4._comment | 10 + ..._952b3f78da756ff5f89235db94bec67f._comment | 53 + ..._d86aba42d014c4b4f708dcb5fe86e055._comment | 10 + ..._9aaf296ef53da317d6dc6728705d5c56._comment | 16 + ..._0d5f8a05a1505660f7ff1bc4ac6ff271._comment | 8 + ..._3dfdfd49597c85575cb689adb70d2de6._comment | 8 + ..._943a446c60ed9d7d4f240ba7f00fe925._comment | 8 + ..._9563859850fb40b1cc2c20c516c12960._comment | 16 + ..._cf6221c585ee3dbf039bdaea71842d9b._comment | 9 + ..._Android___39__git_annex_webapp__39__.mdwn | 35 + ..._173393b0b3d2d8c622c0d8a2eaace421._comment | 8 + ...ds___39__hxt__39___added_-_3.20121127.mdwn | 36 + doc/bugs/Build_error_on_Linux.mdwn | 29 + doc/bugs/Build_error_on_Mac_OSX_10.6.mdwn | 11 + doc/bugs/Build_failure_at_commit_1efe4f3.mdwn | 45 + ...ot_find_module___96__Text.Blaze__39__.mdwn | 105 + ..._Not_in_scope:___96__myHomeDir__39___.mdwn | 56 + ...ind_module___96__Data.XML.Types__39__.mdwn | 82 + ...constructor_or_class___96__Html__39__.mdwn | 189 + ...26____47__bin_breaks_the_desktop_link.mdwn | 15 + ..._c0f0a2878070ed86900815c6b6a5fa5e._comment | 8 + ..._53f2de3d3993821d8502fd08a0fcce12._comment | 8 + doc/bugs/Cabal_cannot_solve_dependencies.mdwn | 36 + ..._1d41ac79867226dcb71f1c7b38da062d._comment | 21 + ..._50e72633a4462f6f6eb33d57b137fdcc._comment | 48 + ..._886f2d1f7c47a3973b8dc7d7c412289a._comment | 10 + .../Cabal_dependency_monadIO_missing.mdwn | 17 + ..._14be660aa57fadec0d81b32a8b52c66f._comment | 75 + ..._4f4d8e1e00a2a4f7e8a8ab082e16adac._comment | 8 + ...39__t_always_use__annex-rsync-options.mdwn | 35 + ...__git-annex_get__34___with_3.20111203.mdwn | 27 + ...rive__39___repo_even_if_set_as_client.mdwn | 21 + ..._25eb2d7d0a9cdd1c55df0cec68472723._comment | 10 + ..._9e9b96e5113a50533251e946c2560d81._comment | 17 + ..._6b091198ddd6ed709b076df1296aeb77._comment | 11 + ..._118b588685b535cca4c02eb6ef297c67._comment | 21 + ..._5cead277493e1c020e16be6f9245fe33._comment | 12 + ..._0f135f97c2808dce094628dc6608e617._comment | 8 + ..._1d6f47f9e6cf935f19d68af6d5aa92fa._comment | 10 + ..._c5758fdb32348b9cd804ff17d27864e1._comment | 16 + ...epo__47__.git__47__X__34___for_many_X.mdwn | 34 + ..._7f54e24c8e721d69bdb1e5a4181641b8._comment | 10 + ..._6e91bc254f79ccf80d385ba7d35ffa9c._comment | 14 + ..._4cf34da6050dd96f94ffc3652aa39715._comment | 12 + ..._cafcc24e98a89f10adaed5e09f75b659._comment | 19 + ..._118d61dea9ef0faa2960da6f2f62ec8b._comment | 12 + ..._3978557c6e85608243e5b4eb698ac5a5._comment | 27 + ..._e6dfc41d2042402b40efb6f6139d5662._comment | 18 + ..._33a84937c87dd2406bc090a0d2969683._comment | 30 + ...e_some_filenames_have_a_colon_in_them.mdwn | 20 + ..._5fc1347f4bcc13c9f8dbc5ecd4847fc7._comment | 12 + ..._38696178e658d1d32deec37dbea66a3d._comment | 8 + ..._f34d996827f5e7662bec409cbcce961b._comment | 12 + ..._t_rename___34__here__34___repository.mdwn | 32 + ...Can__39__t_set_repositories_directory.mdwn | 15 + ..._beb5d5b66a8d0fab12be44a7d877e9b0._comment | 8 + ..._366aa798a5e55350d32b63b31c19112b._comment | 19 + ..._812554d58ad9274a50b2a33d5f4d2ec3._comment | 10 + ..._bec5f147441ad18c97845b44c90c728b._comment | 28 + ...__t_start_on_Cyanogenmod_10.2_nightly.mdwn | 158 + ...nc_remote_with_encryption__61__shared.mdwn | 54 + ..._ca7ec2041bbec330476fb040b1e66a92._comment | 8 + ..._c476847665a5320214721497d8fad15b._comment | 8 + ...annot_build_the_latest_with_GHC_7.6.1.mdwn | 18 + ..._b25859c159d62f2e92b92f505535131b._comment | 14 + ..._4c9eab9120718457fdc1ae9051e44bca._comment | 16 + ..._61aec9801e1f76db4a286536ffacc3ed._comment | 12 + ..._6381ff0ea419831d9bbed27511cad1e9._comment | 16 + doc/bugs/Cannot_clone_an_annex.mdwn | 69 + ..._b40a2652361a79c6c6eab0fc21be8e46._comment | 8 + .../Cannot_copy_to_a_git-annex_remote.mdwn | 14 + ..._258a376cff4c62bc4be919322bb1bd88._comment | 10 + ..._d9b830a1fdea8760cb7da1d36b3cd34d._comment | 12 + ..._09d76e5f9480b9a35644a8f08790cd97._comment | 10 + ..._7b586c705a937d09a1b44bd6af2d4686._comment | 8 + ..._07dbd8f64982f1921077e23f468122cf._comment | 25 + ..._926fd494f0b27103a99083cd5d0702d5._comment | 8 + ..._80444a509cc340f5eb3cd08b193fd389._comment | 10 + ..._4c6b99cd67b4aa742da5101fb1b379f7._comment | 8 + ..._f45cdd2b6acc5f458b67539fced0e529._comment | 12 + ..._5a455dd14fb9d3ff408bb3f81e366c38._comment | 10 + ..._foo_not___126____47__bar__47____34__.mdwn | 29 + ..._6f7b5c164ff64f00b8814b2ee334709f._comment | 13 + ..._807ef1250237bf4426e3a24c1f9ba357._comment | 10 + doc/bugs/Committer_crashed.mdwn | 32 + ...mpile_needs_more_than_1.5gb_of_memory.mdwn | 16 + ..._0806b5132c55d7a5a17fbdad7e3f2291._comment | 16 + ...ilure_trying_to_unannex_a_large_annex.mdwn | 56 + ..._1c202695ab7fe62cdc8770e1fb428d0c._comment | 10 + .../Conflicting_archive_descriptions.mdwn | 16 + ...lPath_too_long_for_Unix_domain_socket.mdwn | 53 + ..._60f58e205604eebe668b1e05dcfbf9a7._comment | 24 + ...eleted_and_deletes_them_elsewhere_too.mdwn | 33 + ..._80ca50f5305eda71fe32f2b0bc922c34._comment | 21 + ..._e6bc6d1c0eb8c469e9e00b37bbcc9b86._comment | 9 + ..._0d0f6b6b46d0153433fead2bbd1bbe64._comment | 12 + ..._6058a22b733cb02126286af950074ed4._comment | 10 + ..._593a49669e2fadfb91773f8c84fbb031._comment | 8 + ..._5a348c5f327f16e1192ef6bd7f2880bb._comment | 15 + .../Could_not_find_module_Data.Default.mdwn | 33 + ...Could_not_read_from_remote_repository.mdwn | 24 + ..._da842a9d146bcd5c7773b58364c25597._comment | 8 + ..._82746a0cf989d884cd0fd796db092b3c._comment | 36 + doc/bugs/Could_not_resolve_dependencies.mdwn | 40 + ...h_trying_to_sync_with_a_repo_over_ssh.mdwn | 43 + ..._9705f295ad8101f3f0ede18e590b56ef._comment | 8 + ..._0d751d81ac618f8d7e3f1dd20c830542._comment | 8 + .../Crash_when_adding_jabber_account_.mdwn | 32 + ..._2dc61ebcfa8919fb839656999c155c52._comment | 10 + ..._e49af3b8a937d82eda1509b6f67b21d4._comment | 8 + ..._e59f8813bf1a7c4e3c8c120fe82348b9._comment | 10 + ..._716ac138cb69eecd0fb586699b4aeb2a._comment | 8 + ...h_an_invalid_name_throws_an_exception.mdwn | 18 + ...S3_does_not_check_for_presence_of_GPG.mdwn | 18 + ...using_git-annex_webapp_--listen__41__.mdwn | 35 + doc/bugs/DS__95__Store_not_gitignored.mdwn | 26 + ..._b93ac0ea3be82c361ceb4352e742ba39._comment | 8 + ..._4136e1f4aba7aa7562dafcf6a213e10c._comment | 58 + ...p_ssh_keys_after_removing_remote_repo.mdwn | 18 + ..._88fbf70eae48484988dbb433a437c717._comment | 14 + .../Detection_assumes_that_shell_is_bash.mdwn | 24 + ...t_to_troubleshoot_XMPP_login_failures.mdwn | 11 + ..._4205bccf515169031e4a9ed8e905262c._comment | 10 + ...keeps_re-checksuming_duplicated_files.mdwn | 25 + ..._cb10385a4f046bfe676720ded3409379._comment | 14 + ..._4bcf1a897181e40c9c8969d597a844f0._comment | 8 + ..._6a6d22d218f036c9977072973ed99aa8._comment | 11 + ..._eaa7ffb3a1d9ffd6d89de301bd2cd5b2._comment | 11 + ...sitories_end_up_with_unstaged_changes.mdwn | 46 + ..._300a2b246182be3079db20a7e3322261._comment | 8 + ...sitories_still_use_symlinks_sometimes.mdwn | 32 + .../Disconcerting_warning_from_git-annex.mdwn | 6 + ..._58cebd377bfdf247b6c4fee27a3ba461._comment | 8 + ..._dc7407044d4c739d05248300c58d8ef2._comment | 8 + ...een_git_annex_add_and_git_annex_watch.mdwn | 33 + doc/bugs/Displayed_copy_speed_is_wrong.mdwn | 8 + ..._74de3091e8bfd7acd6795e61f39f07c6._comment | 8 + ..._8b240de1d5ae9229fa2d77d1cc15a552._comment | 8 + ...der_suddenly_appear_in_sub-sub-folder.mdwn | 3747 +++++++ ..._ae4a13ff121d27f78904eee9bf5e716b._comment | 20 + ..._32e360cd7b100ddb9a526e7833fc55e1._comment | 15 + ..._650dc9ede4e16ef668d96840f63dad47._comment | 12 + ..._721cf184fb5a5244ec5c15de3302ebf7._comment | 33 + ..._ssh_server_with_multiple_directories.mdwn | 19 + ..._e8affeca873c2ef73255f8f77e0ac16f._comment | 10 + doc/bugs/Endless_SSH_password_prompts.mdwn | 15 + ..._b3a32d7a53c30478f409a47f856282ab._comment | 10 + ..._0a1fc4b4580d8be4c37064e0a16de99b._comment | 8 + ..._46210f7745b8c7c237fc8b08309390fe._comment | 11 + ...___versions_3.20120315_and_3.20120430.mdwn | 79 + ...ry:___34__internal_server_error__34__.mdwn | 28 + ..._9be1b577fa4d5fe9754845073fdf5d32._comment | 10 + ..._0da0d68b646f2b38be6ecf7c0fe13743._comment | 8 + ..._09c56f5574931f2ebe903069f0731160._comment | 16 + ..._0c127396e682ca6ced43aec7deeb0335._comment | 12 + ..._6bc3eadefde4750eec67a55de6651b2d._comment | 13 + ..._263ab9c1483438b1717c8061ac81a2fa._comment | 9 + ..._eccc10990dff37584f8e60cd481a7140._comment | 26 + ..._f897d20cbe5e0f3f58ce1a0bacad3d71._comment | 8 + ...ng_remote_repository_using_ssh_on_OSX.mdwn | 36 + ..._559555934d79ae6be383063abcaae22e._comment | 10 + ..._a9f4f9db042ab6f6c15d6954651971b2._comment | 12 + ..._55a496d0a0be80ba723b17bf9faa3bc0._comment | 8 + ...ing___34__hGetLine:_end_of_file__34__.mdwn | 31 + ..._8742f7ac27b5f4ad6261d04a174a691c._comment | 10 + ..._b8e720340000537de6713c49b7733b2f._comment | 21 + ..._489fa3a717519cd5d8b4c1a9d143d8c6._comment | 8 + ..._b0796d3b1913e1b6f7b34d75a591be42._comment | 16 + ..._d8ca17ccaa5ee48d590736af8e77d88a._comment | 8 + ..._aa7a690aaf75d21f52051a31d7fce70e._comment | 8 + ..._dc235dc2d024b7f340721bb578630e00._comment | 10 + ..._5d1e6ea5b5725c773acc6e288add812c._comment | 8 + ..._6389b4f03ebc916358bc6674398d70c4._comment | 14 + ..._bcacc9fb3751042968118ebe33802e27._comment | 10 + ..._6d4c9f0e133ebd94fc11346df446402e._comment | 16 + ...nnexed_file_to_a_.gitignored_location.mdwn | 21 + ..._b524e70156e8bc1219d5c6741974ad99._comment | 18 + ..._ff7349c396d1249204d621e71f6a7a52._comment | 10 + ..._4bc7d4c51faea3fdafc977cb66b7f73a._comment | 26 + ...ateSymbolicLink:_already_exists__34__.mdwn | 46 + ...w_file_gets_symlinked_to_a_git_object.mdwn | 78 + ..._d4e7ed56b16494a95e6c904c746cc91f._comment | 8 + ..._656b2a2cc44e9102c86bdd57045549d5._comment | 10 + ...__40__calling_nonexistant_shell__41__.mdwn | 28 + ..._fb8a379ed7f4b88bd55245ce5b18042c._comment | 8 + ...te_remote_repo_if_no_global_email_set.mdwn | 55 + ...eature_request:___34__quvi__34___flag.mdwn | 14 + ..._908c38024fd252328566034608c2dec3._comment | 12 + ..._4b6822fe91aa865f2ac1297a3daa3fca._comment | 8 + ..._c72ef77e76b1c99b5e0c78d0742080e7._comment | 8 + ..._6092695d6afb1608447afe6f86e6fb83._comment | 8 + ...om_locally_paired_annexes_when_edited.mdwn | 36 + ..._bdc97db9dc9954331e4c400baf9e5541._comment | 10 + doc/bugs/Finding_an_Unused_file.mdwn | 152 + ...dg-open_on_linux__47__bsd__63____41__.mdwn | 26 + ..._change___34__deleted:_uuid.log__34__.mdwn | 44 + ..._6441dd04adc158df22589c81746108a9._comment | 10 + ..._d1c5d7642284a375f9c455dbf76efa5c._comment | 12 + ..._4b863da1c8ba73ad54da20f7d2ec6e5c._comment | 14 + ..._8e0f489305ce30ad578b9f8526e86416._comment | 10 + ..._c699034c8e02b2354516414d0ab73aab._comment | 53 + ..._786cb7e643811dfd2496ceeff8f34f44._comment | 10 + doc/bugs/GIT_DIR_support_incomplete.mdwn | 17 + .../GPG_can__39__t_handle_some_files.mdwn | 23 + ..._4388c971e991dbc0326e69c49994df1e._comment | 8 + doc/bugs/GPG_passphrase_repeated_prompt.mdwn | 24 + ..._6ef1c9725befc84ad57bce196ef630ef._comment | 16 + doc/bugs/GPG_problem_on_Mac.mdwn | 34 + ..._9ccfa12e7a9569a7ae9a3b819917c275._comment | 9 + ..._a5e07131e2bc1a646c8439fc2506128b._comment | 29 + ..._388238360f2423f84881e904443efb86._comment | 12 + ...it_annex_add_fails_on_read-only_files.mdwn | 37 + ..._d31018e8bf31d729ee9fee43a0a07934._comment | 10 + ..._e38e7048749f890169cd0be602be6ee7._comment | 10 + ..._add_on_vfat__47__sdcard__47__android.mdwn | 280 + ..._2fc435d1c741f9fc422401f682e7c8b7._comment | 17 + ..._b73fb99a75aef912f8286626c5bde66d._comment | 14 + ..._b7115f2c658439ff59a029f500697fc1._comment | 57 + ..._67de7a56ddb06fc0e31cc011d281c633._comment | 8 + ..._58fdb2a00f1737746cdbc804f831a0e7._comment | 8 + ...hen_submodule_is_not_in_the_same_path.mdwn | 63 + ..._b3197993dbdfaf2db5e4651ac54a896e._comment | 12 + ..._1fbbd02e61ef524597dafd69460b00b4._comment | 10 + .../Glacier_remote_uploads_duplicates.mdwn | 36 + ..._8aef582a0f0d0c7f764b425fc45de3b4._comment | 25 + ..._150ce8b7c4424a83c4b1760da5a89d27._comment | 8 + ..._718af5048c5f894eee134547a2e0a644._comment | 8 + ..._184ad0f8c2847309632f8c18b918cd42._comment | 10 + ..._6980a912d3582c2f2511e4827e9e76b3._comment | 21 + ..._feea067d6856af2840604782b29af86a._comment | 12 + ..._e96187bad3dae2f5f95118f6df87a1ec._comment | 10 + ..._34216b514a6fca788cfacb8579ce5311._comment | 12 + ...de_archive_directory_at_the_same_time.mdwn | 16 + ..._e8bb3d6a2318402b985caed08282d473._comment | 12 + ..._ead9fa75a12ef36be9a92637b144e74f._comment | 14 + .../Hanging_on_install_on_Mountain_lion.mdwn | 26 + ..._f57ff027b19ca16e2ecf1fc6aee9ef4a._comment | 10 + ..._2ff78d2090d0fd3418ab50b27c6028ce._comment | 8 + ..._523d3c0c71f80536850a001b90fd0e9e._comment | 8 + ..._6c360c64093b016c2150206dc3ad1709._comment | 10 + ..._7b77fd9b7dc236c345f2f6149c8138ee._comment | 18 + ..._08289596445d7588e43d35490fbfe5f4._comment | 8 + ..._2a336fe7b8aed07cbdaa868bd34078f9._comment | 8 + ..._ea7a40c3b6748738421aed00a6f7ca10._comment | 10 + ..._00962da9288976f8a48d0cbc08e1d9e2._comment | 15 + ..._5d53d23e529f33f6e7deb10643831613._comment | 11 + ..._f00c8761e3184975b6645c0c3e241365._comment | 10 + ...eating_repository_when_using_--listen.mdwn | 46 + ..._8cbe786de8cf8b407418149b9c811aab._comment | 14 + ..._dc128eeddeaaf3f84e71aca0fb7d341f._comment | 8 + .../Hard_links_not_synced_in_direct_mode.mdwn | 125 + ..._aaa781664ae0c62c4f6530cb075ed367._comment | 17 + ..._213aa10909d1fd0f20ed078a7ed93e79._comment | 8 + ..._e6b783d9aaae20c0d35e9888d878716a._comment | 10 + ..._b008ae7b1cf8685d92c9a87a7609de1e._comment | 18 + ..._949c891209713a2c0a5e66af11ed4c79._comment | 14 + ...ush_without_using_the_assistant__63__.mdwn | 295 + ..._0ddcbe0ccecdec1012964dfa436a3eee._comment | 19 + ..._5765b849bcf045ead9f007bd50b2cfbd._comment | 20 + ...on_switch_to_indirect_mode_and_status.mdwn | 69 + ..._94c678e1348280a96f11d7456c240d3a._comment | 8 + ..._09450d58df2373174a1f0d90b08e9eb3._comment | 14 + ..._a07105226ef3488b97731db004651976._comment | 10 + ...an_existing_gcrypt_repo_in_the_webapp.mdwn | 21 + ..._17814787e333d15da3ab4e57c7d31d4b._comment | 12 + ...erge__44___direct_repos___40__2__41__.mdwn | 44 + ..._15c354c4841d364e78882d2b46a0a764._comment | 66 + ..._8bc496226a977dbeeb1ce3f06122f1c2._comment | 12 + ...rect_merge___40__a_special_case__41__.mdwn | 48 + ..._c80418d76b501c688e3a9fb4831520fd._comment | 41 + ..._8b2a188696f46819f6e3f0e9660362d2._comment | 45 + ..._8cdbb1fda506b9e53a0e9ab88b2569c1._comment | 15 + ..._9d74e2854a5d77f0f793f56fa0cff9e2._comment | 14 + ...__40__1.0.52__41___as_seen_by_Android.mdwn | 24 + ...orrect_version_on_64_Standalone_Build.mdwn | 11 + ..._1964e4cad33a9f98b2eedbf095e899ff._comment | 12 + ...Install_of_git-annex-3.20121112_fails.mdwn | 20 + ..._80fc80151d4390bd8a4332f30723962e._comment | 8 + ..._2613320a41a74dc757a3277c8c328bd0._comment | 62 + ..._c364764d0c56e8dc3cac276905d99841._comment | 10 + ..._f1057340dfa978071d3bbc9e2af1e612._comment | 19 + ..._9007b1a3abd647945604968db19cb841._comment | 8 + ..._0bb3ac5375f29ce9d3d0be93879267e3._comment | 11 + ..._ae4443b8cd069080d1f77fca16aa8b04._comment | 10 + .../Internal_Server_Error:_Unknown_UUID.mdwn | 37 + ..._f42f703a5d267557abf5e932f0890d4a._comment | 37 + ..._eb1999f99c5babf3fcb1ff5d72ea6db6._comment | 18 + ..._bda72b0d615843d18d6ef21f833432a8._comment | 9 + ..._651440cda405ad40a04479f5d87d581e._comment | 10 + ..._21fa189b631c246ac5df16a49c3c0178._comment | 8 + ..._1f712693d2ded5abceb869fdb7f47ef3._comment | 12 + ..._7a5ead0ce5c9429d4723ccce4f6a6d6c._comment | 14 + ..._a4683fd73ae452a9cd7f61d9930f6266._comment | 10 + ..._ced3516c3e7161e4d7e599232f62a511._comment | 8 + ...rror_unknown_UUID__59___cannot_modify.mdwn | 26 + ..._repo_after_deleted_an_encrypted_one..mdwn | 28 + ...server_error_adding_USB_drive_on_OS_X.mdwn | 25 + ..._b2ef077d87a9da624f20649c21401b5b._comment | 17 + ..._ef849e25b0264808bff800d9d3836119._comment | 10 + ..._ae3cbd0eb69cbeb9b349e0060d056d43._comment | 18 + ..._0ff2897805928b14829b7b369a3aed91._comment | 16 + ..._414a45573aeb5201f4d80433955669d5._comment | 12 + ..._cause_all_following_switches_to_fail.mdwn | 50 + ..._limit_uploads_to_an_S3_backend__63__.mdwn | 19 + ..._ef97e735ce308f7bcc03f5d9fda588bf._comment | 10 + ..._539b89de8743e435386b86119d1e982f._comment | 8 + .../Issue_on_OSX_with_some_system_limits.mdwn | 26 + ..._5fc1eedb5231edc37c87a2d9b91313b9._comment | 12 + ..._b14e697c211843163285aaa8de5bf4c6._comment | 12 + ..._18ddf8b5934dd6fb1676cd6adc7d103b._comment | 19 + ..._c25a8eb369e546f65e1a72d89f43066f._comment | 12 + ..._6407a3e7aa0316cba2994bfef0e3c633._comment | 37 + ..._f01887695e8b8386e125464c6d401565._comment | 8 + ..._c7776d5b2d073e0d2ae36515185c25aa._comment | 17 + ..._easy_to_turn_git-annex_into_a_zombie.mdwn | 25 + ..._d5fba6c061fb21795021ea83070dbfa2._comment | 8 + ..._12cba707239018989e8d5b6f456fa754._comment | 10 + ...roken_with___34__git_annex_sync__34__.mdwn | 21 + ..._380a49b3c132f9f529729a1cb5a69621._comment | 8 + ..._282f5f89fb4a46e1fad0980e0b2994a0._comment | 8 + ..._7ff98958146b7f6396226bdd878ec86e._comment | 10 + ..._f9e460a09e7e5f53c16c20ded2649201._comment | 8 + ...daemon_leaves_ssh_mux_sessions_behind.mdwn | 38 + ..._17879b98a5e79ace03b543064751e46e._comment | 8 + ..._2dc877e281750004b16619ea7b931160._comment | 8 + ...esult_in_stale_symlinks_and_data_loss.mdwn | 57 + ..._52364dc5b1b43b51748453d1896e35c6._comment | 8 + ..._99b4db1841f8630a9c5efd08910e87a3._comment | 104 + ..._fbb410a54bb0bd82d0953ef58a88600e._comment | 24 + ..._8007c9ba42a951a4426255ec3c37d961._comment | 13 + ..._73ecd4cb8ee58a8dfe7cab0e893dbe5b._comment | 8 + ..._e8a10886a564f35414c30a04335d9d32._comment | 8 + ..._6a318edfe45c80343d017dc7b4837acb._comment | 8 + ..._f7a1d9f9d40aff531d873a95d2196edd._comment | 8 + ..._1724ffdf986301bf37ef7a6d16b6ea8a._comment | 10 + ..._5470e2f50e6506139ecb1b342371c509._comment | 10 + ..._e53148a9efa061a825f668a9492182f7._comment | 10 + ...rsions_didn__39__t_show_up_on_hackage.mdwn | 11 + ..._74b56dea2100450e322e726bb55bb310._comment | 8 + ...s_support_for_glibc_2.13_debian_stable.txt | 43 + ..._dc7f726a0b60f64392cbbd1b4317bab5._comment | 10 + ..._4a0198d714bd3b52ba9baa68dc45f535._comment | 12 + doc/bugs/Local_files_not_found.mdwn | 50 + ..._5e1fcc0597594fa493ffa28aa32e1df8._comment | 12 + ...40__ssh__41___fails_to_pair__47__sync.mdwn | 175 + ..._bab9cd5bdcffec3c48b9e8657cd9bbf7._comment | 14 + ..._104898dce3c67c082a9f2b36e2f45ff8._comment | 10 + ...l_pairing_fails:_PairListener_crashed.mdwn | 18 + ..._d9c5d2147cf6d8d8477eb13b72081d46._comment | 12 + ..._60a21105145ac228f486bc4beb2ea54d._comment | 32 + ..._pairing_fails:_received_PairMsg_loop.mdwn | 39 + ..._b8c485bafd98be8c21595597af361255._comment | 8 + ..._bc63489334f44a423645021415ffe196._comment | 10 + ..._6345b174d04b6613c2c55a6ec9e50c21._comment | 16 + ..._f39ec6c3d5a016b3c5260162c0b42177._comment | 12 + ..._ca0c5ef6e6a6d2c4b64430ac68370b6a._comment | 8 + doc/bugs/Lost_S3_Remote.mdwn | 59 + ..._6e80e6db6671581d471fc9a54181c04c._comment | 10 + ..._c99c65882a3924f4890e500f9492b442._comment | 8 + ..._1e434d5a20a692cd9dc7f6f8f20f30dd._comment | 8 + ..._creating_USB_repo___40__solved__41__.mdwn | 23 + ..._0b4dcedc58e5071733e1239490aed2ea._comment | 10 + ..._1cb1ef0292a3357874b461a77c13373e._comment | 8 + ..._e5ec1e3ab304d738e3b0847287a47af4._comment | 10 + ...ror_adding_S3_repo___40__solved__41__.mdwn | 28 + ..._d95accb43bd18cc9acbbf1d4069f86b3._comment | 8 + ..._452a3c524974832f0742efb00df4d576._comment | 13 + ..._f8f6d1e0065e5ba56cd405b1c021ca09._comment | 10 + ..._b524649cee751532d20a4894d71c5cf3._comment | 8 + ..._8312ba868ef616ec00563446c9c3464f._comment | 12 + ..._1af75c691d27c97397f1901f7c2483b0._comment | 8 + ..._e519df252875de87c4ef5b727f033bdf._comment | 8 + ..._4bb959e2659991cd392853e8beacf708._comment | 8 + .../Makefile_is_missing_dependancies.mdwn | 47 + ..._5a3da5f79c8563c7a450aa29728abe7c._comment | 47 + ..._416f12dbd0c2b841fac8164645b81df5._comment | 8 + ..._c38b6f4abc9b9ad413c3b83ca04386c3._comment | 25 + ..._cc13873175edf191047282700315beee._comment | 30 + ..._0a1c52e2c96d19b9c3eb7e99b8c2434f._comment | 59 + ..._24119fc5d5963ce9dd669f7dcf006859._comment | 10 + ..._96fd4725df4b54e670077a18d3ac4943._comment | 12 + ..._a3555e3286cdc2bfeb9cde0ff727ba74._comment | 8 + ...Manual_content_mode_isn__39__t_manual.mdwn | 89 + doc/bugs/Manual_mode_weirdness.mdwn | 37 + ..._f8ab3bac9e9a6768e5fd5a052f0d920f._comment | 8 + ..._e810daa488fad32ca8bdaae620051da8._comment | 8 + ...cc26206c4a539999b04664136c6f785211a41.mdwn | 35 + ..._after_local_pairing_with_older_annex.mdwn | 31 + ..._8229df64a872bee7590f75eb78f78c4a._comment | 10 + ..._f37be896396915b1c85cff8811dceb4a._comment | 12 + ..._df7fc1078059538a76f384a40541e91f._comment | 10 + ..._70c444c61f41df2f59294c10f94f0c09._comment | 8 + ...ness_with_the_assistant_branch_on_OSX.mdwn | 15 + ..._377525e70640751e1ead445aeed15efa._comment | 8 + ...t-annex_will_not_build_on_OpenIndiana.mdwn | 36 + ..._f3c336ecfee51e074ea3a9fc95301de5._comment | 8 + ..._102c0e998934e84deca92fd1c90145fa._comment | 8 + ..._1449dd796ce9f2209f085d4b017a5f33._comment | 19 + ..._c4aa8a4379b2c056ca9b7afcff412bbc._comment | 10 + ..._6ca4dd2ad51182edf7198f38b336b9b6._comment | 8 + ...heme_does_not_follow_git__39__s_rules.mdwn | 31 + ...nstall_c2hs_-_3.20121127_and_previous.mdwn | 37 + ...way_to_re-inject_a_file_into_an_annex.mdwn | 12 + ..._c871605e187f539f3bfe7478433e7fb5._comment | 8 + ..._e6f1e9eee8b8dfb60ca10c8cfd807ac9._comment | 10 + ..._be62be5fe819acc0cb8b878802decd46._comment | 14 + ..._480a4f72445a636eab1b1c0f816d365c._comment | 8 + doc/bugs/No_progress_bars_with_S3.mdwn | 26 + ..._33a601201a9fdd2357f1c03e32fa6b9c._comment | 8 + ..._52361805ced99c22d663b3b1e8a5b221._comment | 8 + ..._5903c1c40c4562f4fbaccd1640fedb18._comment | 8 + ..._80799c33e513384894b390fe34ab312a._comment | 8 + doc/bugs/No_version_information_from_cli.mdwn | 18 + ...y_large_and_not_inherently_compressed.mdwn | 68 + ...lias_permissions_and_versions_problem.mdwn | 37 + ..._4fabe32e7e626e6ca23aa0b6f449c4c6._comment | 14 + ..._064d60fcc8366a70958540bc145e611a._comment | 11 + ..._6c72d4f40ea0a9566a1185901beff5ba._comment | 14 + ..._8a11f404bb72a1aeb2290744cce2d00d._comment | 12 + ..._30888607199d6a48b76d0c48f5aa4f64._comment | 8 + doc/bugs/OSX_app_issues.mdwn | 6 + ..._54d8f3e429df9a9958370635c890abf0._comment | 11 + ..._6d23232fbb15d0ee3ab532a4884f81ed._comment | 10 + ..._5db2baa771fd01a284eac8a16c1c8c67._comment | 8 + ..._bb2ceb95a844449795addee6986d0763._comment | 26 + ..._62170597c7f441d84d48986857998858._comment | 10 + ..._f3bc5a4e4895ac9351786f0bdd8005ba._comment | 11 + ..._cb12d419459e5cac766022ee0697fedc._comment | 18 + ..._c966fa549bc73c52034ac9abc49de52a._comment | 8 + ..._10f1df95266f1a8c9ef933183190f6e2._comment | 8 + ..._064e151da121f9c2ef13c19ecb4e7458._comment | 16 + ..._0e6ac5e0a54ce78bdc56c62e6fb92846._comment | 8 + ..._fd560811c57df5cbc3976639642b8b19._comment | 8 + ..._93e0bb53ac2d7daef53426fbdc5f92d9._comment | 15 + ..._141eac2f3fb25fe18b4268786f00ad6a._comment | 8 + ..._f4d5b2645d7f29b80925159efb94a998._comment | 8 + ..._2e6dfca0fd8df04066769653724eae28._comment | 17 + ..._e1bbe83a1b9a7385ed6d443d0cc22bc7._comment | 18 + doc/bugs/OSX_app_issues/old.mdwn | 1 + ..._bb823dc3cd6dc914ed14c176afa0b2f3._comment | 8 + ..._a30e69fed14b0809184ffe05358ab871._comment | 10 + ..._23d47b3696e537d60df1d383f33f19e4._comment | 15 + ..._be5738b42b13ec8cd828c5fa66f030e8._comment | 10 + ..._5783a4716cd104e1f1c276aa0b9cb153._comment | 41 + ..._e126d87a263f3aa6261f72ee7ff086fc._comment | 8 + ..._56c7fcafc7dca8be28ebf9e37a8f6b71._comment | 23 + ..._e58bd3d66f0f43c159d2b37172f152de._comment | 8 + ..._01f2c968bad66b0ff0c09eb468325deb._comment | 8 + ..._0b7cd3d5952c5abf36a89a68a4afc1e7._comment | 8 + ..._82d9963e1fbf17644ce697e5a43943f5._comment | 16 + ..._c2de94a48e7958b9efffd89dda9144ff._comment | 59 + ..._29af9df9ea295d114574e76e15b8e737._comment | 8 + ..._88ddc846eb4e4a2d54028a3412ba28d6._comment | 12 + ..._6d6341b05123cd317c4eac96353c8662._comment | 10 + ..._aff4ab761c4d196732baa046af45fe24._comment | 11 + ..._43bd5985d8a3a5e7f826a34e5dd9216e._comment | 10 + ..._08613b2e2318680508483d204a43da76._comment | 76 + ..._4cda124b57ddc87645d5822f14ed5c59._comment | 8 + ..._0d1df34f83a8dac9c438d93806236818._comment | 8 + ..._12bd83e7e2327c992448e87bdb85d17e._comment | 15 + ..._bc44d5aea5f77e331a32913ada293730._comment | 27 + ..._cea97dbbfb566a9fe463365ca4511119._comment | 16 + ..._911f187d46890093a54859032ada2442._comment | 10 + ..._acd73cc5c4caa88099e2d2f19947aadf._comment | 8 + ..._08b091a58106ca6050ac669579ed9ff4._comment | 11 + ..._8464c839cb169a4c6e72bebdc2065e9a._comment | 8 + ...rror:__LSOpenURLsWithRole__40____41__.mdwn | 26 + ..._0dfa839f1ba689b23f811787515b8cff._comment | 8 + ..._612b947eb5474f6d792a833e33105665._comment | 8 + ..._549b8bcae6f1f8b21932b734e32fbdd1._comment | 8 + ..._23078dfea127fa3ef20696eb10ce964c._comment | 10 + ..._7da5ef8325b8787bbf1c6e2c17b1142e._comment | 8 + .../OS_X_10.8:_Can__39__t_reopen_webapp.mdwn | 31 + ..._2653fe701a1bb20254f3d6b90f10a43b._comment | 18 + ..._d9ce701d077e40f39b142ce2cc570a3b._comment | 8 + ..._14964ab68253dc1a8903d14a821b8b40._comment | 10 + ..._4a579e9a13305ab4157f4b3eba46b92d._comment | 16 + ..._2a710960dc3a177ce62ef92f8546c496._comment | 12 + ..._a4ad73530cd0f6621bcc6394d5f39af7._comment | 41 + ...ut_the_first_copy_are_lost_on_unannex.mdwn | 54 + ..._f7149b684a97070cff051b780c73be48._comment | 15 + doc/bugs/Old_repository_stuck.mdwn | 9 + ...Error_when_push.default___61___simple.mdwn | 64 + ..._971224d2c0c0ce8d4530b1991508f849._comment | 12 + ..._6866f96277dbe83a8aadcdeb426b6750._comment | 8 + ..._eaed9b5532e30e401f50193a72b98310._comment | 13 + ..._1fab407f3823ce8cec87f5df55e49f8c._comment | 8 + ...__44___but_believes_it_has_succeeded..mdwn | 180 + ...P_sends_URLs_with_incorrect_separator.mdwn | 186 + ...use_a_USB_disk_annex_created_on_Linux.mdwn | 18 + ..._f224f4155d857a59595658357f97dac1._comment | 12 + ..._a_unix-style_local_remote_configured.mdwn | 22 + ..._95655915ff6ba9fb5d873358ff047496._comment | 10 + ...t_is_not_used__44___even_if_available.mdwn | 67 + ...___including_original_one__44___gone..mdwn | 230 + ..._3a3891c9d7ee808f6a71780cb628f23d._comment | 12 + ..._2bc6efb1d9e872cc5d4fbfbaaf5cc10e._comment | 27 + ..._fff1e778a6334258c173a96e6bf7ef6a._comment | 10 + ..._2a86da97a89e28f0a0f5e160d4932ae6._comment | 19 + ..._41b8e8e58025cc8c8f12efb9a51acd29._comment | 50 + ..._38afcd8e7fb278ca0ee2e9e0c9f6883e._comment | 10 + ..._06de36dcde4c52ab74c8134f3242ac02._comment | 9 + ...__41___even_if_repo_exists_on_Android.mdwn | 40 + ..._9f10bf273b15e93f1eea029f091f26cb._comment | 12 + ..._in_fsck_whereis_find_and_status_cmds.mdwn | 84 + ..._3aef6ca929fad198f2dda0868f2d49cb._comment | 18 + ..._f2c1aa84a0d04e840cb34ae15eb1cb03._comment | 8 + ..._480c39648e3ca6fc58c30377bdb25a8c._comment | 16 + ..._b31496b37046a9886f632ba4f11c56e3._comment | 8 + ..._d25ff424dda1f6021c1ba20f79d71ffc._comment | 12 + ..._9e3300b223dd54a3f07c650f5cf70ae0._comment | 8 + ..._b91f4a87b6d29ae6b4262922fd65a79d._comment | 8 + ...mment_in_ssh_public_key_ssh-rsa__34__.mdwn | 23 + .../Partial_direct__47__indirect_repo.mdwn | 24 + ..._42344fce051d759f95215c985e9d1135._comment | 12 + ..._8ba64f2750d0ef4adf595674c723bc65._comment | 8 + ..._bd4985864b7dcd70a609ca7bc2617e4a._comment | 8 + ..._39__typechange__39___and_direct_mode.mdwn | 32 + ..._84cb8c651584ec2887f6e1b7dc107190._comment | 8 + ...d_now_asks_for_a_commit_message__34__.mdwn | 18 + doc/bugs/Prevent_accidental_merges.mdwn | 14 + ..._4c46a193915eab8f308a04175cb2e40a._comment | 8 + .../Problem_when_dropping_unused_files.mdwn | 21 + ..._d4f6bfe8e04560fc661a47b09ed8a5f4._comment | 8 + ..._e1a99bd3eb8b3186653b52a52b1836de._comment | 10 + ..._dec3e5ffe5cfdc439f418ee00d7d9810._comment | 8 + ..._d106a87101db52f957da84d90dafcdbb._comment | 12 + ..._f28ed0635612693e437e64d872af5c37._comment | 8 + ..._f0237075653768c84deb702442645f28._comment | 8 + ..._b509006e1590480a104627369bc910f2._comment | 8 + ..._fe261c074211ccb94bbcb32cfd8ee654._comment | 14 + ..._bc8e4dc7e0d6577ba5fcc98f56627b1f._comment | 8 + ..._e9a22aa2ebcde5f6595b49dba9375761._comment | 14 + .../Problem_with_bup:_cannot_lock_refs.mdwn | 52 + doc/bugs/Problems_building_on_Mac_OS_X.mdwn | 62 + ..._1c199b826fdd84b5184b1466ad03a9a4._comment | 8 + doc/bugs/Problems_running_make_on_osx.mdwn | 49 + ..._94e4ac430140042a2d0fb5a16d86b4e5._comment | 8 + ..._56f1143fa191361d63b441741699e17f._comment | 8 + ..._ec5131624d0d2285d3b6880e47033f97._comment | 8 + ..._88ed095a448096bf8a69015a04e64df1._comment | 16 + ..._89a960b6706ed703b390a81a8bc4e311._comment | 8 + ..._6b8867b8e48bf807c955779c9f8f0909._comment | 71 + ..._5c2dd6002aadaab30841b77a5f5aed34._comment | 8 + ..._62fccb04b0e4b695312f7a3f32fb96ee._comment | 43 + ..._64fab50d95de619eb2e8f08f90237de1._comment | 24 + ..._4253988ed178054c8b6400beeed68a29._comment | 11 + ..._34120e82331ace01a6a4960862d38f2d._comment | 17 + ..._7db27d1a22666c831848bc6c06d66a84._comment | 10 + ..._cc53d1681d576186dbc868dd9801d551._comment | 8 + ..._68f0f8ae953589ae26d57310b40c878d._comment | 57 + ..._c52be386f79f14c8570a8f1397c68581._comment | 12 + ..._7f1330a1e541b0f3e2192e596d7f7bee._comment | 107 + ..._0c46f5165ceb5a7b9ea9689c33b3a4f8._comment | 9 + ..._237a137cce58a28abcc736cbf2c420b0._comment | 22 + ..._efafa203addf8fa79e33e21a87fb5a2b._comment | 8 + ..._cc283b485b3c95ba7eebc8f0c96969b3._comment | 66 + doc/bugs/Problems_with_syncing_gnucash.mdwn | 568 + ..._ca195af3ba4a286eb5ab687634192fa4._comment | 8 + ..._754fb430381ad88e6248ecb902b32118._comment | 20 + ..._25881998c6f149c70b1358f37b7c66ba._comment | 20 + doc/bugs/Provide_64-bit_standalone_build.mdwn | 6 + ..._1850bb3eb464f1d3c122cfeb4ccaf265._comment | 15 + doc/bugs/Proxy_support.mdwn | 18 + ...mote_repo_and_set_operation_with_find.mdwn | 6 + ...positories_have_to_be_setup_encrypted.mdwn | 27 + ..._95f73315657bc35a8d3ff9b4ba207af0._comment | 8 + ..._sides_have_written_to_the_repository.mdwn | 70 + ..._92211091daf9827a4ec7e5b5a6769d59._comment | 8 + ..._f0fa97a9eba1c624f6f8720ba8a160b7._comment | 8 + ..._e3d677ea4170c07cd31efe6dc85fa5f3._comment | 8 + ...e_cannot_be_reactivated_by_the_webapp.mdwn | 30 + doc/bugs/Repository_deletion_error.mdwn | 46 + ..._31673d0300986b6098d1af2cc4b180c6._comment | 10 + doc/bugs/Resource_exhausted.mdwn | 45 + ..._bccf9528ffe963154c92ce49762e7ea6._comment | 10 + ..._a5ef7a62d4ed9365f9448520bb17e3b5._comment | 9 + ..._cdba2015e603f3c21f3e1697dd6fafcd._comment | 18 + ..._747d16d050fdcf69dd3d2bc5ca469a2e._comment | 39 + ..._1e9b74e60da57c3d5f08c1eb3801c1d2._comment | 10 + ..._f55d933bce77fd2185ebd0cc46fe57ec._comment | 64 + ..._26c98fca45b029a527f9684873db4be5._comment | 18 + ..._8bab413b472f900e04977db2bc3951b6._comment | 8 + ..._e9bec0b80179b1229b6af0979a21c727._comment | 9 + ..._419e24e0b91f569294ece28c42daa246._comment | 15 + ...somewhere_in_the___39__get__39___code.mdwn | 24 + ..._66b21720cd1b2a4f66ef24252d3e6305._comment | 8 + ..._18c9f55c5af1f4f690a7727df71ab561._comment | 8 + ...ks_for_ssh_key_password_for_each_file.mdwn | 30 + ..._fd95e0bb61e80a72b4ac1304ef6c2e77._comment | 16 + ...mote_created_via_webapp_remains_empty.mdwn | 138 + ..._cccf9d58c0ebb8d31cacdd029ea8e23a._comment | 12 + ...e_same_key_for_encryption_and_hashing.mdwn | 10 + ..._dc5ae7af499203cfd903e866595b8fea._comment | 18 + ..._c62daf5b3bfcd2f684262c96ef6628c1._comment | 12 + ..._e1f39c4af5bdb0daabf000da80858cd9._comment | 10 + ..._bb6b814ab961818d514f6553455d2bf3._comment | 8 + ..._5bb128f6d2ca4b5e4d881fae297fa1f8._comment | 8 + ..._63fb74da342751fc35e1850409c506f6._comment | 8 + ...capital_letters_breaks_authentication.mdwn | 32 + doc/bugs/S3_memory_leaks.mdwn | 14 + ..._a7268213b090bce6b1f1858a8e23d90e._comment | 14 + doc/bugs/S3_upload_not_using_multipart.mdwn | 53 + ...SH_too_old_on_OS_X_10.6.8__63____41__.mdwn | 27 + ..._0c57a2196d35eb1ecfb0c51273bba05c._comment | 10 + ...lts_on_Fedora_18_with_SELinux_enabled.mdwn | 65 + ..._f708d87aa65cd38c20087859d3ab2dc7._comment | 12 + ..._fb7188db031147992f3c906783ebbee0._comment | 59 + ...tificates_with_jabber_fail_miserably..mdwn | 22 + ..._13d27ba41d9ef78c8db534b6bc26314e._comment | 12 + ..._018eed99e71680be9e7c0844020419bb._comment | 8 + ..._1e7578dd1321f399b12197056495b0b6._comment | 8 + ..._s_for_Remotes_be_case_sensitive__63__.txt | 46 + ..._00b52dba3bc30516e06c44cbfd3a05a2._comment | 17 + ..._8f5fa659c2ab91b1757bac31cd3b15eb._comment | 10 + ..._ccf9623d60c58d036d8bf24757e50de3._comment | 10 + ...d_ignore_.thumbnails__47___on_android.mdwn | 28 + ...en_network_fails___40__esp._DNS__41__.mdwn | 50 + ..._dd792bd98a48554a65150c06401ed3e5._comment | 12 + .../Small_archive_behaving_like_archive.mdwn | 33 + ..._718dc246cbbbeae04436fa033011ab12._comment | 13 + ..._34___instead_applies_it_to_all_files.mdwn | 75 + ..._2fe6d735bc075275a6b8890fac48ee58._comment | 18 + doc/bugs/Stale_lock_files_on_Android.mdwn | 44 + doc/bugs/Stress_test.mdwn | 45 + ..._1694e990eab6592159309c231c6dcc16._comment | 12 + ..._ab4cb6eefd279e6c1f229e089f703581._comment | 25 + ..._c4c764488ac082f5c48d3a6b4b5fba42._comment | 17 + ..._42125bba09a0ea9821cda7183e458100._comment | 47 + ..._8240e61106b494d3600ad91f16eb5b1c._comment | 20 + ..._c38d84e0dcc834931804c44bce7f7b7a._comment | 11 + ..._60ce20ee255451c4ea809ba475561adb._comment | 15 + ..._1371562e201393986cd41597f6f288cb._comment | 14 + ..._a14be7699da224a8f6c9b34f1b911219._comment | 8 + ..._a01995bdca7ade7dde9842b53fbc4e0c._comment | 57 + ..._9f7efe81b7e40aaa04a865394c53e20f._comment | 52 + ...omps_on___39__regular__39___git_files.mdwn | 27 + ..._0d2cb3b8509cd0eba50aafa14afefc02._comment | 63 + ...mode_to_direct_mode_breaks_duplicates.mdwn | 30 + ...er_is_not_honoring_--listen_parameter.mdwn | 21 + ..._4dd773372979dd95538bfba6516a11eb._comment | 9 + ..._broken_links_instead_of_proper_files.mdwn | 51 + ..._a2bedb2e77451b02fc66fc9ef5c4405c._comment | 11 + .../Test_failure_on_debian_dropunused.mdwn | 31 + doc/bugs/The_assistant_hangs_forever.mdwn | 46 + ..._b0291e32860e0da0b66837d14ed5aab6._comment | 8 + ..._a2950cf91b8a4e4f2951f5522ef0e9c4._comment | 18 + ..._db95f78519d5ffbad793906028730dab._comment | 12 + ..._28b13fd3165b38a2fbc9e1a461c38921._comment | 22 + ..._81a79c8840ff26307a9c6edad5b850f9._comment | 9 + ..._b739719b14705f4d7e1d412b3cab090c._comment | 17 + ..._2b300d960697c5b967c1f109dfd6dfbf._comment | 16 + ..._8623220d08b1a72ed8b669a2d9cc0f75._comment | 15 + ...d_login___40__nearly__41___impossible.mdwn | 29 + ..._8305becdc6e70abdaf17e42f263173fc._comment | 12 + ..._d75896a6e204d1abdda04923aa668d04._comment | 8 + ..._a36a4a64a04c01c2db467b09300e6ebd._comment | 8 + ..._c9d6631c304acb289e485fb901e1f274._comment | 35 + ..._10282c4352075c8d148b8674973b7b16._comment | 22 + ..._ceb68da01d9e2fe9a70fab6244116da0._comment | 15 + ..._cca4abde86a8be5e2919c4738f5bdd0c._comment | 18 + ..._2fa5d7d9110c91b0a3a833cb3d9f53fd._comment | 10 + ..._bf21d28142e4c304aa0bc740955ddea0._comment | 10 + ..._45537758fa937f16fc82120bf8b234e8._comment | 8 + ..._a38497772834a4b12137390b461ce70b._comment | 12 + ..._b685050ee6fbb1a685e33f9656a10e84._comment | 8 + ..._17bc0220c20553c848875475c5fd4ae6._comment | 12 + ..._76472bc58bb790f773c46ec2c39fcf88._comment | 11 + ..._dcd9286e314779c25764484beff40561._comment | 10 + ..._2146eec77b87b615100d0d003e8dce75._comment | 15 + ..._2bd6f4e04903ee251d43d0a97bd40b6e._comment | 8 + ..._7db8ed002eb6313b07f09bd1a34019e3._comment | 10 + ..._1bcb2a238006044bc78849e56cb21a01._comment | 9 + ..._26c6937cf78e7141e0e3b20f25ed8f7a._comment | 8 + ...dfb2e706da2cb1451193c658dc676b0530968.mdwn | 23 + ...sn__39__t_allow_deleting_repositories.mdwn | 33 + ..._1b80f9cfedd25e34997fa07e08d15012._comment | 8 + ..._53499da1185c56d8fd25f86ba41d96ce._comment | 11 + ..._3e07b8386d2c7afce2a78d24b9c260b9._comment | 14 + doc/bugs/Too_many_open_files.mdwn | 55 + ..._d5d509b9b431d2ea6000ebc0aed62857._comment | 8 + doc/bugs/Too_much_system_load_on_startup.mdwn | 24 + ..._4470cddc0965062588acff1bc77285e9._comment | 8 + .../TransferScanner_crash_on_Android.mdwn | 24 + ..._6c3584ade1ee6cccddddeaa8e1697945._comment | 20 + ..._06574e05149a677d666a722061586658._comment | 10 + ..._54ae097d30bb7a49fe151f38c9bac033._comment | 8 + ...ansfers_continue_after_daemon_stopped.mdwn | 5 + ..._39eb527d64367e6762281246f1d49b1f._comment | 12 + ...oad_to_remote_although_remote_is_dead.mdwn | 51 + ..._108b3984891f82429430b503cddfb3c1._comment | 10 + ..._fa5b1bc26ed3e5bfe48441490c94fe3a._comment | 8 + ..._0a785b5dfbf4eef30854d6bedb12b7d1._comment | 10 + ...Trouble_initializing_git_annex_on_NFS.mdwn | 16 + ..._e26952373150d63b8a5d3643a2762de1._comment | 10 + ..._f80b10ed395738e50e345fc22c708ae5._comment | 10 + ..._f99e0f05950fc2fc80fdecd35e17012c._comment | 8 + ..._e42146d2dcc4052266dd61d204aeb551._comment | 8 + doc/bugs/True_backup_support.mdwn | 7 + ..._50aa0bc1e2502622585682cb703e0b85._comment | 10 + ..._d6030c6c49b227e022f05d590746d4ca._comment | 8 + .../Truncated_file_transferred_via_S3.mdwn | 614 ++ ..._5962358e6067448f633cc0eaf42f9ca7._comment | 10 + ..._75a2c272c36fc4fe8f9a79a3fd3ac4e5._comment | 19 + ..._3dae1914c8c90fdad0c21e1fc795f2ca._comment | 8 + ..._3c5fe109f2196cfc196c30da3b62bafd._comment | 10 + ..._f86f83c89300f255e730ddd23f876f61._comment | 16 + ..._on_Android_due_to_weird_rename_error.mdwn | 37 + ..._928289956111d1b22f9d55f15b54f72f._comment | 10 + ..._6a0cb836b93ba4cb1e07b11d5d2a7094._comment | 8 + doc/bugs/Unable_to_import_feed.mdwn | 27 + ..._16230fbbb996e165b84787ed4d5f72ea._comment | 45 + .../Unable_to_switch_back_to_direct_mode.mdwn | 55 + ..._4585b251f011a153c62f377c324cf963._comment | 24 + ..._5848ebbab38d1244347f7e7351b3a30d._comment | 10 + ..._1c5c7b0c7bc336e00f43e257b87a6208._comment | 8 + ..._b0bfd68998bc3e11d8e089646b8292a6._comment | 12 + ..._to_sync_a_second_machine_through_Box.mdwn | 46 + ..._cb43a2bc976e3eb1cfc3ee9d4d34e78e._comment | 22 + ..._3375e9bfab3fed271413bd9bb5fa0121._comment | 30 + ..._c4420e1a3db321b4135b1626d3582adb._comment | 12 + ..._f4b2c88bb5938dacdd04dfe9a68560de._comment | 18 + ..._6dcc95ffb3fc7bbbedd6be5df0111c85._comment | 8 + ...to_use_remotes_with_space_in_the_path.mdwn | 35 + .../Unfortunate_interaction_with_Calibre.mdwn | 24 + ..._7cb5561f11dfc7726a537ddde2477489._comment | 8 + ..._b8ae4bc589c787dacc08ab2ee5491d6e._comment | 8 + ..._977c5f6b82f9e18cdd81d57005bb8b89._comment | 8 + ..._ff7d2e9a39dfe12b975d04650ac57cc4._comment | 8 + ..._fc4d5301797589e92cc9a24697b2155d._comment | 15 + .../Unknown_command___39__list__39__.mdwn | 15 + ..._c625d03d1ed2019141ac9202f933466d._comment | 8 + ..._800e1b6417768bdadda311ebfb5df637._comment | 8 + ..._35dfc75ce9efffff139f8929dc311e29._comment | 10 + doc/bugs/Unknown_remote_type_webdav.mdwn | 8 + doc/bugs/Unnecessary_remote_transfers.mdwn | 24 + ..._b778fbb1386f0f51bf057ffacd590ebb._comment | 12 + ..._55430eac842d0a192dc7f41d7730e4d5._comment | 10 + ..._00c18e07678dc513a02d974fe059df73._comment | 12 + ..._2e9992dbfceabd6df535a2770626de16._comment | 35 + ..._a98f3091a6a658919f0562cf396439c2._comment | 8 + ..._417c1e8e27ee1a1f9ebf9160560605c5._comment | 96 + ..._eb5a2717a1f0c7bb761d2a7866b23def._comment | 8 + ..._89f756db1f3f2e60a3bd1f35f55fee43._comment | 40 + ..._5aaf8766a7ba05c4f92715e5d5175a8f._comment | 13 + ..._e856b350632cc865d16d1995a6cdf065._comment | 14 + ..._64f831545b34b78452952cf49b5f5b05._comment | 25 + ...ncy_on_certificate___62____61___1.3.3.mdwn | 64 + ...ository_on_the_server_don__39__t_work.mdwn | 49 + ..._2143f0540fdcd7efeb25b5a3b54fe0fd._comment | 12 + ..._bca95245b457631d08b47591da6163ad._comment | 9 + ..._f54bb003096752dae0442660267a1e37._comment | 11 + ..._38bb916ed5b90b92ffa91a452ff052a9._comment | 10 + ..._5b6ef464ab1ad061f27122db40191e26._comment | 8 + ..._3727bda5082cb1f2b1f746f9f80ced7d._comment | 8 + ..._a7139f19f0b73c024cd9218eb01e6104._comment | 8 + ..._Github_as_remote_throws_proxy_errors.mdwn | 27 + ..._10616b17c3fb8286fdc64c841023f8a1._comment | 9 + ..._8a72887d33e492a041f8246d93d0c778._comment | 8 + doc/bugs/Using_a_revoked_GPG_key.mdwn | 34 + ..._7bb01d081282e5b02b7720b2953fe5be._comment | 8 + ..._9c0c40360f0058a4bd346c1362e302b6._comment | 8 + ..._8f69f58107246595f5603f35c4aa7395._comment | 8 + ..._78b3c52ba85edfa6ee6e273bec3bea5c._comment | 13 + ..._a85ccf2f09ebe87147f8761b81a02326._comment | 8 + ..._8b89eb5e6386acd0a922310c04f863ac._comment | 12 + ..._20dc5a7ce7cb6ca97ccdfb923c3b24bb._comment | 10 + ..._9dc921dc6077f828454a4444088b9a43._comment | 15 + ..._f50c802d78041fd1522f0e7599ce6a45._comment | 42 + doc/bugs/WEBDAV_443.mdwn | 307 + ..._9ee2c5ed44295455af890caee7b06f1a._comment | 18 + ..._863a7d315212c9a8ab8f6fafa5d1b7f5._comment | 8 + ..._c17a4e23011e0a917dbe0ecf7e9f0cb5._comment | 8 + ..._3414416ff455d2fd1a7c7e7c4554b54d._comment | 11 + ..._e1da141eefb0445c217e5f5c119356da._comment | 8 + ..._41c3134bcc222b97bf183559723713d9._comment | 27 + ..._89621b526065b5bef753ce75db1af7b5._comment | 14 + ..._131a1b65c8008cf9f02c93d4fb75720b._comment | 10 + ..._b4f894a0b9ebb84ab73f6ffcf0778090._comment | 29 + ..._c6572ca1eaaf89b01c0ed99a4058412f._comment | 10 + ..._a357969cde382a91e13920ee1e9f711c._comment | 8 + ..._213815d6b827d467c60f3e8af925813b._comment | 14 + ..._b775be4b722fc7124d9fbe2d5d01cc9f._comment | 22 + ..._c4ea745da437e56b2426d1c2c00dfcec._comment | 17 + ..._ef05c0ae88fee9c626922c6064ffdf1e._comment | 8 + ..._eecabe8d5ed564cb540450770ca7d0b6._comment | 8 + ..._7f77ba8ebd90186d3b3949ae529ba393._comment | 12 + ..._87ebdc92b48d672964fb3f248c53600f._comment | 9 + ...WORM:_Handle_long_filenames_correctly.mdwn | 4 + ..._77aa9cafbe20367a41377f3edccc9ddb._comment | 10 + ..._fe735d728878d889ccd34ec12b3a7dea._comment | 8 + ..._2bf0f02d27190578e8f4a32ddb195a0a._comment | 10 + ..._8f7ba9372463863dda5aae13205861bf._comment | 8 + ...539999b04664136c6f785211a41_segfaults.mdwn | 31 + ..._6c872dff4fcc63c16bf69d1e96891c89._comment | 8 + ..._5cad24007f819e4be193123dab0d511a._comment | 10 + ..._d449bf656a59d424833f9ab5a7fb4e82._comment | 8 + ..._ffb1ce41477ad60840abd7a89a133067._comment | 8 + ..._cebbc138c6861c086bb7937b54f5adbc._comment | 8 + ..._5e27737a5bb0e9e46c98708700318e67._comment | 8 + ..._1f92da712232d050e085a4f39063d7a6._comment | 21 + ..._4153dc8029c545f8e86584a38bd536fb._comment | 15 + ..._f85b6eb5bfd28ffc6973fb4ab0fe4337._comment | 8 + ..._c747c488461c98cd285b51d3afc2c3eb._comment | 10 + ...her_crashed:_addWatch:_does_not_exist.mdwn | 25 + ..._24f511a8103727894c6e96798a559870._comment | 10 + ..._e14eddbc09cadbf1e4dbbb0c07e0e5b0._comment | 10 + ..._513fae4d379008f954a307be8df34976._comment | 13 + ..._172eaeb3bb8b502379695aba35f96120._comment | 12 + ..._8adb9de82cc8581422734acc66dd094c._comment | 11 + ..._02f0beef1188bfa336bf4220eb5c6286._comment | 13 + ..._47__storage__47__sdcard1_-_bug__63__.mdwn | 43 + ..._71b052be40fbdaca09ca3ede8c59ac7a._comment | 8 + ..._0f7cc02e0193c969c9b6ceb27e71af8a._comment | 20 + ..._1a7542249b9c37507126e97441057c12._comment | 12 + doc/bugs/WebDAV_HandshakeFailed_.mdwn | 7 + ..._40499110ea43bc99ad9dd9f642da434c._comment | 15 + ..._506712e8cc5b47b9bd69edf67ae54da7._comment | 10 + ..._5641481d9e9ed2b711b1516f1abc5c30._comment | 8 + ..._1d609de93fa66ce9dc802e67b5922243._comment | 8 + ..._62761882d30c1b02930c938cb8e30ed4._comment | 10 + ..._acda8fae848ec486ce2a0b3dff3bd0a5._comment | 8 + ..._6c51b6c7dd477d8911dd9a7a5c41ea2e._comment | 8 + ..._e834f791d3000669fab25732a7c72ab3._comment | 13 + ...Webapp_fails_to_resolve_ipv6_hostname.mdwn | 15 + ...aviour_of_direct_and_indirect_annexes.mdwn | 57 + ..._56474a69c2f174d83be9137d3c045a47._comment | 33 + ...4___git_annex_uses_9x_times_diskspace.mdwn | 49 + .../comment_0._comment | 34 + ..._037a6dd6e15ef5f789a1f364f7507b53._comment | 45 + ..._614e4110188fc6474e7da50fc4281e13._comment | 10 + ..._dcb74fb91e1c2f0db4efd68c8bcbc96c._comment | 20 + ..._38671ba8d302f4d32460d1478abd2111._comment | 45 + ..._483244b1ed5744308022465f45c091fd._comment | 14 + ..._d2c63723fa4bf828873770a42ffaab20._comment | 8 + ..._52f0db73dc38c3e3a73f6c7a420bf016._comment | 8 + ..._93596b4d5a48ffcf4bc11ba9c83cf7ca._comment | 9 + ..._de94e80dde6d12485140bb079d74d775._comment | 14 + ..._5f34c3d449247b4bce4665b3ea4d054c._comment | 25 + ..._b43ae8aec23ba3acaf70edc0de058710._comment | 17 + ..._13b8e0a62f6b6d02960687e206a8b016._comment | 15 + ..._818b94a74b01a210d1106dd35bc932d8._comment | 10 + ...and_Linux_in_direct_mode_confuses_git.mdwn | 384 + ..._155e0c4d3aa41eebfe27533ab70a91d3._comment | 68 + doc/bugs/Windows_build_test_failures.mdwn | 1232 +++ ..._ea7523fdbafdc8be2971df52d9038826._comment | 10 + ..._and_wget__44___but_not_required_DLLs.mdwn | 17 + ..._a7bf0f027f2209e5632e292afd7214d0._comment | 10 + ...e_letters_cause_git_annex_get_to_fail.mdwn | 131 + ..._c87bae87b7902db60a3fef41e1fca85d._comment | 9 + ..._9e3c1f1ba05d8996b5a95829ce32c07e._comment | 10 + ..._3a0787912f4a3a8797b7786f5ce38590._comment | 8 + ..._c4249f32d65594d79ea01145b93ec948._comment | 9 + ...S3__44___GPG_ask_for_a_new_passphrase.mdwn | 21 + ..._a4fc30bf7d39cae337286e9e815e6cba._comment | 13 + ..._e5d42b623017acedf6a3890ce15680a3._comment | 12 + ..._e5150b65b514896e14b9ad3d951963f7._comment | 10 + ..._47c2fc167b0c396edc40468fb7c7bfee._comment | 8 + ...emote_annexes_have_at_least_numcopies.mdwn | 39 + ...ong_port_while_configuring_ssh_remote.mdwn | 35 + ...esses_and__47__or_stuck_git_processes.mdwn | 44 + ..._0f8b248025722309e9577d7dad74b76b._comment | 10 + ..._f5f7db688a2a93ee7453674fb742043b._comment | 52 + ..._ffcae976aa3dc2426188797c1aaffb82._comment | 10 + ..._8a7ff6841ad7c27ead06bf12f46b20a0._comment | 49 + ..._406fdee0728680774a69d28446163f10._comment | 26 + ...dding_4923_files__34___is_really_slow.mdwn | 100 + ..._5f3b9f00bc31ce71d695c008971ed7fd._comment | 16 + ..._708b02dd06a1eed6b5ded9eb7aa9e7a8._comment | 16 + ..._6a735b7875d2a0c92df6786dd649985d._comment | 28 + ..._7e768908ba6983ea13af27635c4a947f._comment | 12 + ..._34__Network_unreachable__34___error..mdwn | 39 + ..._6d821af99ab3c83a5b0f52d3713ab8e2._comment | 10 + ..._206b6c8cce8350fc088f01c42fc4715b._comment | 8 + ..._ed36f503f88611382b50687608b9b7e7._comment | 10 + ...rating_in_a_symlink__39__ed_directory.mdwn | 18 + ...etes_all_files_with_identical_content.mdwn | 49 + ..._2eb20b65582fa7f271b1d0bb5560d08c._comment | 10 + ..._b14e1d31dd6a8fb930fcc0bec798e194._comment | 19 + ..._1892bcfbe3c462aa74552a241d65cad9._comment | 8 + ..._dfa0e31996eaa14e2945c1d11670c4d9._comment | 15 + ..._e2a9336cf1080c158765d4adfe72f26b._comment | 9 + .../__34__fatal:_bad_config_file__34__.mdwn | 14 + ...4__git_annex_watch__34___adds_map.dot.mdwn | 23 + .../__34__make_test__34___fails_silently.mdwn | 4 + ..._f868e34f41d828d4571968d1ab07820a._comment | 16 + ..._fb9e8e2716b0dea15b0d4807ae7cd114._comment | 8 + ...it_add__39___for_parent_relative_path.mdwn | 15 + ...ulling_in___39__archive__39___content.mdwn | 24 + ..._56f9cd5cc2e089b32cb076dc2e2a8ca5._comment | 22 + ..._21c0f7f328cb51080fbd97e086c47a30._comment | 37 + ..._3287b2f25f3b5ae4c27f4748694563ee._comment | 8 + ..._e515eca68a70d40c522805d7e0d7c0e6._comment | 24 + ..._b27f4c103dda050b6e9cf03ea3157abc._comment | 10 + ..._2cc7083dab944705bf91fc00319b75e6._comment | 9 + ..._1175f9be789d4c1907f0be98e435bd2f._comment | 10 + ..._78e6164ef67a9560a3a9ead1f7a72473._comment | 15 + ..._1d578fd13022dcd6382b415a7f6e097a._comment | 8 + ...ot_installed_automatically_on_xubuntu.mdwn | 22 + ..._f4656f8a0f36535def0772db06098c5f._comment | 13 + ...kcheck_that_satisfies___62____61__2.1.mdwn | 40 + ...ause_syncing_with_specific_repository.mdwn | 8 + ..._it_easily_with_the_terminal_app_menu.mdwn | 21 + ..._9bb53c45d685b368c7ba1758885f2874._comment | 12 + ..._251311a04f1a610e54ebe8e9b92de72e._comment | 13 + ..._symlinks_are_fixed_in_the_background.mdwn | 51 + ...6___run_on_non-annexed_files_is_no-op.mdwn | 15 + ..._9b671e583eec5adf870dccd1e97b5dbc._comment | 8 + ..._d11744202213d6f897f4234bc4c70c18._comment | 9 + ..._a729deb465ff44f5a9b87c963cd6235a._comment | 15 + ..._3f735503df9a08472d42fabd219c2ec5._comment | 31 + ..._2c61eabbba7fd2a52ba02d59a0a76a42._comment | 8 + ...git_annex_import__96___clobbers_mtime.mdwn | 62 + ..._d173f2903faf4bff115a0be02c146ce9._comment | 8 + ..._3563d9eeb9806f8ca1b9b340925837f5._comment | 18 + ..._d5c7488db16b71c4f337662c897278ca._comment | 95 + ..._7235130786e764ec3ad5facfecde62da._comment | 8 + ..._work_on_other_git_annex_repositories.mdwn | 113 + ..._94ccd548c084286163eeb2af1ddc18e3._comment | 8 + ..._befde3ef3d2b171ebb691915ff3af172._comment | 8 + ..._git_annex_sync__96___ignores_remotes.mdwn | 106 + ..._39421e6935233cd8f45949ebdef369fe._comment | 9 + ..._53fb15d6fbf96d43564ff7c866239d18._comment | 8 + ...ch_repositories_on_android__in_webapp.mdwn | 21 + ..._d488d71a72eb54d7711d2a867db6172f._comment | 8 + ..._85b31db6d0fb2d20018db3d8c8258bf4._comment | 8 + .../acl_not_honoured_in_rsync_remote.mdwn | 57 + ..._aa6fe1d7b029eae7ee71c97e0f0937a6._comment | 8 + ..._ffb9424e966ee10a4fe2d446b3042cb2._comment | 10 + ..._to___34__git_annex_dropunused__34___.mdwn | 21 + .../add_script-friendly_output_options.mdwn | 19 + ...kes___39__git_annex_unused__39___slow.mdwn | 87 + ..._d350c39c67031c500e3224e92c0029ea._comment | 19 + ..._b2d2b1caa51ffec3d87c36b373cb8d4a._comment | 20 + ..._12b20cbbc2b4cd1ab8af7e3eec9589b4._comment | 30 + ..._a50b43c15d2650df90f0fa1ced47f532._comment | 10 + ..._7328bc51bd001f2b732a92a2ae175839._comment | 114 + ..._880ef2ee797221332dbb629b2d55522f._comment | 10 + ..._826fd82cdf9b1c79c9b555ca26c2c176._comment | 8 + ...g_an_rsync.net_repo_give_an_gpg_error.mdwn | 22 + ..._f55cfc133be72ac10cae93c877c487df._comment | 21 + ..._24dd024ac4b21a82a781343b8fe3891e._comment | 11 + ...__and_reports_fail__44___but_succeeds.mdwn | 197 + ..._1f5e0bc93631baf0f8c1bec2e68493c5._comment | 20 + ...th_--file_doesn__39__t_actually_relax.mdwn | 26 + .../addurl_fails_on_the_internet_archive.mdwn | 65 + ..._e227aa25eea0b41f1176037a601c5844._comment | 10 + ..._6d4fd58f0caa1f75ee2dd3f0a909cd91._comment | 8 + ...k_with_spaces_in_filenames_and_--fast.mdwn | 29 + ..._eea9477ea1157cb88c8a07d8da5f0dba._comment | 10 + ...s_repository_with_the_same_name_twice.mdwn | 24 + ..._ba7801403e7138684704a3471c8bc4a6._comment | 12 + ..._8c19a4ddedbe7ddb8bdcf84acac68cc8._comment | 14 + ...h_CPU_usage__44___unclear_how_to_quit.mdwn | 28 + ..._1d841ff0b0ffd814efed2449dc1f35f3._comment | 10 + ..._cd101e0af45d8f463011fb0d04b3b822._comment | 9 + ..._8595041cfe703d9bea49e792732dc15f._comment | 8 + ..._8e7bc6965ea967a8d43240791a30c5bc._comment | 9 + ..._891c1073f908b204651899d41599f944._comment | 8 + ..._de02b8f1b5928fa1a7078c4aa2124bea._comment | 11 + ..._506acc4275a81ed9e9b08e8a40fcf96a._comment | 9 + ..._d38d6f40db4c9437764c7b2ddf36b5a9._comment | 10 + ..._9bb23e9cbc77ecca4b1209b0f66bc2b0._comment | 8 + ..._d1ce7fc251db076da61eed5bb9d71b9a._comment | 9 + ..._feb71c1022ff65d82e66a3958a41dfb2._comment | 8 + ...axy_nexus_java.lang.SecurityException.mdwn | 41 + ...-rsync-options_shell-split_carelessly.mdwn | 16 + ..._2636e0d224317f2e6db94658d8a094c4._comment | 23 + ...s_not_overriden_by_--numcopies_option.mdwn | 16 + doc/bugs/annex_add_in_annex.mdwn | 6 + ...__34__No_such_file_or_directory__34__.mdwn | 68 + doc/bugs/annex_get_over_SSH_is_very_slow.mdwn | 33 + ...nnex__47__uninit_should_handle_copies.mdwn | 20 + ..._c896ff6589f62178b60e606771e4f2bf._comment | 10 + ..._9249609f83f8e9c7521cd2f007c1a39e._comment | 8 + .../another_build_error_in_assistant.mdwn | 79 + doc/bugs/archiving_git_repositories.mdwn | 1 + ..._51f546a571303118446a9e0b3e6482c9._comment | 10 + doc/bugs/assistant_-_GTalk_collision.mdwn | 17 + ..._ab2c1f36113d40f27e1893d32f214296._comment | 12 + ..._91dff34c629a3b3a97a2313ff077e4ae._comment | 14 + ..._fefb73f6e570f96b4d82779d6622f690._comment | 8 + ...__34__too_many_open_files__34___error.mdwn | 32 + ..._9904c30a4c24a699d71e90ce5e9b89cf._comment | 8 + ...ssistant_always_assumes_port_22__63__.mdwn | 39 + ...adding_encrypted_usbdrive_repo_on_mac.mdwn | 53 + ..._4ea192e57f86a33087997746722e6acf._comment | 10 + ..._622ad5b34780fc8468c5c515ad9f27fa._comment | 8 + ..._1650539846521ae11837e4ac73348af6._comment | 9 + ..._b91415e4ee74eb12bc6e6faddd00af6e._comment | 12 + ...oes_not_allow_adding_an_existing_repo.mdwn | 8 + ..._87e84d56d56abefe8cac8a52b76c9003._comment | 8 + ...epo_cost_info_when_queueing_downloads.mdwn | 16 + ...es_not_list_remote___39__origin__39__.mdwn | 26 + ..._ffa008240c61b50396aa92f467731db6._comment | 12 + ..._a53f80090bc2a0f32b8d8307cb24b563._comment | 8 + ...es_not_warn_on_files_it_failed_to_add.mdwn | 46 + ..._13b2f93b7d09c8fd6c22829a0dc6428b._comment | 10 + ..._94e46bc0044b8a91a9fd51058825aa8f._comment | 60 + ..._10a38bdbf31dd4071e4bc4ac746d9c56._comment | 11 + ..._b8fdf502c7e80aece5a9544a2078c85c._comment | 36 + ..._a2ff7668f2a0d549b362d7de97fac8a1._comment | 10 + ..._60d72f34a6cfd1c081f74aa610f4305a._comment | 33 + ..._53a73e662c9356b759fbfa1e5a3bd927._comment | 14 + ..._10b65168b6a54d960427966d7e3d05f5._comment | 19 + ..._b640e8fa6aafb041d66bbf8857a8fa3d._comment | 44 + ...t_doesn__39__t_sync_empty_directories.mdwn | 30 + ..._78a3bde607f43c0f518bd2d3d7196022._comment | 8 + ..._83777384b72732b1d0a19b32686d3d1f._comment | 8 + ..._f9b2a700c060707fae1bcb2ec0e4e4dc._comment | 9 + ..._014d213a959dd7993bdd247722a8817e._comment | 8 + ..._440f349781d7d9ca2d1ed81386f7dd26._comment | 8 + ...nt_doesn__39__t_sync_file_permissions.mdwn | 45 + ..._fc8d3ea209a2ab39c1aeff52452d4c58._comment | 10 + ..._1a364c422e0dd7418f74e1cc3d543a3c._comment | 8 + ..._4d5ae51b4c7e6177d934d7c9f21b912c._comment | 8 + ...sync_in_preferred_content_mode_manual.mdwn | 24 + ..._37acb3afafb1b4c4da7c778130cf3035._comment | 8 + ..._9d58887ee0184663852bde83b8d497c7._comment | 10 + ..._b70881c8026e30fd3ddc051bd01a888b._comment | 8 + ..._43f756e2e6ff985c8e050da0e369d486._comment | 25 + ..._eda947eb7f8c46b9a61d6430b5f9ebfd._comment | 25 + doc/bugs/assistant_hangs_during_commit.mdwn | 27 + ..._aacc15c589d2795254387e427b3afe0c._comment | 8 + ..._b9f1bf9fa919603dca28182c80d39a11._comment | 10 + ..._fb5be10fcf5e7c89da5c34f48539612f._comment | 12 + ..._9ba7efe9112578729d02ac4e6557b3cc._comment | 10 + ..._73b24c901c73d41e0e0abe91267d4920._comment | 16 + ..._1a30b8c82e58222f1366aa368c23e6d3._comment | 10 + ..._56868b2a504ad0a60e8a8c1928330175._comment | 8 + doc/bugs/assistant_ignore_.gitignore.mdwn | 31 + ..._3458b1342cb2e3ccc01eeedc7f0e48fc._comment | 8 + ..._22f75af80c779dcb4d6033b90373f74e._comment | 10 + ..._8b2a400e1d44a1c9b183e2b7861efbe3._comment | 8 + ...__group__44___tries_to_transfer_files.mdwn | 56 + ..._e3f545d9adc27a4e7340bf16177c4fe0._comment | 12 + ..._1403076dbc47733607f0c8b2856e2381._comment | 37 + ..._af83717bfb260bea6d52ff71c6b34743._comment | 8 + ..._b4f811611d14e7392009c539fa6b8574._comment | 8 + ...t_::1_which_breaks_IPv6_enabled_hosts.mdwn | 30 + ..._91a62a2ce14a1027d2ac8b8e88df5f0c._comment | 12 + ..._4982cd373eaaeee180be03c6e9fda7b1._comment | 10 + ..._85d264e311acaa91dac0597ee8deda82._comment | 8 + ...g_file_renames__44___not_fixing_files.mdwn | 68 + ..._e0dafc410ffd617d445bb9403c7bfafe._comment | 9 + ..._2af247c8a1fcbde10795a990ef3303e9._comment | 9 + ...emotes_even_when_all_remotes_disabled.mdwn | 33 + ...othing_to_drop_or_copy_to_that_remote.mdwn | 5 + ..._10a9570a5d762ba2da271b38dc63edb6._comment | 12 + ..._57d50955b038c2e2405068536c7e83f3._comment | 8 + ..._a66f34daaba421c87eb404ef933e5191._comment | 10 + ..._094a3272eca1c6d2b4d264911ffe96e5._comment | 19 + ..._0161410d042a3421addd4a1fc7c1cd01._comment | 10 + .../authentication_to_rsync.net_fails.mdwn | 30 + ..._9db65f89415c8d825f268afb75244998._comment | 10 + ..._version_upgrade_leaves_repo_unusable.mdwn | 72 + ..._with_file_names_with_newline_in_them.mdwn | 5 + ..._92dfe6e9089c79eb64e2177fb135ef55._comment | 10 + ...bad_comment_in_ssh_public_key_ssh-rsa.mdwn | 22 + ..._15cce6e6f455e83f4362a38c561bc973._comment | 17 + ..._e9e1f38880a32610b3fbce475bffc3e4._comment | 12 + ..._51da7f5881f65422328d341e5ab0d250._comment | 33 + ..._ba384314c1e47ec4b72e1843e0500df9._comment | 10 + doc/bugs/bare_git_repos.mdwn | 29 + doc/bugs/box.com_never_stops_syncing..mdwn | 63 + ..._124a5edcd89cc6b61e1a41f5b4d640d7._comment | 10 + ..._42574181aa721319ba54eadf0a15ddff._comment | 11 + ..._2ad727849070cfd52d6c719478e9cce3._comment | 8 + ..._83ce23e45f5a5845d4f04519ee14ec65._comment | 9 + ..._ef1c9d87b04db5047ab72167d3269687._comment | 8 + ..._c9cb39eba941678035f9b2888da1085c._comment | 10 + ..._4b0632a4e37c96959a8e6434e9fd86fb._comment | 17 + ..._d9d318b8c958de6031ae323da20af625._comment | 55 + ..._689ac6a4a305197cf5566f98dab47b4b._comment | 8 + ...nd_constraints_issues_with_3.20121112.mdwn | 45 + ..._in_Assistant__47__WebApp__47__Gpg.hs.mdwn | 57 + ...e75fb23fca94ad86c3f0ee816bb0ad2ecb27c.mdwn | 25 + .../build_is_broken_at_commit_cc0e5b7.mdwn | 13 + ...ff14054e65ecbe801eb66786a55fa5245cb30.mdwn | 43 + ..._latest_release_0.20110522-1-gde817ba.mdwn | 14 + doc/bugs/build_problem_on_OSX.mdwn | 18 + doc/bugs/building_on_lenny.mdwn | 80 + ...mote_failed_with_localhost_+_username.mdwn | 49 + ..._0e669c3039b089fa8a815d3ec11465d2._comment | 20 + ...dule___96__Data.AssocList__39____34__.mdwn | 23 + ..._0da9fd67c3cc01b316f95a1df4eb62ae._comment | 8 + ...bal_configure_is_broken_on_OSX_builds.mdwn | 14 + ...abal_install_fails_to_install_manpage.mdwn | 43 + ...fails_with_complaint_about_regex-base.mdwn | 34 + ...___40__non-git-annex__41___repository.mdwn | 208 + ..._dd202a7764d9df998868d595a86ffb21._comment | 30 + ..._ca065c82ac8e3215b581660f3e44f459._comment | 51 + ..._927a01f9961c71bedb42c519a31b5fe5._comment | 14 + ...t_annex_get_from_annex_in_direct_mode.mdwn | 23 + ..._20c31a844d8351a99cf69e05d2836e0e._comment | 19 + ..._f26e0f763f9027d9dfc08cd840ced153._comment | 10 + ...t_from_the_command_line_anymore__63__.mdwn | 31 + ...ant_with___34__host:port__34___syntax.mdwn | 30 + ..._397eb359c3f8ef30460a9556b6f55848._comment | 14 + ...file__44___get___34__user_error__34__.mdwn | 32 + ..._14aa717c1befcbbf526f25ca2f0af825._comment | 14 + ..._7f7ac59e7f3dce9d7a7d0c3379c2edcf._comment | 18 + ..._5ebf03120b12edb3fbb8954546e7603e._comment | 8 + ..._1ba6d2614778949520b47896fd98b598._comment | 8 + ..._4a6e55861a63b350a02edb888b4da99b._comment | 21 + doc/bugs/cannot_connect_to_xmpp_server.mdwn | 32 + ..._5072de8fcca9fe70bc235ea8c8ee2877._comment | 8 + ..._dabd74bba1f38b326a2d0c86d3027cd9._comment | 17 + ..._0245b426cc0ab64f8c167b8806b03f5d._comment | 10 + ..._307df11b5bcf289d7999e1e7f7c461c9._comment | 10 + ..._f24378cf30a7d32594da90749fabec3c._comment | 12 + ..._4b07093be844ac62b611cee1dfde5aa7._comment | 8 + ..._fe1ed152a485c4aebfa9b9f300101835._comment | 8 + ..._2d311f520aee04287df6bddfd8535734._comment | 28 + ..._d9f916f012184738446c5996ee9d2270._comment | 13 + ..._0b5f9350e2367301241c7668a15815ef._comment | 8 + ..._f00b6ae154004e405f0bd23b7359962e._comment | 8 + ..._41b86468013da15f46be29da520afa10._comment | 8 + .../cannot_determine_uuid_for_origin.mdwn | 135 + .../cannot_link_executable_on_android.mdwn | 28 + doc/bugs/case-insensitive.mdwn | 20 + doc/bugs/case_sensitivity_on_FAT.mdwn | 49 + doc/bugs/check_for_curl_in_configure.hs.mdwn | 92 + ...cking_back_in_the_web_browser_crashes.mdwn | 23 + ..._c962218657a28494ff837a471d71b43f._comment | 8 + ..._643b2c99ecfe851c576a023ce4385dbb._comment | 10 + ..._6e85c50439da81212f4239c74947b75e._comment | 12 + ....git-annex.assistant.plist_is_invalid.mdwn | 15 + ...rgument___40__invalid_character__41__.mdwn | 228 + ...on_OSX_as_mntent.h_doesn__39__t_exist.mdwn | 8 + ..._processes_can_lead_to_locking_issues.mdwn | 53 + .../configurable_path_to_git-annex-shell.mdwn | 7 + ..._fb6771f902b57f2b690e7cc46fdac47e._comment | 10 + ..._2b856f4f0b65c2331be7d565f0e4e8a8._comment | 8 + ..._aea42acc039a82efc6bb3a8f173a632e._comment | 12 + ..._builds_a_broken_git-annex_executable.mdwn | 57 + ...d_detect_uuidgen_instead_of_just_uuid.mdwn | 6 + doc/bugs/conflicting_haskell_packages.mdwn | 17 + ..._e552a6cc6d7d1882e14130edfc2d6b3b._comment | 24 + doc/bugs/conq:_invalid_command_syntax.mdwn | 30 + ..._f33b83025ce974e496f83f248275a66a._comment | 10 + ..._195106ca8dedad5f4d755f625e38e8af._comment | 9 + ..._55af43e2f43a4c373f7a0a33678d0b1c._comment | 15 + doc/bugs/copy_doesn__39__t_scale.mdwn | 38 + ..._7c12499c9ac28a9883c029f8c659eb57._comment | 10 + ..._f85d8023cdbc203bb439644cf7245d4e._comment | 15 + ..._4592765c3d77bb5664b8d16867e9d79c._comment | 11 + ...ast_confusing_with_broken_locationlog.mdwn | 6 + ..._435f87d54052f264096a8f23e99eae06._comment | 8 + ..._9be0aef403a002c1706d17deee45763c._comment | 24 + ..._26d60661196f63fd01ee4fbb6e2340e7._comment | 11 + ..._ead55b915d3b92a62549b2957ad211c8._comment | 35 + ..._191de89d3988083d9cf001799818ff4a._comment | 10 + ..._b3e3b338ccfa0a32510c78ba1b1bb617._comment | 8 + ..._04a9f4468c3246c8eff3dbe21dd90101._comment | 8 + ..._6a41bf7e2db83db3a01722b516fb6886._comment | 18 + ..._9f5f1dbffb2dd24f4fcf8c2027bf0384._comment | 8 + ..._b596b5cfd3377e58dbbb5d509d026b90._comment | 14 + ..._d7112c315fb016a8a399e24e9b6461d8._comment | 12 + ..._4ea29a6f8152eddf806c536de33ef162._comment | 14 + ..._0d85f114a103bd6532a3b3b24466012e._comment | 8 + ..._d38d5bee6d360b0ea852f39e3a7b1bc6._comment | 12 + ..._29c3de4bf5fbd990b230c443c0303cbe._comment | 10 + ..._2cee4f6bd6db7518fd61453c595162c6._comment | 8 + ...to_webdav_sometimes_doesn__39__t_work.mdwn | 74 + ..._77629f620b28ac62364de44b41fa539d._comment | 8 + ...y_where_a_mountpoint_should_have_been.mdwn | 27 + ..._41cfd5e48426a6ef52bef70a06a6f46a._comment | 11 + ..._bd584ccbe128427fca99e61d66d301c9._comment | 18 + ..._5bb0347215b321444643646f25a35759._comment | 10 + ..._73848a9c783ecf3d9fccdd41b20fbe36._comment | 56 + .../creating_a_remote_server_repository.mdwn | 24 + ..._de1a370347428245bcfca60eaca96779._comment | 10 + ...s_directory_not_automatically_created.mdwn | 3 + doc/bugs/cross_platform_permissions_woes.mdwn | 36 + ..._7f01104de38a6a319a8f36aa1dc8b4b3._comment | 14 + ..._0a34e11b466fad287325425e76487fa1._comment | 73 + ..._278f91b4bc4c32717ab1c39c2abf9305._comment | 8 + ..._eb6a271cb63c71341469c9ff89dc0eb9._comment | 9 + doc/bugs/cyclic_drop.mdwn | 104 + ...icting_directory-file_of_direct_repos.mdwn | 199 + ..._294c33af08649256908a97894f93c05d._comment | 10 + ..._02a2b69adbb04b557146e713b70b34d2._comment | 14 + ..._d296ef26fc90f4e3166bba6d2de0a1ee._comment | 8 + ..._33ba2c890c962a71ae9fadc417359f8e._comment | 8 + ..._39eb0bb96fd271bd0de4a3a40814ae1b._comment | 11 + ..._d80c4b631bdf58901a06f29a2c5682e2._comment | 8 + ..._add__34___on_android_in_direct_mode_.mdwn | 19 + ..._eb6db7f6a156a065e2724c2de5fc4366._comment | 10 + ..._59a96cade9e4881767562a139fc7fb4b._comment | 40 + ..._bf9d2562d66f0f6a9478ac178606cf4e._comment | 12 + ..._ad0dbdc448fff2e126ffec9aac6d7463._comment | 23 + ..._e828585e56b10710598143483ce362b6._comment | 12 + ...ct_mode_assistant_in_subdir_confusion.mdwn | 37 + ..._351143deec29e712f8718a373ad650d7._comment | 8 + doc/bugs/direct_mode_renames.mdwn | 15 + ..._f18c335e0d6f4259d2470935ef391cb8._comment | 8 + ...ect_mode_sync_should_avoid_git_commit.mdwn | 5 + ...T32_fails_to_addurl_containing___63__.mdwn | 44 + ..._+_chunk_size___61___lost_files__63__.mdwn | 51 + ..._69dfbf566c75396cdaaf5ad70f1a94a8._comment | 19 + ..._8d09cc0e06548c4ebde7956edd1b5d85._comment | 8 + ..._bcac9fd7b3f4a2ac28bee59bae674fa0._comment | 79 + ..._c9088060fb9133b66951f1a3075981e8._comment | 18 + ..._5bf34466187cfc9b34bd3ca8c89a07c6._comment | 20 + ..._d6201f2d86d5b44051a7fd7a8c9de583._comment | 8 + ..._61c5f0889f30a68ac3b57c4ea564ee0e._comment | 8 + doc/bugs/done.mdwn | 4 + doc/bugs/dotdot_problem.mdwn | 4 + ...fails_to_see_copies_that_whereis_sees.mdwn | 69 + ..._f5a9d99d90daf5eba4773d361fa1807a._comment | 14 + ..._040aa454cd8acd2857ef36884465576f._comment | 16 + ..._f5d8faab325ee26800ecad5aba49b54b._comment | 10 + ...ng_from_web_remotes_doesn__39__t_work.mdwn | 139 + ...opping_files_with_a_URL_backend_fails.mdwn | 13 + ...9__t_handle_double_spaces_in_filename.mdwn | 87 + ...ed_doesn__39__t_work_in_my_case__63__.mdwn | 70 + doc/bugs/encfs_accused_of_being_crippled.mdwn | 41 + ..._5c5be012e1171ef108f38825d72791b6._comment | 23 + doc/bugs/encrpyted_ssh_remote_on_macosx.mdwn | 42 + ..._46c37aacb7ae41864488fb7c7d87d437._comment | 10 + doc/bugs/encrypted_S3_stalls.mdwn | 9 + ...keyid_still_uses_symmetric_encryption.mdwn | 46 + ..._2f4ec4b7b92a0f0a0c4c0758da4a05a5._comment | 13 + ..._7c0aeae6b1b2b0338735b0231c5db7d4._comment | 16 + doc/bugs/encryption_key_is_surprising.mdwn | 24 + ..._5b172830ac31d51a1687bc8b1db489f9._comment | 10 + ..._5b7e6bb36c3333dfd71808e8b4544746._comment | 8 + ..._8ec86b8c35bce15337a143e275961cd5._comment | 8 + ..._c5e49b3a0eceabe6d14f5226d7ba4c7a._comment | 8 + ..._cd7cbf0c0ee9cafec344dfbf1acd9590._comment | 8 + ..._01381524114d885961704acc3f172536._comment | 8 + ..._c1eb59e1c5f583dcef7cea17623a2435._comment | 8 + ...ding_git-annex_3.20120624_using_cabal.mdwn | 159 + ...rror_on_only_repository_copy_deletion.mdwn | 16 + ..._af394ac0956ab33a77256bcb02ef2a0f._comment | 14 + doc/bugs/error_propigation.mdwn | 3 + ...epositories_with_non-ASCII_characters.mdwn | 62 + ..._38cc2d2ed907649df085de8ad83cb9dd._comment | 14 + ...or_with_file_names_starting_with_dash.mdwn | 15 + ...eous_shell_escaping_for_rsync_remotes.mdwn | 15 + doc/bugs/fails_to_handle_lot_of_files.mdwn | 445 + ..._09d8e4e66d8273fab611bd29e82dc7fc._comment | 8 + ..._fd2ec05f4b5a7a6ae6bd9f5dbc3156de._comment | 8 + ...hould__34___exist_in_remote_is_silent.mdwn | 37 + ..._c686df2824d3f588c0bfb339c99168b7._comment | 29 + ..._22edfac4ce25cd9f4e4c85e0a8a52bc1._comment | 14 + ..._74fc0e41a6bd5c4d8c4b2f15e5ed8d2f._comment | 17 + ..._7d642fc65040a7b583cdece33db01826._comment | 8 + ..._49be366b6af6db595fa538373a61e650._comment | 10 + ...ure_to_return_to_indirect_mode_on_usb.mdwn | 19 + ..._d7822b90c68bf845572b0a04a378d0bb._comment | 10 + doc/bugs/fat_support.mdwn | 13 + ..._04bcc4795d431e8cb32293aab29bbfe2._comment | 12 + ..._bb4a97ebadb5c53809fc78431eabd7c8._comment | 14 + ..._df3b943bc1081a8f3f7434ae0c8e061e._comment | 11 + ..._90a8a15bedd94480945a374f9d706b86._comment | 10 + ..._64bbf89de0836673224b83fdefa0407b._comment | 8 + ..._a3b6000330c9c376611c228d746a1d55._comment | 8 + ..._a0ac7f2c44efc8116940c7b94b35e9d0._comment | 7 + ..._acc947643a635eb10a1bff92083a3506._comment | 10 + doc/bugs/fatal:_empty_ident_name.mdwn | 51 + ..._ceae87308fb75a1f79c7c8d63ec47226._comment | 8 + ..._68832ee3e0e7244ce62bccabe2e52630._comment | 25 + ..._ed31ad316747343d7730e4c2d7dacd24._comment | 10 + ..._b812d6f30e8a866bce7260a9ee3218e3._comment | 13 + ..._Invalid_argument___40__Windows__41__.mdwn | 63 + ..._e6f39b2ef55b0daa491f4b6329a906bc._comment | 8 + ..._b47d6d188f38a8e4ca5ef5f70afadf6a._comment | 48 + ..._b533b1de535a057b7ebf99afc92691ed._comment | 13 + ..._47__locking_issues_with_the_assitant.mdwn | 54 + ..._fadf06f5ab34e36ab130536ec55afc8e._comment | 12 + ..._4a337f7b1140c45e5dd660b40202f696._comment | 10 + ..._05e1398e78218ced9c2da6a2510949e8._comment | 21 + ..._9226f0adf091154c0d8a08b340b71869._comment | 8 + ..._44d3e2096b7d45a1062222bee83a346d._comment | 8 + ..._f2e1d188b7b2d2daf0d832c59a68583e._comment | 8 + ..._998fe58994ecf855310e4b8e6cce9e18._comment | 8 + ..._4ce243cb0ea8ff810a4949a5320e4afc._comment | 13 + ..._c713f6316d889c8fc52326f21375c1c4._comment | 8 + ..._6dd23bab7983b8b1f938dd4f21a16f5a._comment | 8 + ..._961c8f968eff0b39a85b607ee3f7630d._comment | 16 + doc/bugs/file_modification_times.mdwn | 13 + ...relates_to_the_new_inotify_flag__41__.mdwn | 36 + doc/bugs/free_space_checking.mdwn | 21 + ..._a868e805be43c5a7c19c41f1af8e41e6._comment | 10 + ..._8a65f6d3dcf5baa3f7f2dbe1346e2615._comment | 8 + ..._0fc6ff79a357b1619d13018ccacc7c10._comment | 8 + ...ix_the_permissions_of_.git__47__annex.mdwn | 8 + ...n_less_copies_than_required_are_found.mdwn | 57 + doc/bugs/fsck_output.mdwn | 46 + ...uble-check_when_a_content-check_fails.mdwn | 3 + ..._03af24b70adbcd9f4b94d009f6b71d0a._comment | 13 + ..._41214a7d18c66b694645248d6ebeadbf._comment | 25 + ..._e7ddd77ea35994f2051f840e9b4c7e0c._comment | 11 + ..._36a70d5a378983a76fcdbb7fba044044._comment | 32 + ..._899c4afbc988d81984c5c3397285bb01._comment | 12 + ..._dbff51d00c5645eb1832aa4644889c5e._comment | 10 + ...ile_content_is_bad_when_it_isn__39__t.mdwn | 35 + ..._cafb58eca97a0a66110ac39b169d8de3._comment | 8 + ...emote_pushes_git-annex_but_not_master.mdwn | 19 + ..._failed__44___but_remote_has_the_file.mdwn | 40 + ..._55c8b73ce05dfca11a393bb296b99b9a._comment | 10 + ..._474c67a421dca4c245e7bfe495d3f6d3._comment | 18 + ..._845e8a23d63fb0b071c63ee736697d26._comment | 20 + ..._7dec21cb67e7f4dbdb49da97f2443e8f._comment | 35 + ...47___web_remotes_if_the_file_is_empty.mdwn | 26 + ...t_from_bup-remote_with_pubkey_failing.mdwn | 93 + ...-shell:_gcryptsetup_permission_denied.mdwn | 48 + ..._f4584158b35b80ece1060308883e2dc4._comment | 8 + ..._a4d7aae848340771a9b8e2c87abeea42._comment | 26 + ..._06bda101ad584b4b882de8b2e202d679._comment | 8 + ..._4fc6b25401b645cabc04b510bdfa6863._comment | 10 + ..._4e193306801680bba433e75eb4dcba05._comment | 12 + ..._76ccdf0542e76e4dbd61f3b3228d40ba._comment | 10 + ..._cd964d0a375c5cba299bf2bbbbb86acb._comment | 12 + ..._9bac87c85deb5bb15795df28533d0cde._comment | 10 + ...tic__41__:_strange_closure_type_30799.mdwn | 75 + ..._1c19e716069911f17bbebd196d9e4b61._comment | 10 + ..._a4d66f29d257044e548313e014ca3dc3._comment | 66 + ..._f5f1081eb18143383b2fb1f57d8640f5._comment | 38 + ..._b1f818b85c3540591c48e7ba8560d070._comment | 10 + ..._67406dd8d9bd4944202353508468c907._comment | 13 + ...nrecognized_option___96__--uuid__39__.mdwn | 53 + ..._13510e954e36484e196e7395a3a9bf1f._comment | 10 + ..._7edc478a76983a3b3c68d01f24dce613._comment | 9 + ..._t_honour_Rsync__39__s_bwlimit_option.mdwn | 37 + ..._8cda861c11ef2fff3442e5a0df741939._comment | 12 + ..._15e06f6db9a14a8217dea25e24ddc23a._comment | 12 + ..._d36045e2b466882108c5bf09580755fa._comment | 8 + .../git-annex:_Argument_list_too_long.mdwn | 40 + ..._3f83ea525436b2379ab29a0f860c4669._comment | 8 + ..._b417c94169378ef7d0d278ebae517fa1._comment | 8 + ..._fa925cca216cb810ad80482b19fc6053._comment | 8 + ..._8bd2996107b2d272c32810658e07e715._comment | 8 + ..._378de7d7503a64611eab62f2f5cffef3._comment | 15 + ..._a94e17151348d02999442dd1219babfb._comment | 10 + ...not_decode_byte___39____92__xfc__39__.mdwn | 34 + ..._f1a7352b04f395e06e0094c1f51b6fff._comment | 12 + ..._c1890067079cd99667f31cbb4d2e4545._comment | 8 + ..._213c96085c60c8e52cd803df07240158._comment | 13 + .../git-annex:_Not_in_a_git_repository._.mdwn | 22 + ..._e10363a912953a646b87c824d1c6e5d4._comment | 10 + ..._9e96063a664b2be8a36d7940e7632d3f._comment | 8 + ..._8c9bd76b0e1200723ec13fbef943a2cc._comment | 10 + ..._8c49979b8a815f0d6f9de39ee9a88730._comment | 8 + ...urce_vanished___40__Broken_pipe__41__.mdwn | 14 + ..._e962317a939bf76097ae1a3b53b146e6._comment | 14 + ..._b32472b4c9b61e7a33dca802ecafb05b._comment | 11 + ..._fcfea3216831df9afbd855fbd842c27e._comment | 20 + ..._30d0b40efa59eeecb8a4be6d1baa1520._comment | 10 + ..._4af107f3184bc2abd2c9693167018628._comment | 8 + ..._f96027f1e3c405809fae42ce8533c6d1._comment | 8 + ..._b6fe89deb468a7e4f63f7faab147e3fb._comment | 12 + ..._ebec5d9266604f03959dc16d933ff4a4._comment | 13 + ...t-annex:_fd:14:_hGetLine:_end_of_file.mdwn | 51 + ..._36756f5d9d591cc52113c5cc0c1eae91._comment | 8 + ...ntryForID:_failed___40__Success__41__.mdwn | 13 + ..._11a1615962325327466895d03e3d2379._comment | 8 + ..._eac51c3299e9fc04025675360969d537._comment | 8 + ..._c23dc02c7487d63b0905f1b7f3ca59f5._comment | 9 + ..._0e8b28de5c173bc60ecc0126fb2209ca._comment | 10 + doc/bugs/git-annex:_status:_1_failed.mdwn | 25 + ..._7cd9de88e55633fc75460f4fe0400f09._comment | 8 + ..._504a944aab34155046f2fd82c2878f3e._comment | 18 + ..._c235cc83c75474e6393e08d2d94b119d._comment | 10 + ..._932f6aaa712298a47868002872e16310._comment | 10 + ..._4bf55320439de152a65e2f21d4a0604b._comment | 14 + ..._cb2cfb798c6171f77eb7c4c4061c0f0c._comment | 8 + ..._05c84dde377298adfd3fc20749b3108f._comment | 10 + ..._bb5141e29c665bc0bb82611ea27d4be8._comment | 11 + ..._5fd39168c9e1bf43909ee0ab3c75c40c._comment | 35 + ..._e493f6bddb0bfcd9478d5f4d9fc170e0._comment | 8 + ..._573377d444aee0895b231082bc6839a4._comment | 8 + ...t-annex_3.20130216.1_tests_are_broken.mdwn | 43 + ...les_with___39__:__39___in_their_names.mdwn | 38 + ...it-annex_add_should_repack_as_it_goes.mdwn | 32 + ..._dbcaa0be4cd764128fb7263a95f73a32._comment | 22 + ..._6a27551c4fb7f62ed9f627134c755d01._comment | 14 + ..._ff8b589fbcf25c98abd1c58830074650._comment | 8 + doc/bugs/git-annex_branch_corruption.mdwn | 95 + doc/bugs/git-annex_branch_push_race.mdwn | 45 + doc/bugs/git-annex_broken_on_Android_4.3.mdwn | 7 + ..._e47c073f1614f7b57f86acedeeb1cadc._comment | 8 + ..._ce34578c45060b7c8b759efd1c1d8df8._comment | 13 + ..._75965395dc33046ce34ac5ba972b7d64._comment | 8 + ..._f07bc76dd3c5580fc0855a33ae835c8d._comment | 12 + ..._637c59becc68a1e4f60069d8873489ff._comment | 8 + ..._d80b87055f72873f5678a01d2630bea4._comment | 10 + ..._57ac84868b223b30f005704eefa01b8d._comment | 8 + ..._a41f4d8a72c07ad770e6479e9b8c7f1d._comment | 8 + ..._7d36637f11cda51de395303d5c1c6a3f._comment | 8 + ..._c8609c3f7f62ae5427fd8c60bc9546ed._comment | 8 + ..._0ffb3833ce2c2e0320468dc9a09866d7._comment | 10 + ..._0886bca6d0c6a9415a7794d256be2e9d._comment | 14 + ..._2b39729f95c9c4bba620ecdd3d1558ed._comment | 8 + ..._8d90d92951919aa70638b31e9248bec5._comment | 16 + ..._6398271f5cd9e94996202ef3bce6f6ed._comment | 20 + ..._c9e399833cc6235077161f490dfa866f._comment | 8 + ..._cf093737eefb2b99f6f0eac9bf3e74b3._comment | 9 + ..._c122ce53175fc9e0e114a8acd2385c0d._comment | 29 + ..._237e41e61781bb058f5fd39362a904e4._comment | 10 + ..._97f423a41ee9d2d74291594fae20dd4e._comment | 10 + ..._7b3fbe7e38f637fcea511441ac243d93._comment | 10 + ..._53e2d095b2501844cadec910de286814._comment | 14 + ..._26c04584c3c6dacf59e1b6c82042c97c._comment | 8 + ..._ddc9cbae1a721400a9acf2153e18f4f0._comment | 8 + ..._593235735e32238094121b1f79355bbd._comment | 8 + ..._f806fd5930e90920db24456297465bae._comment | 9 + ..._5741b6a5997328fdcd5cc99f841b18d3._comment | 8 + ..._3e0d9949dd810069af0b8076807e5924._comment | 8 + ..._f58897eff6b4693f0c73474ccfe6e733._comment | 8 + ..._ddba87b2f20d8a63f7b8ebdb9bd13515._comment | 18 + ...ositories_with_a_partial_set_of_files.mdwn | 29 + ...nex_directory_hashing_problems_on_osx.mdwn | 100 + ..._f3594de3ba2ab17771a4b116031511bb._comment | 8 + ..._97de7252bf5d2a4f1381f4b2b4e24ef8._comment | 13 + ..._f1c53c3058a587185e7a78d84987539d._comment | 8 + ..._4f56aea35effe5c10ef37d7ad7adb48c._comment | 8 + ..._cc2a53c31332fe4b828ef1e72c2a4d49._comment | 10 + ..._37f1d669c1fa53ee371f781c7bb820ae._comment | 17 + ..._8a4ab1af59098f4950726cf53636c2b3._comment | 22 + ..._515d5c5fbf5bd0c188a4f1e936d913e2._comment | 9 + ..._db64c91dd1322a0ab168190686db494f._comment | 14 + ..._ff555c271637af065203ca99c9eeaf89._comment | 8 + ..._9a7b09de132097100c1a68ea7b846727._comment | 8 + ..._7e328b970169fffb8bce373d1522743b._comment | 19 + ..._98f632652b0db9131b0173d3572f4d62._comment | 10 + ..._52d41afd7fd0b71a4c8e84ab1b4df5bd._comment | 8 + ..._c2cd8a69c37539c0511bae02016180ca._comment | 8 + ..._174952fc3e3be12912e5fcfe78f2dd13._comment | 185 + ..._a18ada7ac74c63be5753fdb2fe68dae5._comment | 18 + ..._039e945617a6c1852c96974a402db29c._comment | 8 + ..._eacd0b18475c05ab9feed8cf7290b79a._comment | 37 + ..._e55117cb628dc532e468519252571474._comment | 14 + ..._0f4f471102e394ebb01da40e4d0fd9f6._comment | 68 + ..._68e2d6ccdb9622b879e4bc7005804623._comment | 12 + ..._45b11ddd200261115b653c7a14d28aa9._comment | 8 + ...stall_on_windows_without_admin_rights.mdwn | 19 + ..._2533800ab5a95c5d71c3b47a630e751a._comment | 10 + ..._5b71785acf16a8d9ea457726599daef3._comment | 8 + ...iles_containing_ISO8859-15_characters.mdwn | 48 + ..._b84e831298c03b12471fb75da597e365._comment | 8 + .../git-annex_dropunused_has_no_effect.mdwn | 12 + ..._66b581eb7111a9e98c6406ec75b899cf._comment | 12 + ..._11c46cd2087511c3d22b7ce7c149b3e9._comment | 16 + ..._b1c3d8c6ec4b20727aaa9c4b746531b0._comment | 10 + ..._f05a9a3760858c5ee5c98dd8ab059c28._comment | 8 + ...t-annex_fix_not_noticing_file_renames.mdwn | 36 + ..._4edd95200d59ec5a5426167b8da8e3f9._comment | 24 + ..._a9a44debefb3bdd4b8ed2d1cf53f2338._comment | 8 + ..._0efb11f35b872b75a3fbc4ebb71ac827._comment | 10 + ...nex_get:_requested_key_is_not_present.mdwn | 41 + ..._d4baa6607a61d0e6a7cea1325a5ddf95._comment | 26 + ..._b49725488c3db5e00ede7b65ed9d62fa._comment | 110 + ..._c17a7138579b93c6f14e3444c11664ac._comment | 8 + ..._of_my_files___36____35____38____33__.mdwn | 58 + ..._5dd4d1cec069c13184f5dd9efca6721b._comment | 8 + ..._d9b65fe4cb4bfd58f37e7da5350c6401._comment | 14 + ..._1027187b203addd65af8cf1faf28727d._comment | 10 + ..._ac65028203ff0cbdb978200235fb4e9c._comment | 10 + ..._git_when_staging__47__commiting_logs.mdwn | 34 + ...nex_immediately_re-gets_dropped_files.mdwn | 27 + ..._09e616a4866e726a48be4febe6375cc8._comment | 8 + ...ncorrectly_parses_bare_IPv6_addresses.mdwn | 59 + ...rsync_remotes_with_encryption_enabled.mdwn | 103 + doc/bugs/git-annex_merge_stalls.mdwn | 16 + ..._31578a754945bdcb902c62ff58704bcb._comment | 17 + ..._f3b6bf180466b5931bfd20b2f0229422._comment | 10 + ..._ced9b0d724fb55c756106b64c3721003._comment | 18 + ...esystem_can_still_failed_due_to_case_.mdwn | 32 + ..._850695231926dfe94f11342d3af7f63c._comment | 54 + ..._c2a2f801a3e18ad597ff0acf2f104557._comment | 22 + doc/bugs/git-annex_opens_too_many_files.mdwn | 40 + ..._37f6f5838c41c533df4be1f927b9b03d._comment | 26 + ..._347ef233b9845b84d7c4d49ed166e797._comment | 10 + ..._d5f644d97cd2db471deb5dcd728cae60._comment | 8 + ..._c03bde64be8fdd962826bc7afa07d2a9._comment | 137 + ..._33a2e783e5355e981497b9861997570b._comment | 18 + ..._b3a5a4e4ca29c5cd2840bfeb4c63ea68._comment | 15 + ..._quit_unexpectedly___40__macosx__41__.mdwn | 358 + ..._97abb8442329d19c9687002f43afac74._comment | 23 + ..._3405f3cd699860ee239cf23ade19e92c._comment | 10 + ...nnex_sync_broken_on_squeeze_backports.mdwn | 20 + ..._the_directory_I__39__m_in_disepeared.mdwn | 15 + ...iles_are_in_repositories_they_are_not.mdwn | 29 + ..._6722fd627ec4add9f2b16546bd8ef341._comment | 8 + ..._508e475f764e1cb453b756eb50bc3a15._comment | 34 + ..._1656ba18c519a262c57ef626a3449e77._comment | 12 + ..._347dc3b6e5bc6c4195ec09d54bc1398e._comment | 24 + ..._a9c93bfc3278ef8b1117eac2af859bc3._comment | 12 + ..._804dd62beef64f7d4e203bdb28cbe660._comment | 11 + ..._4ef107d70647780eb5347cae6f467fed._comment | 12 + .../git-annex_webapp_command_not_found.mdwn | 25 + ..._6fa63ae1a7affb2351eda57ab3b4eda1._comment | 10 + ..._d25232bb5eaff725281869d7681e81ad._comment | 8 + doc/bugs/git_annex_add_..._adds_too_much.mdwn | 25 + ..._eats_files_when_filename_is_too_long.mdwn | 14 + ..._9650284913bec2a00cf551b90ab5d8ff._comment | 21 + ..._c6c8d2a1f444d85c582bc5396b08e148._comment | 8 + ..._5776864d78d56849001dd12e3adb9cbe._comment | 8 + ..._371ec7b4ae73280ede31edfe90b42a95._comment | 9 + ..._4fb04f646de591640f8504c0caf61acd._comment | 12 + ..._b4055409fe48da95bb3101c0242ef0bc._comment | 8 + ...nex_add_error_with_Andrew_File_System.mdwn | 28 + ..._bc783e551fc0e8da87bc95bff5b8f73a._comment | 8 + ..._faefcf69bd61c47566131cb31b78cc19._comment | 10 + ..._d5014c8b78437b9fddbb1e83d3679081._comment | 10 + doc/bugs/git_annex_add_memory_leak.mdwn | 39 + ...ex_add_removes_file_with_no_data_left.mdwn | 103 + ..._9cc749a6efd4359a99316036f5bc867f._comment | 12 + ..._1fed5be9db29866e4dc3d3bb12907bf3._comment | 8 + ..._06d517ac4ef8def4629a40d7c3549bac._comment | 8 + ..._8f081aeba7065d143a453dc128543f59._comment | 18 + ..._54a4b10723fd8a80dd486377ff15ce0d._comment | 10 + ..._f1964e4e07991a251c2795da0361a4e2._comment | 28 + ..._73c38d843c30f00f6fd8883db8e55f62._comment | 10 + ..._7ede5ee312f3abdf78979c0d52a7871a._comment | 12 + ..._e37cf18708f09619442c3a9532d12ed9._comment | 13 + ..._a744ef7dd3a224a911ebb24858bc2fd6._comment | 8 + ..._f97141b255073b90120895148220c2d7._comment | 10 + ..._dd2be11dfd190129d491f5f891e7cd1a._comment | 10 + ...it_annex_assistant_--autostart_failed.mdwn | 39 + ..._746545273b53849c42ff6272324e5155._comment | 10 + ..._5bdf6f94da12e551ae12e7f550a84d62._comment | 8 + ..._bfd646f69946a5fe926b270cf94f87cb._comment | 8 + ...annex_content_fails_with_a_parse_error.txt | 32 + ..._2b60b6ae0115de13ecf837b34dadcd1d._comment | 8 + ...annex_copy_--fast_does_not_copy_files.mdwn | 22 + ...EMOTE_._doesn__39__t_work_as_expected.mdwn | 18 + ...ying_to_connect_to_remotes_uninvolved.mdwn | 27 + ..._f1330935a07460c9c8bc82ee8d4709c5._comment | 12 + ...40__notably_including_dead_ones__41__.mdwn | 42 + ..._7ee08a60e4b2516c010d3c2163049681._comment | 15 + ..._c29525bfda08717f68aaac83014e6b08._comment | 8 + ...git_annex_describe_can_break_uuid.log.mdwn | 46 + ..._9ead36f13cbde6c822b231441de636ae._comment | 8 + doc/bugs/git_annex_does_nothing_useful.mdwn | 67 + ..._457354dc0018333002dc5049935c0feb._comment | 8 + ..._8a6d244165dd238ddf9dd629795de2f6._comment | 10 + ..._30d06bc0f1c37d988a1a31962b57533c._comment | 18 + ..._fc4f51ddcbc69631e2835b86c3489c8e._comment | 7 + ..._9bb1647e6c59f1ed7b13b81ecc33f920._comment | 13 + ..._d434f5c614a27b75d73530b5b918b851._comment | 14 + ..._998e33219d29ea41b0b2a5d2955a9862._comment | 46 + ..._c72e2571e5b8c06bbfa2276a7ad1e8a6._comment | 16 + ..._bc8b42432ba25de8f972c192bc3cdff6._comment | 44 + ..._e7469a4c5e45078ade775f5cbdd17cfc._comment | 67 + ..._bc9e6fd284440a59ffe4e4ed1f73f7d7._comment | 30 + ..._38a2dbeee3750d79ca9a943a02fceb29._comment | 17 + ...ex_doesn__39__t_work_in_Max_OS_X_10.9.mdwn | 220 + ..._141819a6b67de2602673698f6f148106._comment | 13 + ..._8be96359fd2bd33ed2961e499dc2685e._comment | 12 + ..._26950a37e86d4dd83dd59fb2564d0a2e._comment | 11 + ..._cbf8150dbe0da64bde7f6af8e041eda8._comment | 8 + ..._0c203f90d911cf6869894dae89575a49._comment | 13 + ..._68cbb7268bdad73357da2d11e05d73c4._comment | 8 + ..._816d552f871a1b06306f04d575adb2e5._comment | 8 + ..._7905b097a9c582452fb04cdc88ed4285._comment | 14 + ..._bd5ac9bb2eaab66af6aa13b39172b49d._comment | 9 + ..._9881db7bb6fef4e47c54cdc23e995f17._comment | 13 + ..._4fb9d3de245dddab65fb1a53a67a095c._comment | 8 + ..._41e2ea458669f59f96b5860825745910._comment | 8 + ..._515039e321e0595f95430d8082bd54a5._comment | 20 + ..._9412236296871c570c66f5b4c7f9681e._comment | 10 + ..._e4e7d13be6c0bc63f426e535de6172f8._comment | 8 + ..._c73e1277c5f284b1019362fb2bef94a8._comment | 8 + ..._f513259a2641e00b049203014ab940c8._comment | 12 + ..._54ee7b90467fee8b0457e9c447747500._comment | 10 + ..._7e6223c2dae3346e17276c7bbb01d53e._comment | 12 + ..._13b6e595d595da7f036e81258a65541e._comment | 8 + ..._94144c0cbdbccc72c13e12daf7657a29._comment | 8 + ..._9eb064ffdc3fdb70e85572185e151a3f._comment | 8 + ..._cde756e8a9b18fe2ca9cda25967bc7fb._comment | 10 + ..._1fd6a4374a334bc03914c3e0df95ef95._comment | 10 + .../git_annex_fork_bombs_on_gpg_file.mdwn | 25 + ..._6e29b60cd77f3288e33ad270f95f410e._comment | 8 + ..._ad13e3221ae06086e86800316912d951._comment | 12 + ..._41746b731eae7f280bb668c776022bcb._comment | 8 + ..._56ca8590110abffeed6d826c54ca1136._comment | 10 + ..._73ae438a37e4c5f56fe291448e1c64dd._comment | 13 + ..._aa237adebe7674b8cdb9a967bb5f96a8._comment | 8 + ..._ab403d7abbbbabd498b954b0b9742755._comment | 12 + ..._a35d04440b1220faf9088107c3f17762._comment | 10 + ..._8345331b9b313769ba401da2ffd89332._comment | 10 + ..._7eb535ca38b3e84d44d0f8cbf5e61b8b._comment | 18 + ..._a3aa4231a82917c56cbdf52b65db7133._comment | 21 + ..._178fd4e4d6abbca192fcd6d592615fca._comment | 12 + ..._7d80f131f43312bb061df2be7fa956ef._comment | 10 + ...n_direct_mode_does_not_checksum_files.mdwn | 18 + ..._a6cde4aa495512344fa7f50e10749c68._comment | 8 + ..._4ac3b87ec0bc0514c4eff9f5a75b9f5d._comment | 26 + ..._d18b1fdc866edf2786d2c6b7ec55119f._comment | 11 + ..._31e4fcbf63c11cc374a849daf3ce1dbc._comment | 8 + ...t_annex_fsck_is_a_no-op_in_bare_repos.mdwn | 21 + ..._fc59fbd1cdf8ca97b0a4471d9914aaa1._comment | 8 + ..._273a45e6977d40d39e0d9ab924a83240._comment | 9 + ...when_remote_is_an_ssh_url_with_a_port.mdwn | 13 + ...bout_remotes_with_dots_in_their_names.mdwn | 34 + ...estroys_a_fellow_git_annex_repository.mdwn | 130 + doc/bugs/git_annex_importfeed_fails.mdwn | 64 + ...ex_indirect_can_fail_catastrophically.mdwn | 78 + ..._0b085e7e8c8e364f479574bc00c7c394._comment | 21 + ...needs_some___34__error_checking__34__.mdwn | 65 + ...git_annex_initremote_walks_.git-annex.mdwn | 19 + ...problems_with_urls_containing___126__.mdwn | 46 + ...te_leaves_old_backend_versions_around.mdwn | 19 + ..._f3e418144e5a5a9b3eda459546fc2bb0._comment | 8 + ...use___39__git_add_-f__39___internally.mdwn | 11 + ..._7683bf02cf9e97830fb4690314501568._comment | 8 + ...ect_mode_does_not_honor_skip-worktree.mdwn | 35 + ..._69baeb997086c885f34fd1dc385cf5d6._comment | 12 + ..._fb8c0bebb9aaa75ee7eaf6999b1db49e._comment | 10 + ..._6bfd4e9a7853af93e72b717249de9439._comment | 8 + ...uninit_loses_content_when_interrupted.mdwn | 33 + ..._fd9d2abbc90fb4f470b2212bc1f4a2dd._comment | 8 + ..._0e99f6ef4f8b342ef0ebc64dbf8e2ce6._comment | 12 + ...s_files_not_previously_added_to_annex.mdwn | 32 + ..._ce4e3b1bf0d53119d049cf7dd621c5c4._comment | 10 + ..._3aa125635609fce41ab0c98cefb81f98._comment | 9 + doc/bugs/git_annex_unlock_is_not_atomic.mdwn | 7 + ...rts_due_to_filename_encoding_problems.mdwn | 15 + ..._8ba4fdb9f2d3bd44db5e910526cb9124._comment | 8 + ..._2a4a2b3e287a0444a1c8e8d98768a206._comment | 8 + ..._dacfdb8322045fc4ceefc9128bf7c505._comment | 17 + ..._7889a3ff5ce80c6322448aa674df8525._comment | 10 + ..._6d28c2537ce24eeb3496ca349823defd._comment | 19 + ..._4bf14ecef622988e80976c0fb55c24b9._comment | 10 + ..._d2e5382fe0f38fb9dd9ee69901c68151._comment | 8 + ..._b282757537cda863d3dc6d0bbfd6b656._comment | 8 + ..._branches_which_makes_it_inconsistent.mdwn | 106 + ..._a636ffe55b11c46a0afcc0b9a3a88cd4._comment | 10 + ..._5e1ad57420efd16ae09c9e5cad55b5f2._comment | 13 + ...nex_unused_failes_on_empty_repository.mdwn | 15 + ...nused_seems_to_check_for_current_path.mdwn | 39 + ...acter___40__and_probably_others__41__.mdwn | 33 + ..._861506e40e0d04d2be98bbfe9188be89._comment | 12 + ...ade_output_is_inconsistent_and_spammy.mdwn | 15 + ..._3a01c81efba321b0e46d1bc0426ad8d1._comment | 10 + ...rsion_should_without_being_in_a_repo_.mdwn | 7 + ..._e7b26eeb1a765fd83280ef907c0deef2._comment | 8 + ...app_--listen_on_a_remote_linux_server.mdwn | 50 + ..._db99c00830d3f15ebe790c4dc8b60bd7._comment | 8 + doc/bugs/git_annex_webapp_runs_on_wine.mdwn | 47 + ..._c71dfa42780c0fc78f88ce054e5f3ee3._comment | 16 + ..._f28441b18b0be90c1e58348455ce09d9._comment | 23 + ...won__39__t_copy_files_to_my_usb_drive.mdwn | 60 + ..._7707017fbf3d92ee21d600fe0aefce4f._comment | 10 + ..._f3392ec3ca7392823cbad2cc9b77f54e._comment | 9 + ..._b3d016a487b12748fe2c4d14300eb158._comment | 20 + ..._61f600511a3172f0707e5809fc444d0c._comment | 9 + ..._8cf029ac7bf3c19dcb0b613eed3b52ac._comment | 10 + ..._e40d88eba7d8aec1530ce1d32d1c85f2._comment | 11 + ..._b101fab9e690d1b335a1a29abab68d6c._comment | 10 + ..._b30d32086314a7e357f3dd6608828ee5._comment | 9 + ...nix_breaks_git_commit_after_uninstall.mdwn | 42 + ..._c8b1bab40d3bb2468a5bba7b116e854e._comment | 8 + ..._4173770375fca51dcaf9b974296d041a._comment | 8 + ...nd_has_tons_of_redundant_-a_paramters.mdwn | 15 + ...0__child_of_git-annex_assistant__41__.mdwn | 34 + ..._5e3f4b63db5cd32b63fb3e6a78f9b093._comment | 10 + .../git_rename_detection_on_file_move.mdwn | 13 + ..._5ec2f965c80cc5dd31ee3c4edb695664._comment | 8 + ..._0531dcfa833b0321a7009526efe3df33._comment | 26 + ..._7101d07400ad5935f880dc00d89bf90e._comment | 27 + ..._57010bcaca42089b451ad8659a1e018e._comment | 8 + ..._79d96599f757757f34d7b784e6c0e81c._comment | 34 + ..._d61f5693d947b9736b29fca1dbc7ad76._comment | 12 + ..._f63de6fe2f7189c8c2908cc41c4bc963._comment | 19 + ..._7f20d0b2f6ed1c34021a135438037306._comment | 10 + ..._6a00500b24ba53248c78e1ffc8d1a591._comment | 21 + ..._75e0973f6d573df615e01005ebcea87d._comment | 9 + ...in_prebuilt_linux_tarball_is_outdated.mdwn | 11 + ..._2a5a07498df9d38531d4570f7b463b9a._comment | 8 + ...for_DCIM_on_Android_misses_some_files.mdwn | 17 + ..._f683ecf93e5a17c5c9c06225dbcce2a9._comment | 12 + doc/bugs/gix-annex_help_is_homicidal.mdwn | 23 + doc/bugs/glacier_from_multiple_repos.mdwn | 14 + doc/bugs/googlemail.mdwn | 16 + .../gpg_bundled_with_OSX_build_fails.mdwn | 25 + ..._ec911f920db6c354ba998ffbb5886606._comment | 10 + ..._bf2a3ab1bbe258bd501ec4b776882adf._comment | 12 + ..._c0142427400323c00bd8294415ae32c5._comment | 15 + ..._b56db4b5afc276f88a2b980e22fda8a0._comment | 10 + ..._a4eda81e5f927c463593bc48fbe84077._comment | 12 + ..._2f0b9331d16a208883bac586258a7b50._comment | 8 + ..._c05c484a6134f93796cff08de0f63e80._comment | 16 + ..._f2cb5467ebe80cf67e1155b771b73978._comment | 8 + ..._27bbda7e31f55b29e1473555ee17e613._comment | 8 + doc/bugs/gpg_error_on_android.mdwn | 39 + ..._870583fd1b7a33b688b9a228077d1333._comment | 629 ++ ..._9ce5511a109bde50d8cf87bad0268b4a._comment | 26 + ..._b345e80f38d38f82cfcfce3102138fb8._comment | 46 + ..._032f42235b7f26854e725041ca33384b._comment | 10 + ...a_new_remote_repository_via_assistant.mdwn | 55 + ..._7b409701c650b55b3472accd70555f16._comment | 8 + ..._40b00f7258512677516ec5036b89090f._comment | 14 + ...es_to_100__37___cpu_on_bad_input_data.mdwn | 18 + ..._889218fb7c0115b03d9bad0c07296097._comment | 36 + .../gpg_hangs_on_glacier_remote_creation.mdwn | 78 + ..._41ca74a4e4aaf4f6b012a92677037651._comment | 14 + ..._dd11fd25c8bb1f2d7e1292c07abf553e._comment | 591 ++ ..._543d8a13756c1355a5752867bdcbefd3._comment | 20 + ..._6441cf25e6bd62c96d7e766da9bdd7fb._comment | 25 + ..._72e152294e36bc5f2d78e8e2ebed6a23._comment | 8 + ..._890e85df05903795e01efbd7879f9c87._comment | 8 + ..._042047f9fcc45abbfa47c3973d79f08e._comment | 10 + doc/bugs/gpg_needs_--use-agent.mdwn | 53 + doc/bugs/hGetContents:_user_error.mdwn | 38 + ..._30178f151f8c60d2ff856ca543dc506c._comment | 10 + ..._f74eeed4a007058a22183fd678ecd6c6._comment | 8 + ..._515e562228a89a13d6d857a874f4a468._comment | 8 + ..._8c6ed5e459c5c66b77db446c6317114c._comment | 8 + ..._f80bce48c3f96b0cd6892af43ee88a96._comment | 8 + ..._69dc09e4ae726856dafbeec34170671c._comment | 8 + ..._3f66b03f773341fad94ec16b4f55edaa._comment | 32 + ..._a697e2d36abfc999e65c9f587c0de56e._comment | 10 + ..._da7c5905a64bb6779970f9394155e629._comment | 10 + ...__40__or_this_a_general_problem__41__.mdwn | 113 + ..._rysnc_installed__44___not_recognized.mdwn | 19 + ..._3ff000eb3efde41426c7b086ae627dcf._comment | 12 + ..._34e592ab057df2df54e13d3f5cae64f0._comment | 14 + ..._05ffbae13d8f9b08315f40bb9b206f46._comment | 21 + ..._99d1f151263ca3433dd4afa8a928b1fe._comment | 30 + ..._6ef1a377b0b4d3efeffdf9693d0b496b._comment | 12 + ..._d9e36828ad55f3181a1c650010f23d6b._comment | 14 + doc/bugs/immediately_drops_files.mdwn | 222 + ..._9ef6e694ef8a8eee7a42f88554475db7._comment | 10 + ..._76e4f8b73ab60b2540dd2a3e5379791d._comment | 8 + ..._788db083f5ba2e5589c3b952203ec954._comment | 21 + ..._425b79865eb77d69d0b7a71a14639f81._comment | 10 + ..._7c9f660b6bcec31827a44a650e9d4622._comment | 10 + ...portfeed_fails__44___bad_feed_content.mdwn | 36 + ...he_option_--lazy_for_specific_podcast.mdwn | 77 + ..._4ccfabbaf75e139b32f6fa6f7bc6a7fe._comment | 8 + ..._should_allow_pubdate_in_the_template.mdwn | 5 + ...es___34____95__foo__34___as_extension.mdwn | 17 + doc/bugs/inconsistent_use_of_SI_prefixes.mdwn | 55 + ...ent___40__invalid_byte_sequence__41__.mdwn | 29 + ..._server_error:_unknown_UUID_on_webapp.mdwn | 147 + ...ver_error_creating_repo_on_ssh_server.mdwn | 26 + ..._4a2c9338d5c779496049d78e29cf5cbd._comment | 8 + ..._choosing_encrypted_rsync_repo_option.mdwn | 28 + ..._14a2f775f43a86129ce3649a06f8ba0b._comment | 8 + ..._7b277320fcffd8d03e0d3d31398eb571._comment | 16 + ..._ba9dd8f2cc46640383d4339a3661571f._comment | 16 + ..._274ae39d55545bde0be931d7a6c42c94._comment | 12 + ..._242291d46acc61bdfc112e3316de528b._comment | 10 + ..._76b936263e82ca6c415a16ed57e770b4._comment | 8 + ..._9ccd3749fd9f32b0906c0b9428cc514f._comment | 10 + ..._4e8982668b5044b2286d55c90adb9da3._comment | 8 + ..._aaf0ee250972d737a2ca57de5b5f1c0a._comment | 12 + ...nterrupting_migration_causes_problems.mdwn | 52 + .../javascript_functions_qouting_issue.mdwn | 44 + ...journal_commit_error_when_using_annex.mdwn | 21 + ..._38f60ca3503ea1530c4bd2cde5c9182f._comment | 10 + ..._6de455a67f37d9ee0a307a78123781bf._comment | 10 + ...ant_causes_resource_starvation_on_OSX.mdwn | 30 + ..._91c911c29fd126ddc365c561591f627e._comment | 10 + ..._c316aead931a6a2377a4515bbb34ac5b._comment | 8 + ..._committer_thread_loops_occassionally.mdwn | 53 + ..._f8d1720aa26c719609720acf0772606e._comment | 11 + ..._0527569ea2924721d19dadcf4fe0ec5a._comment | 8 + ..._5b67ff08a897ea3d2266ccc910ab4278._comment | 8 + doc/bugs/make_SHA512E_the_default.mdwn | 29 + ..._install_can__39__t_be_used_with_sudo.mdwn | 20 + ...l_doesn__39__t_create_git-annex-shell.mdwn | 62 + ..._8c20edd8c6483500f807528d616c6dfd._comment | 14 + ..._8b2cf0fe7219e0bc83fd326adbf26c8a._comment | 31 + ..._25fe06eb127e59a4a07aeb52a5cfeabe._comment | 8 + ..._ec78032ba62d6918baa2c0b07ead5b50._comment | 8 + ...making_annex-merge_try_a_fast-forward.mdwn | 35 + .../manpage_has_slight_indentation_error.mdwn | 38 + ...ot_respecting_annex_ssh_options__63__.mdwn | 38 + ..._c63a1ed5909d53f116f06e60aba74dc6._comment | 10 + ...e_causes_out_of_memory_on_large_repos.mdwn | 26 + ..._6d47485728ea65a9b555f8be7159dea5._comment | 10 + ..._06723d13ecdaf87de5ff2b209e3c5198._comment | 10 + ..._9f83ef190547b291a715cda55b7977d4._comment | 10 + ..._0e32ae0300472c56079cfbcd78a3e386._comment | 9 + ..._e8998716107e7ae8d0e8d332812517ad._comment | 14 + ..._seem_to_die_when_using_the_ARM_build.mdwn | 36 + ..._0527581ea60d28bb28504fa2a355ed87._comment | 10 + ..._926a87b60e20d286d49639c8dad13a1a._comment | 8 + ..._c509fba1a9adacfd26a2bd12b4aea988._comment | 8 + ...d_files_not_showing_up_in_unused_list.mdwn | 62 + ..._2cfbf6693b051c758fe5efa5ee885829._comment | 16 + ..._acb1abeb32c3aba8ba65151afbea753c._comment | 10 + ...or_bug:_errors_are_not_verbose_enough.mdwn | 26 + ...ng_dependency_in_git-annex-3.20130216.mdwn | 29 + .../missing_kde__47__gnome_menu_item..mdwn | 29 + doc/bugs/moreinfo.mdwn | 6 + ...is_not_in_Haskell_Platform_2012.4.0.0.mdwn | 12 + ..._2c4b3757bb8de563edca65aeabcbbc5a._comment | 29 + ...d_repo_results_in_errors_on_drop_move.mdwn | 59 + ...file_changed_to_annexed_on_typechange.mdwn | 40 + ..._6ac691645edb483797bee05043fd83b3._comment | 8 + ..._5d67e3a60b7cc30c2b1857f50895d363._comment | 8 + ..._78f1e081b92f418c20893d86a8715501._comment | 8 + ..._1e2a59e0eec89ef1a57d1488ff40dcf0._comment | 12 + ..._5e74431048b07631e0dbeca90fdb365b._comment | 47 + ..._3724e1c1a5fc6d3589452478249792ec._comment | 8 + ..._7f841ea7bf7d44f3d810ca097ac9eb47._comment | 8 + ..._c53ce2274388711ffbde1595b64f932b._comment | 10 + ...rd_output__41___from_git_annex_status.mdwn | 89 + ..._fcd230cbb2ac363c469b98021042c011._comment | 10 + ..._23207ecabd4b41d9551d0491fa71e96b._comment | 12 + ..._6ea92adfe955b6a5cd2a39fea78b3bf6._comment | 119 + ..._d0e55585f1612148163039d157253258._comment | 11 + ..._5506dc1b08516677886da4aa97263864._comment | 12 + ..._073449cc2cb73efd2b2d3d778a5573de._comment | 14 + ..._3516e71ba3b07427a10cbb4965712aa6._comment | 24 + ..._ea2e4704adb2f304f9c11c61eb62e919._comment | 8 + ..._4d17fedead7977541371a3f2c192e030._comment | 46 + ...o_have_annex_on_a_separate_filesystem.mdwn | 32 + ...ata_isn__39__t_unused_after_migration.mdwn | 66 + .../on--git-dir_and_--work-tree_options.mdwn | 31 + ..._13a7653d96ddf91f4492a9f3555a69aa._comment | 16 + ..._31f154011ec26a463de7b1e307e49cb6._comment | 8 + ..._33433bcfb1946b52f1f41b9158ab452d._comment | 8 + doc/bugs/ordering.mdwn | 12 + doc/bugs/pasting_into_annex_on_OSX.mdwn | 28 + ..._4eab52bb6eda92e39bdaa8eee8f31a7f._comment | 8 + ..._f1b58adfec179b75c1fc2bf578a3b5c4._comment | 8 + ..._270aa7680c3b899a92ce6543eaba666a._comment | 17 + ..._ec11a80d5b0f78c7a927f8aa71a6c57a._comment | 8 + ..._1928bd25e5e6874a3b83c2f2adc776f5._comment | 7 + ..._0fe288f54b781a0c51395cb32f0e2f9d._comment | 8 + doc/bugs/problem_commit_normal_links.mdwn | 59 + .../problem_with_upgrade_v2_-__62___v3.mdwn | 3 + ..._5f60006c9bb095167d817f234a14d20b._comment | 8 + ..._cd0123392b16d89db41b45464165c247._comment | 23 + ..._86d9e7244ae492bcbe62720b8c4fc4a9._comment | 16 + ..._91439d4dbbf1461e281b276eb0003691._comment | 8 + ..._ca33a9ca0df33f7c1b58353d7ffb943d._comment | 8 + ..._f360f0006bc9115bc5a3e2eb9fe58abd._comment | 10 + doc/bugs/problems_with_utf8_names.mdwn | 81 + ..._3c7e3f021c2c94277eecf9c8af6cec5f._comment | 17 + ..._bad4c4c5f54358d1bc0ab2adc713782a._comment | 10 + ..._4f936a5d3f9c7df64c8a87e62b7fbfdc._comment | 8 + ..._93bee35f5fa7744834994bc7a253a6f9._comment | 10 + ..._519cda534c7aea7f5ad5acd3f76e21fa._comment | 11 + ..._52e0bfff2b177b6f92e226b25d2f3ff1._comment | 8 + ..._0cc588f787d6eecfa19a8f6cee4b07b5._comment | 8 + ..._ff5c6da9eadfee20c18c86b648a62c47._comment | 10 + ...nishing_when_assistant_gets_restarted.mdwn | 34 + ..._53b4f388c47c1b3f6ffa4fc2155b30fc._comment | 21 + ..._e66532b23b089c9ea61122d6664cddb9._comment | 10 + ..._c9d692c867acc076f64f1213ea03ca11._comment | 8 + ...d___96__git_annex_sync__96___behavior.mdwn | 113 + ..._1a0b964f93c753838d6ccbdc8f79b39e._comment | 8 + ..._d22dcd7f95c5dc1c381c3c746781efce._comment | 8 + ..._a25140eb90f6b24c1a3ca39c901694e2._comment | 10 + ..._825e15183008ff7d97a81cacc3f55fb4._comment | 8 + ..._e858fc7c729cd39740354fb12627d556._comment | 10 + ..._9881b0f2dfb0907a60c0da296bc3da3f._comment | 10 + ..._ca017b9d3bafea4cb31448c802f3834e._comment | 8 + ...ve_file_in_place_on_checksum_mismatch.mdwn | 15 + ...heir_symlink_targets_don__39__t_exist.mdwn | 65 + ..._8a1d16b2aaba224e94be3d9dcc036d91._comment | 12 + ..._434ed328a22a6657dba3b2929a56e499._comment | 18 + ..._1837b70ace42882db3ab82e001680934._comment | 29 + ..._ca9c87a10f29e41572540edeb99652f2._comment | 11 + ..._69eafc4201e3014ef1b5d74fe319e462._comment | 10 + ..._b7a64db9abe006af8c30169ad849efe9._comment | 76 + ..._197ac6070f256131c6e18a07aa3834fa._comment | 14 + ..._fe07832333b536c71b7dcb46a4a44bd0._comment | 19 + ..._540bca4e6fdfc10eeab875ecc0f2b3f3._comment | 10 + ..._3f236b35e9820cd88bb77fcd57d6975e._comment | 43 + ..._3cc5dae0351201522711a7caeecd60d5._comment | 10 + ..._3c3883cb66d02a15d5de84d22aa113da._comment | 38 + ..._c8cece9559bd2dc6154cd28772369e48._comment | 10 + doc/bugs/remote_not_showing_up_in_webapp.mdwn | 88 + ..._2a269732fd528f505777542d3556437a._comment | 17 + ..._device_configurator_chokes_on_spaces.mdwn | 18 + ...denied__44___after_direct_mode_switch.mdwn | 81 + ..._14cec6448831c67794b62926a03b2fc5._comment | 13 + ..._93af8f48a01b6e2d011bd6f60499ccd2._comment | 23 + ..._f8fba1955e62360061613e5898b3d74e._comment | 16 + ...t_the_file__39__s_content_from_remote.mdwn | 27 + ..._d6aad1831674586fe4cdf61dd2a4bbb9._comment | 15 + ..._8591e174c1a8cddfae9371407a58ff1c._comment | 10 + ...fails_when_home_on_seperate_partition.mdwn | 60 + doc/bugs/restart_daemon_required.mdwn | 22 + ..._f79ac16cc9f1e3b08cd121bf5efb29c3._comment | 8 + ..._50c1b268a3cc4514681059eabca674e3._comment | 8 + ..._1716e0f3c7c44dc77ebf7f00fdd8f9e3._comment | 310 + ..._3ce776786eca83fcb8ff94c8f6ff3eb9._comment | 15 + doc/bugs/rsync_remote_shows_no_progress.mdwn | 15 + ..._a7f5d646a924c462b987561cf6fc4318._comment | 8 + ...es_which_have_names_containing_spaces.mdwn | 50 + doc/bugs/scp_interrupt_to_background.mdwn | 2 + ...on_without_having_to_be_in_a_git_repo.mdwn | 11 + doc/bugs/signal_weirdness.mdwn | 48 + ..._--_please_seek_possibility_to_shrink.mdwn | 41 + ..._d2faaff98386433110dcf7aae87916b7._comment | 9 + ..._1359ddf1b5db4303f8bd219d3f07df3a._comment | 10 + doc/bugs/smarter_flood_filling.mdwn | 31 + doc/bugs/softlink_mtime.mdwn | 54 + ...failed_when_adding_remote_server_repo.mdwn | 44 + ..._52180983b59c247389a55a9523ec435b._comment | 14 + ...ssh_connection_caching_broken_on_NTFS.mdwn | 66 + ..._54e7e12514f4c109fd57a4eb744b731a._comment | 14 + doc/bugs/submodule_path_problem.mdwn | 56 + ..._69aec9207d2e9da4bc042d3f4963d80e._comment | 48 + ..._53d9eb28cb70b51637470175a80ddf35._comment | 8 + ..._aa5e0f99000a5b4988bccbb2ca28353b._comment | 20 + ..._ab1508a5a04e2106aad5e7985775a6fa._comment | 8 + ..._8c7539d1c11b81f5d46aa8e1c61745ae._comment | 14 + ..._cacc91afcb1739dfca3a60590bb70356._comment | 67 + ...ave_the_32bit_version_installed__41__.mdwn | 50 + ..._6208e70a21a048d5423926d16e32d421._comment | 9 + ..._8765b6190e79251637bb59ba28f245c1._comment | 21 + ...h_the_annex_directory_exposed_to_http.mdwn | 20 + ...est_failures_on_window_for_5.20131118.mdwn | 20 + ..._5a7a284625c12d54390fe4a4ec1d4211._comment | 188 + .../test_suite_failure_on_samba_mount.mdwn | 278 + ..._e074b20801b921ee2661025a050a8af2._comment | 12 + ...st_suite_shouldn__39__t_fail_silently.mdwn | 3 + ..._is_no_global_.gitconfig_for_the_user.mdwn | 50 + ...-_after_an_update_of_haskell_platform.mdwn | 23 + ..._20a6fe046111e9ae56fd4d9c9f41f536._comment | 8 + ..._6fdc5f8b07908c6eda8a97690408f44e._comment | 45 + ..._014474a133c7ff0131029d8721afc710._comment | 46 + ..._9c537e251dc99667fe87870804d802c2._comment | 10 + ...a41_disables_the_watch_command_on_OSX.mdwn | 22 + .../three_character_directories_created.mdwn | 56 + ..._dd91de24dab4f2eaded1f7d659869d4d._comment | 8 + ..._f6375964a6c8bb1e6c5b7238effca66d._comment | 62 + ..._776e0a9b938d8b260a5111594b442536._comment | 8 + ..._e288bacdb336c4886adb6eeb4dca1e92._comment | 8 + ..._359b80948ac92a0f1eb695599456486c._comment | 10 + .../three_way_sync_via_S3_and_Jabber.mdwn | 119 + ..._fc5ec5505f141bb9135e772d1094bc4d._comment | 12 + ..._0df2210c30dec6d88d7858d93eec19a3._comment | 10 + ..._41682b2e72e657e0f23af244f8345e85._comment | 10 + ..._c7b4ea9aea6839763eb8b89e8d6a5ad5._comment | 14 + ..._063f5e5e554ad6710f16394906d87616._comment | 33 + ..._197ad39b4a46936afeeb04eb26cf1ef3._comment | 138 + ..._0b0d829ccd255be0177ae9d8f6b10e63._comment | 61 + ..._37a8e19440c764317589bc4248cbccdf._comment | 10 + ..._12eb333327d31ca2bfee3f3c5e26d641._comment | 24 + ..._e6b1084b2f18d8e536c8692e165754a3._comment | 12 + ..._2120a1c3e5f490a55f68bb1bef5efd0d._comment | 183 + doc/bugs/tmp_file_handling.mdwn | 13 + ..._0300c11ee3f94a9e7c832671e16f5511._comment | 13 + ..._cc14c7a79a544e47654e4cd8abc85edd._comment | 8 + ...s_problems_on_non-linux_based_systems.mdwn | 19 + ..._1d38283c9ea87174f3bbef9a58f5cb88._comment | 10 + ..._bf112edd075fbebe4fc959a387946eb9._comment | 8 + ..._a46080fbe82adf0986c5dc045e382501._comment | 8 + ..._760437bf3ba972a775bb190fb4b38202._comment | 8 + ..._060ba5ea88dcab2f4a0c199f13ef4f67._comment | 10 + ..._548303d6ffb21a9370b6904f41ff49c1._comment | 42 + ..._7ca00527ab5db058aadec4fe813e51fd._comment | 8 + ..._881aecb9ae671689453f6d5d780d844b._comment | 8 + doc/bugs/transferkey_fails_due_to_gpg.mdwn | 51 + ..._f6434400d528a0fa59c056995ff2e6f3._comment | 12 + ..._c540b05b62a3186a87efcb180ea2a52d._comment | 12 + ..._9ad2ef73169dbd2866da2f4259ab0f00._comment | 8 + ..._7631b8842efba6a4aad87386ce9443a7._comment | 8 + ...dy_to_add_remote_server__34___message.mdwn | 16 + .../typo_on_the_Mac_OS_10.7.5_Lion_build.mdwn | 11 + ..._e8df4b36a89b37edd94f3a318ae93a32._comment | 8 + ..._3b2c3c84bd1910280c549a2ee1c622b9._comment | 8 + ..._repository_group_of___34__here__34__.mdwn | 13 + ..._do_not_work_when_git_index_is_broken.mdwn | 17 + ..._1931e733f0698af5603a8b92267203d4._comment | 8 + ..._40920b88537b7715395808d8aa94bf03._comment | 8 + ...nannex_command_doesn__39__t_all_files.mdwn | 30 + ..._object_even_if_referred_to_by_others.mdwn | 20 + ..._0ce72d0f67082f202cfa58b7c00f2fd3._comment | 39 + ..._647f49ffcaa348660659f9954a59b3ae._comment | 16 + ..._3f7f4b55b7ec2641a70109788e0b5672._comment | 10 + ..._313d393c416495aa0f8573113e41c2f7._comment | 431 + ..._c0e7742672db2629bd906cebefe74f72._comment | 10 + ..._c56171665db3ed14109a09097d49ac5d._comment | 8 + .../unannex_vs_unlock_hook_confusion.mdwn | 15 + doc/bugs/undefined.mdwn | 5 + doc/bugs/unfinished_repos_in_webapp.mdwn | 31 + ..._9628b100e39489be9f28ef75276a7341._comment | 11 + ..._ba0fbff536b1d067c4098db401dc49f2._comment | 10 + ..._fd554aa7d93117177784a29270ccf790._comment | 12 + ...ository_when_using_annex-ignore_true_.mdwn | 25 + doc/bugs/unhappy_without_UTF8_locale.mdwn | 41 + ...d_indirect_don__39__t_work_on_android.mdwn | 23 + ..._fec69c4c41987b9469eaa8f745c0a124._comment | 8 + ..._54c3fa77a069b36d03c41aad08fee9af._comment | 8 + ...t_abort_when_hard_link_creation_fails.mdwn | 47 + .../uninit_does_not_work_in_old_repos.mdwn | 20 + ..._bc0619c6e17139df74639448aa6a0f72._comment | 8 + ...if_git-annex_add_didn__39__t_complete.mdwn | 15 + ..._when_branch_git-annex_is_checked_out.mdwn | 15 + ...ails_silently_with_directory_symlinks.mdwn | 53 + ..._os_x_10.6_-_cp:_illegal_option_--_-_.mdwn | 22 + ..._a634a9f1c023bf836183de64abab1224._comment | 10 + ..._d9ae61a7c3f1eb243ca650945b40f21d._comment | 19 + ..._fe229c03c14e8eb2b57389e0e193ed99._comment | 8 + ..._fa12afe295de63c4aa7eb043b715325a._comment | 15 + ...hen_lock_of_uncommitted_file_loses_it.mdwn | 7 + ...ed_.git-annex__47____42___directories.mdwn | 16 + ..._9ca2da52f3c8add0276b72d6099516a6._comment | 10 + ..._e14e84b770305893f2fc6e4938359f47._comment | 18 + ..._ec04e306c96fd20ab912aea54a8340aa._comment | 8 + ...rab_archive_content_onto_client_again.mdwn | 434 + ..._51097a6b84edcc607abc0e6e21ca21f2._comment | 8 + ..._c34a4009213c410bba3c147ae0552029._comment | 15 + ..._634542867fd28962c47b7bc3ea022175._comment | 8 + ..._301f3ff2d203ac4c58a037e553b2c14d._comment | 18 + ..._82ecdc88ccc1f87386b128adc4ff9af4._comment | 14 + ..._158b2ba3da815910505899606177d415._comment | 16 + ..._b068924802f3917e3e005350cb0cc2a2._comment | 8 + ..._f4772858c927d4a62edc3caf59b5da10._comment | 8 + ..._d0923d2950357f4444c5ef94ff196ba3._comment | 8 + ..._7fb30cb80aecc60e48c64846aa185206._comment | 9 + ...ploads_queued_to_annex-ignore_remotes.mdwn | 34 + ..._fa1c98f38253db8c2be3604c72eb3726._comment | 17 + ...te_format_generates_irritating_output.mdwn | 28 + ..._fceba878f1097e27f056580e8d6d5b31._comment | 26 + ..._416992874813f120721a56d88b2bef65._comment | 9 + ..._a20f470c5226ac5693eb15146a02b3f5._comment | 8 + ..._a81f06191bc03a7aad5929af99f0634e._comment | 28 + ..._7438caecf78b4fb5d21f9f31dff95cf2._comment | 14 + doc/bugs/utf8.mdwn | 192 + ..._f298b8b480d3ab2dd9c279589afcd0ea._comment | 10 + ..._a8864a46f8154680beeea27449ac6f09._comment | 142 + ..._2202c3479d19d306f31aac5a47b55e7d._comment | 10 + ..._7044d2c5bb1c91ee37eb9868963a1ff2._comment | 41 + ..._656b3caa16ae93b092fb5804fa575a3b._comment | 8 + ..._25b3d4c47c45b72129b17b171a45c5f9._comment | 8 + ..._2aaab9253bbc75012292c7b5a7d55696._comment | 173 + ..._416ad6fb5f7379732129dc5283a7e550._comment | 23 + ..._cd55f6bbeb145fd554f331dcff64f5e1._comment | 10 + ..._bb583a419d6fa4e33e5364c4468b35c6._comment | 8 + ..._cd8a22cfb70d9d21f0a5339ccc52ee93._comment | 14 + ..._14eefd4bee283802e9c462fa20b7835c._comment | 19 + ..._58d8b5bdb9f11e8c344e86a675a075dd._comment | 11 + ..._00fa9672ce55b6bfa885b8a13287ac25._comment | 10 + ..._a01e26fa0fafbc291020f53dbfdf6443._comment | 10 + ..._b7c084be01ce985be51e48503fcba468._comment | 8 + ...st.log_and_remote.log_merge_wackiness.mdwn | 36 + ...__34___but_podcasting_feature_working.mdwn | 28 + ..._ce06ba4f65f322362b23797f6190c7c3._comment | 17 + ...rnal_Server_Error__internal_liftAnnex.mdwn | 20 + ..._57547f9a480df2c3f7b3997b0fb7039a._comment | 12 + ..._99f12da3ef01141dc7a9105fcf966793._comment | 10 + ...40__handle_is_closed__41___on_Android.mdwn | 24 + ..._e8866dc15f8fc049229e7451addad1d5._comment | 12 + ..._ee616b0251ffaace9844cfd7af896c35._comment | 10 + ..._6b8bd314b647ea3a485f5faf4856f9a9._comment | 35 + ..._7009b6727ba40bc9bd1b1f939e75d093._comment | 8 + ..._00ddf7ade6cca758afa838be0b9588cb._comment | 20 + ..._6137ef0ad01d5600dab6fccbeed9a88b._comment | 14 + ..._4b79d7ea338d9f70eb80b8cc2c5a21e4._comment | 8 + ...and_on_OSX_--_hangs_with_a_small_repo.mdwn | 41 + ..._63f04694610839db0c2381005b15da35._comment | 14 + ..._8afe4720e301cf7ccf11ff0a23261936._comment | 8 + doc/bugs/watch_command_on_OSX_10.7.mdwn | 37 + doc/bugs/watcher_commits_unlocked_files.mdwn | 37 + ..._f70e1912fde0eee59e208307df06b503._comment | 8 + ...web_app_loops_over_a_non-addable_file.mdwn | 56 + ...ifficult_to_abort_adding_a_repository.mdwn | 24 + doc/bugs/webapp_hang.mdwn | 144 + ..._08aa908a64d0fe2d50438d01545c3f01._comment | 8 + ..._2a21ac5657128a454f9deb77c4d18057._comment | 21 + ..._error_upon_creating_the_initial_repo.mdwn | 26 + ..._1bcf0f565eacac851bd21cd428c8e0a5._comment | 33 + ..._7dd2483b5b07df8f3b37a34651c05962._comment | 8 + ...uires_reload_for_notification_bubbles.mdwn | 41 + ..._b15480e5dec1ffbebb8cde1ca8d7c9d5._comment | 11 + ..._8dad57a852e1db804aa38f90f3bb398b._comment | 8 + ...___34__Added_x_files__34___a_bit_ugly.mdwn | 15 + ...ls_mysteriously_on_newer_repo_layouts.mdwn | 34 + ...ability:_put_the_notices_on_the_right.mdwn | 18 + ..._ec7a444e09a028b5225bd41fb83442e8._comment | 9 + doc/bugs/weird_local_clone_confuses.mdwn | 20 + ...uts_no_informaiton_for_unlocked_files.mdwn | 44 + ..._fails_test___34__recoverEncode__34__.mdwn | 39 + ..._424b3536e21e02f192f7f2b8e833ed18._comment | 67 + ..._78db183aa401e2023d7faec5f7a4a573._comment | 10 + ..._ed2da19eaf0bd0864f6b28816a79bc23._comment | 8 + doc/bugs/windows_install_failure.mdwn | 30 + ..._f339574c7cfa35c1f0dfd515fde457f5._comment | 8 + ..._1d3364d8f5c4963f3a7e473298ec6ed1._comment | 8 + ...rt_-_can__39__t_directly_access_files.mdwn | 250 + ..._03ef9d33839173044dcc4f2b37f575d2._comment | 8 + ..._c65e5491c82908af46fe2c97e048d210._comment | 20 + ...when_adding_17_files_at_once_or_more_.mdwn | 197 + ...po_can__39__t_pull_newly_added_files_.mdwn | 559 + ..._b4f5e2d6a0d690f6b0089fa80a3c920b._comment | 8 + ..._c2092add1430667108a3fdc5e1c9b5f5._comment | 8 + ..._f0ea453951daf84dbddc653ac64822b6._comment | 8 + ..._35a8be5ecc9d1b72c38f8ddb47678160._comment | 8 + ..._29e72997b88f91f84639587b4cede34c._comment | 76 + ..._2de7f6532de4cbc21737ce53a89d6525._comment | 10 + ..._80d130b5af829763be77c61a9c5ca306._comment | 29 + ..._ec199db851952b40e8b18922da574ea4._comment | 8 + ..._d269fcadea9d5a668e3c6d6cf019f56a._comment | 353 + ..._908d1b981d56107f29d8972bf11aefc8._comment | 12 + ...__.config__47__git-annex__47__program.mdwn | 20 + ..._44c11918d00ead38d40556aade98c0af._comment | 12 + doc/bugs/xdg-user-dir_error.mdwn | 8 + ...s_one_account_per_distinct_repository.mdwn | 107 + ..._820732c4dcb15186b4f635c50fdb0805._comment | 19 + ...sod-default_is_needed_as_a_dependancy.mdwn | 10 + doc/bugs/yesod-form_missing.mdwn | 23 + ...tube_support_suddenly_stopped_working.mdwn | 62 + doc/builds.mdwn | 20 + doc/coding_style.mdwn | 92 + doc/comments.mdwn | 9 + doc/contact.mdwn | 11 + ..._12d60f767d90bea94974e1ff6b206d31._comment | 8 + ..._95b6d868b913418de50ba121d71d2390._comment | 10 + ..._2cf43bd406673294e6cdbd785c4a0d0c._comment | 16 + ..._586a506e27379d74fbc0f4b654e89c7d._comment | 10 + doc/copies.mdwn | 38 + ..._af9bee33777fb8a187b714fc8c5fb11d._comment | 8 + doc/design.mdwn | 8 + doc/design/assistant.mdwn | 45 + doc/design/assistant/OSX.mdwn | 13 + ..._9290f6e6f265e906b08631224392b7bf._comment | 14 + doc/design/assistant/android.mdwn | 42 + ..._316bde8d22628e5e9d4f8dabce1d2ad4._comment | 14 + ..._8be9a74e5fc4641c2bf2e1bb7673dd59._comment | 8 + ..._3dd386ac1b757c73d14f14377b9eedd4._comment | 8 + ..._5dca47a4599d6e88d19193701c5a571b._comment | 46 + ..._054f06311e2b51d73be569f181eb004f._comment | 10 + ..._bb3d36e9d29f2fa77bee6d47ef9917fe._comment | 21 + ..._fee32a831eeb5736fe1dce52e30320c8._comment | 16 + ..._d8e9b0a5287fc96b19dc2cb9da3586ce._comment | 17 + ..._79a7b5bb5f4aaeea4a4e8ced0561701a._comment | 11 + ..._55ea70a6929523d26248ff6409b04a6e._comment | 10 + doc/design/assistant/blog.mdwn | 11 + .../blog/day_100__cursed_clouds.mdwn | 19 + .../day_102__very_high_level_programming.mdwn | 37 + ..._c028b403261dd66bcf83e6ffd134b80b._comment | 8 + .../assistant/blog/day_103__bugfix_day.mdwn | 25 + doc/design/assistant/blog/day_104__misc.mdwn | 18 + ..._13d7fad2d3f8eab10314784c035e2a16._comment | 8 + .../assistant/blog/day_105__lazy_Sunday.mdwn | 43 + .../assistant/blog/day_106__lazy_Monday.mdwn | 10 + .../assistant/blog/day_107__memory_leak.mdwn | 11 + .../day_108__another_zombie_outbreak.mdwn | 33 + ..._194c48d65993462f809a2cfaa774a3e2._comment | 11 + ..._ef5ee5933fcadcb81cc81b816db14bda._comment | 8 + .../assistant/blog/day_109__dropping.mdwn | 16 + doc/design/assistant/blog/day_10__lsof.mdwn | 54 + ..._9b8c28c85c979f32e5c295b6a03c048e._comment | 9 + .../blog/day_110__more_dropping.mdwn | 55 + .../blog/day_111__config_monitor.mdwn | 18 + ...ow_for_something_completely_different.mdwn | 50 + ..._5e4fe1538d9ae1c450b0a6602fc6d29b._comment | 10 + ..._c5a734f611ecc95729904e645583ee43._comment | 8 + ..._46b16dcd0fce07036cd8ed6ed9d2b055._comment | 8 + ..._1fe036e4c65fb4211aa2c394f535344a._comment | 8 + ..._e4ba3568c4efd98f212dd47427a1cf47._comment | 10 + .../blog/day_113__notifier_work.mdwn | 22 + doc/design/assistant/blog/day_114__xmpp.mdwn | 56 + ..._c2b0617a2fc3dc4f19a6be6947913842._comment | 8 + ..._d14375dfb5791615802dab3c5438f8e2._comment | 8 + ..._6d72ea32c111e605be30ad2153fc71c9._comment | 10 + ..._e51d6f854db5f9e74a1aa58bd8923795._comment | 12 + .../assistant/blog/day_115__my_new_form.mdwn | 17 + .../assistant/blog/day_116__the_segfault.mdwn | 25 + .../blog/day_117__new_topologies.mdwn | 41 + .../blog/day_118__monadic_discontinuity.mdwn | 15 + .../blog/day_119__time_for_testing.mdwn | 12 + .../assistant/blog/day_11__freebsd.mdwn | 50 + .../assistant/blog/day_120__test_day.mdwn | 2 + .../assistant/blog/day_121__buddy_list.mdwn | 10 + .../assistant/blog/day_122__xmpp_pairing.mdwn | 29 + ..._e95efb23eb2e67e3f11a5c7de56424a7._comment | 10 + ..._30e251e73146512bde8b2f69eddeef2e._comment | 8 + .../blog/day_123__xmpp_insanity.mdwn | 49 + ...ay_124__git_push_over_xmpp_groundwork.mdwn | 28 + .../blog/day_125__xmpp_push_continues.mdwn | 15 + .../blog/day_126__mr_watson_come_here.mdwn | 52 + ..._ee1361e6b235f4e1c00596ba516b519a._comment | 10 + ..._8eb366ae7efb347bd3bbd9a98e0821b3._comment | 8 + .../assistant/blog/day_127__xmpp_syncs.mdwn | 35 + .../blog/day_128__last_xmpp_day.mdwn | 49 + ..._fd8c1d6358cb50f4dad8ba11d33d861f._comment | 10 + ..._43664b73c71c41d71bc95e665f128106._comment | 8 + ..._d369b04f686009a9dbb57b999107a55e._comment | 11 + ..._095855d301e7ccd3689ffe507cfb63ee._comment | 8 + ..._da7b0586b0b28e1e0fe4126f6543a7bc._comment | 9 + ..._2f9ba367e19d77bf52f372b6f0f5938a._comment | 8 + .../assistant/blog/day_129__release.mdwn | 4 + .../assistant/blog/day_12__freebsd_redux.mdwn | 23 + ..._5da32cf53f1de27bfe6cec2d294db3e1._comment | 8 + ..._696d6e22034acf5bb60d80124b72ef2f._comment | 8 + .../assistant/blog/day_130__what_now.mdwn | 36 + ..._402f00cc034351d8253a797dd4de55bf._comment | 8 + .../blog/day_131__webdav_groundwork.mdwn | 28 + .../blog/day_132__webdav_continued.mdwn | 22 + .../blog/day_133__webdav_working.mdwn | 31 + .../blog/day_134__box.com_configurator.mdwn | 8 + .../blog/day_135__progress_revisited.mdwn | 37 + doc/design/assistant/blog/day_136__misc.mdwn | 14 + .../assistant/blog/day_137__Glacier.mdwn | 30 + doc/design/assistant/blog/day_138__back.mdwn | 25 + ..._65a8499b284bed38d2bde1886a54a311._comment | 8 + .../assistant/blog/day_139__catch_up.mdwn | 11 + .../blog/day_13__kqueue_continued.mdwn | 34 + .../blog/day_140__release_monday.mdwn | 25 + .../blog/day_141__release_tuesday.mdwn | 6 + ..._a5adea7a726df12f9121c744a036f08d._comment | 10 + .../assistant/blog/day_142__filling_in.mdwn | 9 + .../assistant/blog/day_143__what_next.mdwn | 22 + ..._40cf25a2ebdd43d8974a28e180e100e5._comment | 13 + ..._af9ccbbc5131e6333c029415141bdb51._comment | 10 + .../assistant/blog/day_144__webapp_work.mdwn | 8 + .../blog/day_145__more_webapp_work.mdwn | 12 + .../assistant/blog/day_146__meanwhile.mdwn | 22 + .../assistant/blog/day_147__direct_mode.mdwn | 36 + ..._0bd69532afce9dc04e3d88bfd0aed4b2._comment | 16 + ..._3b26f0d081c3bf1037bb872d529ce825._comment | 8 + .../assistant/blog/day_148__direct_mode.mdwn | 42 + .../assistant/blog/day_149__rainy_day.mdwn | 15 + .../blog/day_14__kqueue_kqueue_kqueue.mdwn | 23 + .../blog/day_14__thinking_about_syncing.mdwn | 44 + doc/design/assistant/blog/day_150__12:12.mdwn | 53 + .../blog/day_151__direct_mode_toggle.mdwn | 59 + .../assistant/blog/day_152__bugfixes.mdwn | 18 + ..._46863a875f9daa6f2c9248b66ff91929._comment | 9 + ..._a586e617bc024c8a9ff60f1b8345d74d._comment | 8 + .../assistant/blog/day_153__hibernation.mdwn | 26 + .../blog/day_154__direct_mode_merging.mdwn | 21 + .../assistant/blog/day_155__bugfixes.mdwn | 15 + ...ay_156_and_157__direct_mode_assistant.mdwn | 45 + .../assistant/blog/day_158__fsevents.mdwn | 20 + ..._b278372ac6399f64d5fa9da178278a6d._comment | 8 + ..._2d5ce9b2807068c3517e185945662bd2._comment | 8 + .../blog/day_159__fsevents_and_assistant.mdwn | 16 + ..._b85f446c3fa8d703a2a8882825c6f33f._comment | 8 + ..._a150b404e0c39e0bb2f7dd00cda63cdc._comment | 8 + ..._37abc41bae23a1d7de0d19d952aec492._comment | 8 + .../assistant/blog/day_15__its_aliiive.mdwn | 33 + .../day_160__finishing_up_direct_mode.mdwn | 10 + .../assistant/blog/day_161__release_day.mdwn | 8 + ..._e82c67f3ce216618149537bba1e0b850._comment | 19 + ..._b1fe96fd818935c0497b78bb8ad32ffa._comment | 14 + ..._40bac0e1756aa77bb966c4654857141c._comment | 44 + ..._af65656b0d1179636937595868bb97b0._comment | 30 + ..._0c05caaaf9588e124585041bf5f45d75._comment | 20 + ..._5dfb5f428633d6062925f61af2b8829b._comment | 23 + ..._ac4effb381b08d94d4a2d2482e92c89a._comment | 13 + ..._32600e89e3098e52a1280895e03b3f86._comment | 13 + ..._07e5d0c3cad0ce2bd4943e53b61f1767._comment | 8 + doc/design/assistant/blog/day_162__UI.mdwn | 17 + .../blog/day_163__free_features.mdwn | 32 + .../assistant/blog/day_164__bugfixes.mdwn | 17 + .../assistant/blog/day_165__release_day.mdwn | 16 + .../blog/day_166__a_short_long_day.mdwn | 25 + .../day_167__safe_direct_mode_transfers.mdwn | 12 + ..._f1aa64fe803d8c14b250a4e98b88142a._comment | 8 + ..._5ce1db84c9ead713f1272c4975645b93._comment | 8 + .../blog/day_168__back_to_theme.mdwn | 18 + ..._f248780bfcbd0384d9d72c2633a4ea46._comment | 12 + ..._5beba073373b8e75a32d1fcfdc1a0782._comment | 13 + .../blog/day_169__direct_mode_is_safe.mdwn | 24 + ..._65f87656c4e6bc7cdb614f53961341c9._comment | 8 + ..._a116a402a126c62be54c06afd82439ab._comment | 19 + .../blog/day_16__more_robust_syncing.mdwn | 44 + ..._23e7a90429e4431f90787cd016ebe188._comment | 8 + ..._8e7e7cd27791bb47625e60a284e9c802._comment | 10 + .../blog/day_170__bugfixes_and_release.mdwn | 8 + doc/design/assistant/blog/day_171__logs.mdwn | 23 + .../assistant/blog/day_172__short_day.mdwn | 22 + ..._b75e26b77a23a45da1c4c3bca1399246._comment | 12 + .../assistant/blog/day_173__snow_day.mdwn | 22 + .../blog/day_174__last_weekend_before_AU.mdwn | 25 + ..._05a8fd47f54373331741cc869a53b0c3._comment | 10 + ..._fc8e65eef954c4caa8321c2fe8b711b7._comment | 8 + ..._399534f540d85cac067fbb7be9d373b4._comment | 8 + .../blog/day_175__pacific_features.mdwn | 15 + ..._c3ee4386f872b7c76aaecfa638b368cb._comment | 9 + .../blog/day_176__thread_management.mdwn | 13 + .../assistant/blog/day_178__bus_hacking.mdwn | 10 + .../blog/day_179__brief_updates.mdwn | 19 + ..._920a84457d40358507a3eb817a4568d9._comment | 8 + .../blog/day_17__push_queue_prune.mdwn | 19 + doc/design/assistant/blog/day_180__back.mdwn | 7 + .../assistant/blog/day_181__triage.mdwn | 23 + .../assistant/blog/day_182__it_begins.mdwn | 50 + .../assistant/blog/day_183__plan_b.mdwn | 19 + .../day_184__just_wanna_run_something.mdwn | 46 + ..._689adac7e26cb0b0a4e7ecc787cfd716._comment | 16 + .../blog/day_185__android_liftoff.mdwn | 20 + ..._b7d28010a72619a7e9a5ad4f2a0d6c07._comment | 9 + ..._ddeb24e86fafb7dae93142cc02767aad._comment | 10 + .../blog/day_186__Android_success.mdwn | 33 + ..._1629da240ca7db5f8a32059f561fd435._comment | 8 + .../blog/day_187__porting_utilities.mdwn | 22 + ..._0e6a3f4fe8e09f247fa04156bc60f8c7._comment | 8 + .../day_188__crippled_filesystem_support.mdwn | 37 + ..._32a296fce23ae4b1e18bd5a9964bf619._comment | 14 + .../blog/day_189__more_crippling.mdwn | 44 + .../assistant/blog/day_18__merging.mdwn | 82 + ..._7a553ad559519f3b3e3cd20115b4c44e._comment | 15 + .../assistant/blog/day_190-191__weekend.mdwn | 28 + ..._dbd692d12c14d08acd7d73a655b34e8b._comment | 10 + ..._c813830e53471a9732e010a748d574fc._comment | 28 + .../blog/day_192_193__more_porting.mdwn | 44 + .../assistant/blog/day_194__nice_moment.mdwn | 37 + .../blog/day_195__real_android_app.mdwn | 32 + ..._0112007552b30cd9bfeac614a1e399c4._comment | 10 + ..._230d3c169c713f613b9d607d84ce5092._comment | 12 + ..._8d74ad2a61c02272758d157282ad56ec._comment | 10 + ..._4f6bc0680f2debd638933968a26975e0._comment | 10 + ..._71539c62608866464e8faa76bc522a55._comment | 9 + ..._e1b205289721ae79ac7fbed2f44018b2._comment | 10 + ..._4bc0aeae4fa1116944644c64feaf9697._comment | 8 + ..._17bb6e7565d4c757f6c1e3514c22f47d._comment | 10 + ..._cd8a6bec0f7c6843dd11d3266f25f864._comment | 44 + ..._2d2eee4bcbbd1d069a80bff5edc90c3c._comment | 13 + ..._3d96568c469a8c53a982f304eae5e7d4._comment | 10 + ..._e8667c47d07fc842cf0fe2ebbfbc1c58._comment | 8 + ..._cf8da7720ddc20b05955ee671ca4acd5._comment | 8 + ..._f4709bdbc739182819b648fd6aa00531._comment | 36 + ..._e66af12c7eca0d457b8406e9fb4b69be._comment | 8 + .../blog/day_196__android_bugfixes.mdwn | 26 + .../blog/day_197__template_haskell.mdwn | 36 + ..._82d9f9508929d84abf7b718c59436ae8._comment | 18 + .../assistant/blog/day_198__bugfixes.mdwn | 11 + ..._5a15b5bad0f9ba2423d2aebe440ac0ea._comment | 19 + ..._36d94b838e5e65c85e7afaabe8a578f1._comment | 12 + ..._ae9b74341a3bc6e1e84d2c0ca4c5f612._comment | 10 + ..._5a4827227c03bcff3b1e4c44b531f816._comment | 12 + ..._9c5f4c85217e898be4c57c615e53c36f._comment | 8 + ..._bccf1abfb7f56d97673158f3ccfce511._comment | 9 + ..._6f1b51b002cc5d2b505d80e3e04bf6f3._comment | 8 + ..._8a3542437663028b17442818eba3f7c5._comment | 9 + .../day_199__wrapping_up_Android_for_now.mdwn | 26 + ..._ec57358afc7e78d2860aa4237793832d._comment | 11 + .../blog/day_19__random_improvements.mdwn | 50 + doc/design/assistant/blog/day_1__inotify.mdwn | 57 + .../assistant/blog/day_200__release_day.mdwn | 19 + ..._40cfe9bfd9e611fd734dbb5aad348aa3._comment | 10 + ..._b26890fdae575d42170988073fb2e45d._comment | 8 + ..._710a30c5d31bf549833ecfe9a0997c94._comment | 8 + ..._b6f62ab7e810ba6d3a43f0ead370c79a._comment | 8 + ..._a68e1ed7829b49086c567d97ddc09912._comment | 8 + ..._39d3ad0a029fe56e96f97d28d17fbbd2._comment | 8 + ..._5b752d6a8d74e61190f09384b6108206._comment | 31 + ..._881274ae0d6230bb4cafa4151ad72b49._comment | 12 + ..._e220059be77cf0ef396f37a4f9ccf9b5._comment | 8 + ..._ec2152151188dd252cdb61c68cfc12e4._comment | 10 + ..._42572411617c287368482bb9dcf94324._comment | 18 + ..._6b69aa81a9ba4e07e547ed1869946d51._comment | 15 + ..._b070a2e4151d9fbf43d7906efa78515f._comment | 12 + .../blog/day_201__real_Android_wrapup.mdwn | 38 + ..._88b9950c51324f0bb89c5646b3170952._comment | 19 + .../blog/day_201__real_Android_wrapup/fib.png | Bin 0 -> 69535 bytes .../blog/day_201__working_web_server.mdwn | 31 + .../blog/day_203__procrastination.mdwn | 25 + .../blog/day_204__deprocrastination.mdwn | 62 + .../day_205_206__rainy_day__snow_day.mdwn | 12 + doc/design/assistant/blog/day_207__XMPP.mdwn | 7 + .../assistant/blog/day_208__bugfixes.mdwn | 17 + .../assistant/blog/day_209__The_Bug.mdwn | 23 + .../blog/day_20__data_transfer_design.mdwn | 22 + .../assistant/blog/day_210__spring.mdwn | 29 + .../blog/day_211__zooming_along.mdwn | 24 + .../blog/day_212__accidental_all_nighter.mdwn | 24 + ..._6ee1f8056eedb6eb18013faf8f5ec212._comment | 8 + ..._07c83d75bb105bb77ada07359ed0ea7a._comment | 8 + ..._2c904d33f4f14807fbe718a01e98800a._comment | 8 + ..._59ec5c1cab75df87293800a7a03fe9c6._comment | 8 + ..._13893f106e835dcc52e03c7c6740c35b._comment | 8 + doc/design/assistant/blog/day_213__costs.mdwn | 34 + .../assistant/blog/day_214__release_day.mdwn | 5 + .../blog/day_215__dashboard_UI_refresh.mdwn | 25 + .../blog/day_216__more_bugfixes.mdwn | 42 + ..._299462bcdd0e4f6cd7895b5f40ca00ad._comment | 10 + ..._1913d65dfe4ba08379d82a4a2ca91c40._comment | 8 + ..._92c774599a78540ad398afcd1d05f7ce._comment | 20 + .../assistant/blog/day_217__nothing.mdwn | 2 + .../assistant/blog/day_219__bug_triage.mdwn | 14 + ..._c6b977a969cacdce62987a439b7686f5._comment | 16 + .../blog/day_21__transfer_tracking.mdwn | 28 + .../assistant/blog/day_220__performance.mdwn | 40 + .../blog/day_221__this_and_that.mdwn | 28 + doc/design/assistant/blog/day_222__back.mdwn | 16 + ..._f05b48231a1ee0cffba7d66e112e5551._comment | 8 + ..._4d5f003ccd81580017ebf0dc31bc9cda._comment | 8 + .../blog/day_223__progress_revisited.mdwn | 24 + .../blog/day_224__annex.largefiles.mdwn | 23 + ..._408e4021b18f7ff5548d2d19ab558922._comment | 8 + ..._b24d1da2bc4307ded0216daffb8f9336._comment | 8 + .../blog/day_225__back_from_the_dead.mdwn | 47 + ..._9ac37c3b5c4c72ec8a39dce00bcbe420._comment | 8 + ..._26125dd9ef2bd10b597d14b2c6180952._comment | 8 + .../assistant/blog/day_226__poll_results.mdwn | 28 + ..._1ed980472214be6d0a8cf55f37797fda._comment | 8 + ..._6823b0a9a8037f1a5214db4db98fb16e._comment | 8 + .../day_227__bigfixing_all_day_today.mdwn | 21 + ...228__more_work_on_repository_removals.mdwn | 27 + .../blog/day_229__rainy_day_bugfixes.mdwn | 17 + .../day_22__horrible_option_parsing_hack.mdwn | 34 + doc/design/assistant/blog/day_230__Mom.mdwn | 35 + ..._696bba2246c8a9e6ce4aed3071bcc96c._comment | 8 + ..._2fa295ab6db0828cb725cfcfb6777822._comment | 8 + ..._fafd7abec629290418334ddb015bf62c._comment | 10 + ..._450cac0f2e82c94fd34b527ae05ef1b8._comment | 8 + .../assistant/blog/day_231__insert_title.mdwn | 26 + .../blog/day_232__headless_webapp.mdwn | 22 + ..._0fdd77d143ecba6fdb9f75cb6fc37bfb._comment | 16 + ..._0784a2a73c3e2945f3d3f2577b3b9c9c._comment | 8 + ..._ccb9fa22422fb913b6a496ebe65c49fb._comment | 8 + ..._ceba4468760a2525960327698431cee2._comment | 8 + doc/design/assistant/blog/day_233__taxes.mdwn | 11 + ..._9473ffdc42595af9c293fbcd5a1cdb54._comment | 14 + ..._5feed8d7053ba03812ccda8c61fd9775._comment | 8 + .../blog/day_234__clean_shutdown.mdwn | 29 + .../assistant/blog/day_235__birthday.mdwn | 31 + ..._db558b071067c1e63cde05cca0551094._comment | 8 + ..._d1a2c1124781118267599457ae9e0512._comment | 8 + ..._b853508d1d15234958b9f4a39277e45c._comment | 8 + ..._73aad3398a43bc4d28bca9bf635fa757._comment | 8 + .../assistant/blog/day_236__evil_splicer.mdwn | 29 + .../day_237__gnome-keyring_craziness.mdwn | 29 + ..._0cb088b732881d1fa92493aa1fd93d43._comment | 8 + ..._b855fd710954beebaafe6d2bd03eb368._comment | 8 + .../blog/day_238__back_to_Android.mdwn | 11 + .../day_239__bugfixes_and_frustration.mdwn | 28 + .../blog/day_23__transfer_watching.mdwn | 25 + .../assistant/blog/day_240__it_builds.mdwn | 37 + ..._151840ae0020ea63b2f041488c905386._comment | 25 + .../assistant/blog/day_241__cleanup.mdwn | 14 + ..._0e283cdf66a25b3cc9423fe651084cb9._comment | 8 + .../assistant/blog/day_242__more_porting.mdwn | 4 + .../assistant/blog/day_243__in_the_field.mdwn | 21 + .../blog/day_244__android_porting.mdwn | 6 + doc/design/assistant/blog/day_245__misc.mdwn | 15 + ..._3a2976617bb0cdc206fb1397a2ef1177._comment | 8 + ..._e0f9704e91fedca8ff26356f354cc1c3._comment | 10 + ..._93003a0d0983efbdc046d7459be194b0._comment | 8 + .../blog/day_246__bug_treadmill.mdwn | 18 + ..._f76f653364fe2b97e85e8356c93b0fce._comment | 8 + .../blog/day_247__performance_tuning.mdwn | 16 + .../blog/day_248__Internet_Archive.mdwn | 28 + .../assistant/blog/day_249__quiet_day.mdwn | 7 + .../blog/day_24__airport_digressions.mdwn | 99 + .../assistant/blog/day_250__stymied.mdwn | 23 + ..._330a10d447ccc3db03fcbfe571dbb404._comment | 8 + .../blog/day_251__xmpp_improvements.mdwn | 34 + .../assistant/blog/day_252__release_day.mdwn | 6 + doc/design/assistant/blog/day_253__OMG.mdwn | 22 + ..._bbdc61092771163e65a90a4755a807d8._comment | 8 + .../blog/day_254__Android_app_polishing.mdwn | 35 + ..._37f4ff5227566ce4b3fa69fc32568841._comment | 14 + ..._58bbb105bdbb72bba85c3622195f43b9._comment | 12 + .../blog/day_255__Debian_release_day.mdwn | 26 + doc/design/assistant/blog/day_256__8bit.mdwn | 27 + ..._f9b50263e3997d4c5b9836a2e0a346d7._comment | 8 + .../assistant/blog/day_257__rainy_day.mdwn | 6 + .../blog/day_258__beginning_of_the_end.mdwn | 24 + .../day_259__Android_dominos_toppling.mdwn | 15 + ..._0b4a6e4893b0157e4768b46468dbbb87._comment | 10 + ..._1ebc5aff5d217e1392cb7c8bb6c5156b._comment | 14 + ..._eed7792f6142f3fc74d3c384bb16559b._comment | 8 + .../blog/day_25__transfer_queueing.mdwn | 41 + ..._59fd4f1ffe96c412f613dc86276e7dbd._comment | 10 + ..._93bf768a67117e873af5732ecf08dc78._comment | 7 + .../day_260__Windows_dev_environment.mdwn | 46 + ...day_261__Windows_first_stage_complete.mdwn | 29 + .../blog/day_262__DOS_path_separators.mdwn | 14 + ..._45ecae90b22e31202c21083980d6b567._comment | 10 + .../assistant/blog/day_263_catching_up.mdwn | 11 + ..._9023da0573dfc81644d68128adb331a7._comment | 8 + ...ay_264__Windows_second_stage_complete.mdwn | 21 + ..._42a7502d6ece75520eb59a76fdb1e2f0._comment | 9 + ..._f2b11322ac87e2a36cddc035b2c3c1ea._comment | 8 + ..._ea6ee05acb946fc7e8d95e62647cfa2a._comment | 8 + ..._9ce106baf28b7f75f7f6febd7bfcea70._comment | 8 + .../assistant/blog/day_265__correctness.mdwn | 23 + ..._e8959a6df87eb92310947e66c7471e97._comment | 12 + ..._0cb953fcc085eedb34e65c227309ede7._comment | 8 + ..._df57628a8969af2995732e7ea2a0fae3._comment | 10 + .../assistant/blog/day_266__release_day.mdwn | 6 + ..._92c8d1d9216b46b07dfe69bbc77a923e._comment | 8 + .../blog/day_267__windows_autobuilder.mdwn | 9 + ..._978b584d86395f2f621b0e1f7c5e70d7._comment | 21 + ..._8f978d2811c8fbf11e3d12f245bdb52b._comment | 10 + .../blog/day_268__core_monad_change.mdwn | 9 + .../assistant/blog/day_269__bugfixes.mdwn | 14 + .../assistant/blog/day_26__dying_drives.mdwn | 28 + .../blog/day_270__release_and_xmpp.mdwn | 39 + .../assistant/blog/day_271__more_xmpp.mdwn | 31 + .../assistant/blog/day_272__fuzz_tester.mdwn | 37 + .../assistant/blog/day_273-274__fun.mdwn | 19 + .../blog/day_275__working_hard_or.mdwn | 12 + .../blog/day_276__fuzzing_continues.mdwn | 12 + ..._f5dd0658511a1063c2eb025b0fe98426._comment | 14 + ..._a56c4c26a9e7bb8cfe3f598dbeed0813._comment | 10 + ...ay_277__private_static_protected_void.mdwn | 19 + .../assistant/blog/day_278__winding_down.mdwn | 11 + .../blog/day_279__final_release_prep.mdwn | 14 + .../blog/day_27__robust_transfers.mdwn | 31 + .../day_28-35__threaded_runtime_tarpit.mdwn | 17 + doc/design/assistant/blog/day_280__yesod.mdwn | 7 + ..._a42213a8cef71f2b54db18606028136d._comment | 8 + doc/design/assistant/blog/day_281__back.mdwn | 37 + ..._128809c5a2a9f5cc345a10fdbf55be01._comment | 8 + ..._6d0bbdf6ebaff9da399804570f0e606d._comment | 10 + .../blog/day_282-283__caught_up.mdwn | 18 + .../assistant/blog/day_284__porting.mdwn | 13 + ...285__fixed_the_archive_directory_loop.mdwn | 23 + ..._1065e756dc6d66aefd214eb8ac5ebe1d._comment | 25 + .../blog/day_286__Windows_test_suite.mdwn | 19 + .../assistant/blog/day_287__niceness.mdwn | 13 + .../blog/day_288__success_stories.mdwn | 32 + ..._9ddf57b8ae0241268bb33bec1b169e4c._comment | 20 + ..._50b8a597bd8677608f2ef176443f23f3._comment | 10 + ..._f2df427cf3608377e9a52d8bdeadb26f._comment | 21 + ..._8762efed97f21eeba8f0a7be45bd924a._comment | 35 + ..._55e1bb15c3a93d582d110f8173ceefc2._comment | 9 + ..._5749aef8b585b293385b20b75c40f9d8._comment | 31 + ..._911c6d2764906cad7d6324835441ed34._comment | 12 + ..._eb6aa8af5aa70877255a11d132d51aba._comment | 10 + ..._9a57de4cea407a73b2d023d85afdccc6._comment | 12 + ..._1767c86067bee35941004282b96b8e95._comment | 10 + ..._22b28ca3d4d3283ad8c21ae052fb9752._comment | 11 + ..._1d47f3e1b9f0081649cedae4288bac83._comment | 8 + ..._31d3f58cad83cb1ecc4821a15ca258d8._comment | 14 + ..._b512bd2bf29dfaab6b36bf204518fdb6._comment | 8 + ..._343333356de20e170edb8020faa7400d._comment | 10 + ..._4e4034bec789543b562ac263df3e21dd._comment | 15 + ..._0c52794c77a9b7afc5112f5edf9cb793._comment | 8 + ..._7ca419aa3a187857b19268572d5df297._comment | 18 + ..._3edd56b3b04f19faba8d75cca285a662._comment | 10 + ..._146331ae2de25a6dc3595dffab9514de._comment | 12 + ..._72be9307e75eb120451f3d6ab7c8165e._comment | 8 + ..._c27eb0a4181e85a3eed41130402350bf._comment | 12 + .../blog/day_289__back_in_the_swing.mdwn | 16 + .../blog/day_290__https_release.mdwn | 17 + doc/design/assistant/blog/day_291__--all.mdwn | 32 + ..._eaa9fef19a035bef9c439e87d47c834b._comment | 17 + ..._90bbc26bf92048de7cbaf5fb719c9593._comment | 11 + ..._75006e9909425dcbf86415a9f7c90372._comment | 10 + ..._5440449bbc5a353f7430f72e19c35e92._comment | 8 + .../assistant/blog/day_292__bugfixes.mdwn | 24 + ..._bbac3878d80f7540d229183c56664784._comment | 8 + ..._8c9e5291ceb257f3a938af0ad967c5d7._comment | 10 + ..._02f875e8edd30f47939249f16d92712b._comment | 8 + .../assistant/blog/day_293__gpg_builds.mdwn | 32 + ..._4f152de8ea5aca4ec381d439e2a821f7._comment | 12 + ..._42f625638638bc875379f6c604d6f673._comment | 8 + .../assistant/blog/day_294__release_day.mdwn | 7 + .../blog/day_295__balls_in_the_air.mdwn | 13 + .../day_296__new_crowdfunding_campaign.mdwn | 41 + ..._cccad1a5103c504d21d0f8e69bb39e1b._comment | 8 + ..._4fef7bd9c8e15cd57df365fadb95717f._comment | 8 + ..._0b9258a1f5079e53c60138f06d0c63b1._comment | 8 + ..._46183b97ca904bc06e46569c30db2edc._comment | 8 + .../assistant/blog/day_297__back_to_work.mdwn | 16 + ..._e300feb821bfe7b76b2cec4376d16ffa._comment | 8 + .../assistant/blog/day_298__exceptional.mdwn | 21 + .../assistant/blog/day_299__bugfixing.mdwn | 8 + doc/design/assistant/blog/day_2__races.mdwn | 45 + .../assistant/blog/day_300__new_logo.mdwn | 36 + ..._9fc64e33863b9fce00f6a03417a91e36._comment | 9 + ..._e8aac0298f90004e81492d2c7f85eda0._comment | 8 + ..._6308c767f6e4bf090102191c91520d04._comment | 8 + .../blog/day_301__direct_unannex.mdwn | 21 + .../assistant/blog/day_302_release_day.mdwn | 6 + ..._fe6e572ba706e95188463d9f3e004d03._comment | 17 + doc/design/assistant/blog/day_303__oops.mdwn | 8 + .../blog/day_304__dropunused_safety.mdwn | 28 + ..._1bbcf6c74b6437c44ff8604401fb1432._comment | 10 + .../blog/day_305__interesting_bugs.mdwn | 21 + .../assistant/blog/day_306__offtopic.mdwn | 2 + .../assistant/blog/day_307__buuuugs.mdwn | 31 + .../assistant/blog/day_308__ssh-agent.mdwn | 16 + ..._5f0fc810cf1e1cd9b3ddba3cd19bb19d._comment | 12 + .../assistant/blog/day_309__filenames.mdwn | 17 + .../assistant/blog/day_310__release_day.mdwn | 18 + ..._1e008583cebd8e373e83729529914db7._comment | 8 + .../blog/day_311__Windows_porting.mdwn | 10 + ..._8e738f54a72557bee1e19970472b925c._comment | 8 + .../blog/day_312__DebConf_midpoint.mdwn | 30 + doc/design/assistant/blog/day_313__back.mdwn | 34 + ..._fbf3fdf9688c18156753d446facd942d._comment | 10 + doc/design/assistant/blog/day_314__quvi.mdwn | 27 + ..._3fdfb0742cb5422530ddd97b904f2a42._comment | 8 + .../assistant/blog/day_315__backlog.mdwn | 12 + .../assistant/blog/day_316__day_off.mdwn | 6 + doc/design/assistant/blog/day_317__misc.mdwn | 17 + .../blog/day_36__minimal_test_case.mdwn | 9 + doc/design/assistant/blog/day_37__back.mdwn | 64 + .../blog/day_39__twice_is_enemy_action.mdwn | 66 + .../assistant/blog/day_3__more_races.mdwn | 26 + ..._d6015338f602b574a3805de5481fc45e._comment | 8 + ..._4d6b23fc6442e0ee0303523cb69d0fba._comment | 8 + ..._03f5b2344c2a47dea60086f217d60f9b._comment | 14 + ..._860e90e989ec022100001c65e353a91e._comment | 8 + doc/design/assistant/blog/day_40__dbus.mdwn | 100 + ..._43ed2a79629868b018ec9f54a32bcacc._comment | 12 + ..._6799f2baf6a6ce14b1fa76a8402840c0._comment | 10 + ..._fa1d7444bdafcb990cacf2ace7ee6ef1._comment | 10 + ..._3399ddad951c1a950281bb6941fc3f6f._comment | 8 + ..._40b6b9d741d3081203f0cc94eb8dc3ea._comment | 12 + doc/design/assistant/blog/day_41__foo.mdwn | 46 + ..._ace21fa257a4c2fd412b6ff2944a23e8._comment | 10 + .../assistant/blog/day_42__the_answer.mdwn | 27 + .../blog/day_43__simple_scanner.mdwn | 37 + .../assistant/blog/day_44__webapp_basics.mdwn | 83 + ..._d5fb67f373038e9f583cb2e1992bef67._comment | 18 + .../assistant/blog/day_45__long_polling.mdwn | 66 + ..._994bec0978324e268666073e8ff4f6ae._comment | 8 + ..._dfa164c86290899139491acccddd8b2b._comment | 10 + .../blog/day_45__long_polling/full.png | Bin 0 -> 55185 bytes .../blog/day_45__long_polling/phone.png | Bin 0 -> 41602 bytes .../blog/day_46__notification_pools.mdwn | 68 + .../blog/day_47__alert_messages.mdwn | 14 + doc/design/assistant/blog/day_48__intro.mdwn | 8 + .../blog/day_49__first_run_experience.mdwn | 39 + ..._e146cf06c8dd6303dd6a991f152a73fe._comment | 8 + ..._5d6adcf6782c02283bef6189582ee467._comment | 12 + ..._7ac2e34c2a7bc9b57488ca0c91307d32._comment | 14 + ..._549b07bb02c07a5b1b95445b01758db2._comment | 14 + doc/design/assistant/blog/day_4__speed.mdwn | 47 + ..._bf3c9c33cc0dea5eaeb6f2af110b924b._comment | 8 + ..._33aba4c9abaa3e6a05a2c87ab7df9d0e._comment | 8 + .../blog/day_50__directory_name.mdwn | 20 + ..._782cec95a8558a05b2b38a2d2302214d._comment | 8 + ..._2b8ceb0a26f25e8ed2711bcbe7225a58._comment | 8 + .../assistant/blog/day_51__desktop.mdwn | 34 + .../assistant/blog/day_52__file_browser.mdwn | 21 + ..._cd000c2d56b60cc1f17b221322a32aa7._comment | 8 + ..._21d1da67cf9105a545583ba2302c10fb._comment | 7 + .../blog/day_54__adding_removable_drives.mdwn | 99 + ..._5de4f220a3534f55b1f2208d1d812d63._comment | 10 + ..._8dae1ed0a70acf9628b88692dc32ac5f._comment | 10 + doc/design/assistant/blog/day_55__alerts.mdwn | 10 + ..._6319045500a8a5e049304fdec5ff4cf4._comment | 8 + .../blog/day_56__transfer_control.mdwn | 8 + doc/design/assistant/blog/day_57__afk.mdwn | 40 + ..._70e1c9f925f040c1700d3e26bab373d5._comment | 9 + ..._c70d3faccfcebf47deb25e270498cb56._comment | 18 + ..._89020ebc6d31485339bdea41a872df3c._comment | 11 + ..._8b1f65f141ffd9813e7f5a3380f7f520._comment | 27 + .../blog/day_58__more_transfer_control.mdwn | 26 + doc/design/assistant/blog/day_59__dinner.mdwn | 10 + ..._0c1e2d69496473e7e4a2956a2814f5dd._comment | 9 + .../assistant/blog/day_5__committing.mdwn | 57 + .../assistant/blog/day_60__taking_stock.mdwn | 40 + ..._6722f81ee084f1ea9e8fe47f34576397._comment | 8 + .../day_61__network_connection_detection.mdwn | 36 + ..._09b58f41a8d48f218619711ee19511ac._comment | 8 + .../blog/day_62__smarter_syncing.mdwn | 21 + .../blog/day_63__transfer_retries.mdwn | 26 + ..._990d4eb6066c4e2b9ddb3cabef32e4b9._comment | 10 + .../blog/day_64__syncing_robustly.mdwn | 33 + .../blog/day_65__transfer_polish.mdwn | 33 + .../assistant/blog/day_66__the_merge.mdwn | 19 + ..._eeccf4e73cc321542a1fe4780805a81e._comment | 12 + ..._a34e89316d1662826848f31061c4e46b._comment | 8 + ..._09e244d23d05052fa2b11a7181888366._comment | 8 + ..._3961a03e167903959b96b054835613f6._comment | 8 + ..._12a57af9f580918818b4a9f68396d5c4._comment | 23 + ..._8ce638960012367c888e018a5f05db19._comment | 8 + ..._f461b856b940e6914bcd2b681cf9505f._comment | 13 + ..._6e73aca1fc1747d0e742e054b88b5d78._comment | 12 + ..._d85f1ce23ae16d5a8eb88d2c3999acb7._comment | 19 + ..._c06dab4d78122c85beeaf300ffc3e376._comment | 8 + .../assistant/blog/day_67__progress_bars.mdwn | 10 + .../assistant/blog/day_68__transfers.mdwn | 15 + ..._5282960c0b553fbc0f411345b9745324._comment | 14 + .../assistant/blog/day_69__build_fixes.mdwn | 7 + doc/design/assistant/blog/day_6__polish.mdwn | 50 + .../blog/day_70__adding_ssh_remotes.mdwn | 66 + ..._2fac85357ac8feccff82beabd3791439._comment | 13 + ..._e9e496005fd1bf5a10c9e286b83e51fa._comment | 8 + ..._913e6ae7c8f7db90b9767ec35fc84205._comment | 23 + ..._634ca3c236e2062289e7df5f0d77a3c5._comment | 8 + ..._e365bbcbb7f66ce2b35fcd5b969ab315._comment | 16 + ..._b15499722a655489f9ea60ff9d4c47c6._comment | 12 + ..._8ea48276f060e75d9f40617d2a1ccd08._comment | 12 + ..._9b8bf7e9fa715977fbeb98087deefd1a._comment | 10 + ..._42e09eacdc10c7cf579bfc6470b5117c._comment | 8 + ..._6c02f31063b3d399d1b4f823bd6543ce._comment | 16 + ..._dd0447cb3b39d3a8c1a7cc00f17d8bc2._comment | 10 + .../assistant/blog/day_71__ssh_probing.mdwn | 26 + ..._56a0c29f7454cfca5cc30b2849e6e942._comment | 8 + ..._f3bd3e366c92c833c7e217da125481b8._comment | 8 + ...mote_ssh_server_configurator_finished.mdwn | 34 + .../blog/day_73__rsync.net_configurator.mdwn | 17 + .../blog/day_74__bits_and_peices.mdwn | 7 + .../blog/day_75__zeromq_and_pairing.mdwn | 50 + .../assistant/blog/day_76__pairing.mdwn | 16 + ..._09665f269343422cd18051fad1a8c19e._comment | 24 + ..._8e1b2233579bc26bfd758bbf6b3bdc07._comment | 10 + ..._a8b6a8432da20c468c633da8e7cbc2f3._comment | 8 + ..._36a428a2e1803f4391b821d1892f0cd7._comment | 10 + ..._11f332fe2050d8c1416e71f9e85ba280._comment | 8 + ..._973aeb656b78eca97474ea1a3f5b57b7._comment | 12 + ..._03d2b3343f34377a4d6171e06b7609f6._comment | 8 + .../assistant/blog/day_77_alert_buttons.mdwn | 21 + .../blog/day_78__pairing_continued.mdwn | 8 + .../blog/day_79__pairing_finished.mdwn | 33 + .../assistant/blog/day_7__bugfixes.mdwn | 45 + .../blog/day_7__bugfixes/profile.png | Bin 0 -> 47098 bytes .../blog/day_7__bugfixes/profile2.png | Bin 0 -> 230937 bytes .../blog/day_80__default_backend.mdwn | 14 + ...enabling_pre-existing_special_remotes.mdwn | 34 + .../blog/day_82__git-annex_branch_work.mdwn | 26 + doc/design/assistant/blog/day_83__3-way.mdwn | 73 + .../blog/day_84__deferred_downloads.mdwn | 33 + .../blog/day_85__more_foundation_work.mdwn | 17 + .../blog/day_86__towards_the_beta.mdwn | 33 + .../blog/day_87__more_progress_progress.mdwn | 28 + ...ay_88__progressbars_still_progressing.mdwn | 18 + .../assistant/blog/day_89__final_polish.mdwn | 24 + doc/design/assistant/blog/day_8__speed.mdwn | 67 + ..._a3dba537b276d5737abc8cb93f1965f4._comment | 10 + doc/design/assistant/blog/day_90__beta.mdwn | 16 + ..._5f2a3b18ad7558abe04f51534a29ff13._comment | 9 + ..._961c4eba97f4eac75174244d6b2b00c0._comment | 8 + ..._c76675a4633cbbe347ed42c222918d38._comment | 24 + ..._f0b8f77cb691e747fe35bcf2f51b5baa._comment | 8 + ..._99fbc9feac62e66a12b0d357cf86ccc1._comment | 8 + doc/design/assistant/blog/day_91__break.mdwn | 7 + doc/design/assistant/blog/day_92__S3.mdwn | 23 + ..._eda656247d11cea7fbed2e33137a39e5._comment | 10 + ..._8249d2d9521e44c674da3fda74be077a._comment | 10 + .../blog/day_93__OSX_standalone_app.mdwn | 23 + .../assistant/blog/day_93__easy_install.mdwn | 34 + ..._d4f7de723c98577ef28d89ee6b87fd13._comment | 10 + ..._6337b341c1cfb2132b59704394e57b36._comment | 8 + .../blog/day_95__repository_groups.mdwn | 21 + .../blog/day_96__revisiting_file_adds.mdwn | 24 + ..._da3ca47041168b6c82aeb2c18acc5017._comment | 8 + .../assistant/blog/day_97__stuffing.mdwn | 14 + .../blog/day_98__preferred_content.mdwn | 44 + ..._2136618e3515d0ac6369a41f1934ec2a._comment | 17 + ..._5f6db00e69628bf2f72b0e6f2981a49b._comment | 14 + doc/design/assistant/blog/day_99_shotgun.mdwn | 70 + ..._12bb8f54bb13ea20ac4187a2301d77ca._comment | 10 + .../assistant/blog/day_9__correctness.mdwn | 30 + ..._564a39cb976767e2c0a9c74fabe10be4._comment | 8 + ..._77924e9d50b40f05e792e427a25849a6._comment | 9 + ..._92bd86cd06d579e23800af2e5c66a291._comment | 8 + ..._0d12b51ccdfc2a94d3e59a5628521e0a._comment | 10 + ..._208f9dd3e1d92555b05c29159538a901._comment | 14 + ..._90cc6b60718896fb175919417600fdf9._comment | 8 + doc/design/assistant/chunks.mdwn | 7 + doc/design/assistant/cloud.mdwn | 45 + ..._4997778abc171999499487b71b31c9ba._comment | 16 + ..._08da8bc74a4845e354dca99184cffd70._comment | 8 + ..._faafd1266301997b1822d215ec8e8d8c._comment | 8 + ..._3eb557d5439831f6e0032944d12c02cf._comment | 12 + ..._f2233fad55c20686cf299bf6788f1f23._comment | 10 + ..._a38f0f21c2346e65b786d791b6829f9b._comment | 12 + ..._5e991177d6577384f39a36ae02f5f574._comment | 13 + ..._f8625c6f43b58847840df338a73b7972._comment | 7 + ..._c37ef5931b0f5c1f808083e0d636a208._comment | 11 + ..._68c98a27083567f20c2e6bc2a760991b._comment | 9 + ..._8e6788c817c60371d2a2f158e1a65f87._comment | 8 + ..._97bdfacac5ac492281c9454ee4c0228e._comment | 8 + ..._53137b2df4913496c0afb2d895aa4ee2._comment | 8 + ..._ff1b0ba57e22ed757ec3fc5400b5e43e._comment | 8 + ..._a48fcfbf97f0a373ea375cd8f07f0fc8._comment | 8 + ..._099da245e3276fa84f5e14312d186621._comment | 8 + ..._6d3552414fdcc2ed3244567e6c67989d._comment | 7 + ..._05223be50c889b2ed6bc4abf74116450._comment | 9 + ..._fbbd93b55803ae21e6ba4b6568c2fafd._comment | 9 + ..._f4e9af3fed6c27e8ff39badb9794064d._comment | 12 + ..._c7ad07cade1f44f9a8b61f92225bb9c5._comment | 10 + ..._609d38e993267195a80fecd84c93d1e2._comment | 8 + ..._22b818e1a2a825efb78139271a14f944._comment | 10 + ..._d052e2142da8b4838fb1edf791ea23ae._comment | 10 + doc/design/assistant/configurators.mdwn | 20 + doc/design/assistant/deltas.mdwn | 9 + ..._bdb477af913c9782c0e8509e6b294b6e._comment | 8 + ..._71889d15ba20ebb0fe13080c68162a5b._comment | 11 + doc/design/assistant/desymlink.mdwn | 145 + ..._f1bfe250b7f872359f7075998b6e42e3._comment | 11 + ..._5e876edfe9853645f761b5ed9b5021aa._comment | 9 + ..._538561d74371e53c2f8df7f5ebdf58a8._comment | 8 + ..._586ecaa800e6c162377c937da5e65440._comment | 12 + ..._8fc703de67814cf2aec2a908852298a4._comment | 10 + ..._1b473ad89494afb82250af4b6df5f5c9._comment | 22 + doc/design/assistant/disaster_recovery.mdwn | 185 + ..._955dc807196863da23aa8dbd15e04364._comment | 10 + .../assistant/encrypted_git_remotes.mdwn | 22 + doc/design/assistant/gpgkeys.mdwn | 37 + doc/design/assistant/inotify.mdwn | 196 + ..._3d3ff74447452d65c10ccc3dbfc323cd._comment | 7 + ..._a3c0fa6d97397c508b4b8aafdcee8f6f._comment | 7 + ..._b346e870c1cd80e4b0a313c3a9fed6b3._comment | 8 + ..._32be58b4c3b17a4ea539690d2fb45159._comment | 12 + ..._0cdd3046d90ad2012025d846ece0731e._comment | 8 + ..._e197d5d0d853572ec1f2e5985762e60d._comment | 9 + doc/design/assistant/leftovers.mdwn | 17 + ..._b20c88bb3c583a32023c1f6b6dc9486d._comment | 8 + .../assistant/more_cloud_providers.mdwn | 24 + doc/design/assistant/pairing.mdwn | 83 + doc/design/assistant/partial_content.mdwn | 36 + ..._58c4faa321a5bb71adf9fdee079849f4._comment | 18 + doc/design/assistant/polls.mdwn | 1 + .../assistant/polls/2013_user_survey.mdwn | 1 + doc/design/assistant/polls/Android.mdwn | 18 + ..._fa6c409833f28c67da105d25f4a440e0._comment | 8 + .../polls/Android_default_directory.mdwn | 7 + ..._d39655091ac3ed51a9d4325d86b23ad7._comment | 10 + ..._2f1eaae95075db26488517720afd1c63._comment | 8 + ..._b484012f60789be73d7d5b338cff6203._comment | 10 + .../assistant/polls/goals_for_April.mdwn | 17 + ..._9f81fa96db5970a4be0828c74a6d2d55._comment | 22 + ..._d8956d220ccacff3d2f6cbeb15718459._comment | 28 + ..._aadad6dfd56d068d2e377606910c006f._comment | 8 + .../polls/prioritizing_special_remotes.mdwn | 16 + ..._dd9280df27848a7ff132f5809dab0a79._comment | 8 + ..._370e0b9c43486ee96c825f9155eebde4._comment | 8 + ..._883a003b9c552b89f191135c582f99aa._comment | 14 + ..._746006c3fffc7f917c4526fd688051f7._comment | 8 + ...ing_me_from_using_git-annex_assistant.mdwn | 16 + ..._10a4839a05be39ced54ffbe880a588bb._comment | 25 + ..._ac91d866f11c66dd8c86e2cd1a368c85._comment | 10 + ..._e244c1bf334b1cc9ad0cc760bf8fe5de._comment | 29 + ..._1a0faf4bdc78741937e8a2f5cb5bbec6._comment | 12 + ..._8d8a11dbfae7a7bc574bdf37f87e0684._comment | 16 + ..._c437adeaccf0b3d134e0f81c64e25b9f._comment | 14 + ..._6e3fce3a32ab346dc3d0fd4b69967536._comment | 8 + ..._1b7233d88593d0d99b26ea3e7af20d9c._comment | 8 + ..._a23d5a0e2718b8e486f036fe8a413b36._comment | 10 + ..._f4c84a9d701d52cf2f2e45f3d764a90c._comment | 18 + ..._00a0de8190d946caaeeca3b44646146f._comment | 16 + ..._199c9807499470771af6cbca6d034cfa._comment | 8 + ..._35f6f121e54260cb960211a6e2e51e8e._comment | 14 + ..._acbe4f63b5d552ac5ae5a12c6f42dc18._comment | 25 + ..._0d988280865caae498a3b693b6342e37._comment | 16 + ..._ac8fe3768c30dd7999c183500f8567bb._comment | 19 + ..._36832de705a2bebf8dc6e65dcd661731._comment | 15 + ..._3618067e473577a112e36970ca71e0ab._comment | 12 + ..._07a13b6f000ddc0ac4472b863d8b50bd._comment | 14 + ..._e15eb407d988fda363296c8b566cc8fb._comment | 12 + doc/design/assistant/progressbars.mdwn | 43 + ..._3ea263b1f334e8e38e14f00a96202988._comment | 8 + doc/design/assistant/rate_limiting.mdwn | 57 + doc/design/assistant/screenshot/firstrun.png | Bin 0 -> 54347 bytes doc/design/assistant/screenshot/intro.png | Bin 0 -> 50730 bytes doc/design/assistant/sshpassword.mdwn | 12 + doc/design/assistant/syncing.mdwn | 260 + ..._c70156174ff19b503978d623bd2df36f._comment | 19 + ..._eb992b5b2c7a5ce23443e2a6007e5ff9._comment | 8 + ..._e1b5e8a24556de16d1cacd27ee0c1bd1._comment | 80 + ..._8b08b5c30e5aea3fc4599f856fd25df5._comment | 8 + doc/design/assistant/todo.mdwn | 4 + doc/design/assistant/transfer_control.mdwn | 123 + ..._d5adaef4712913dc0263d4ebafb79320._comment | 15 + doc/design/assistant/upgrading.mdwn | 52 + doc/design/assistant/webapp.mdwn | 65 + ..._bab6f6fa720273c0f9700a3765150189._comment | 8 + ..._3cf0cf460c7869d0cc22940fcc84aec4._comment | 10 + ..._428e153135f7a64215730719207d82c4._comment | 8 + ..._f4068a7abbb77ba6a3297cbcf1e503e9._comment | 10 + doc/design/assistant/windows.mdwn | 33 + ..._f4b829318b182e1cec29f13babb6498e._comment | 10 + doc/design/assistant/xmpp.mdwn | 136 + ..._f20650f93d7f0ca39b9ba3ce0380193f._comment | 10 + ..._8c22839a8f5912b4a817415c4a359697._comment | 8 + ..._773102522f21844cffc841e6cde9229e._comment | 8 + doc/design/assistant/xmpp_security.mdwn | 26 + ..._c714e86553c02600249795efb224be8a._comment | 10 + doc/design/encryption.mdwn | 126 + ..._4715ffafb3c4a9915bc33f2b26aaa9c1._comment | 12 + ..._a610b3d056a059899178859a3a821ea5._comment | 10 + ..._cca186a9536cd3f6e86994631b14231c._comment | 12 + ..._8f3ba3e504b058791fc6e6f9c38154cf._comment | 10 + ..._520e60aa53217b5ba428d4c05d897dee._comment | 16 + ..._d677fead0fe0c543f48f07d85f83f592._comment | 14 + ..._c1c38a09b1276e29adc3ba564dc0fe4e._comment | 14 + doc/design/gcrypt.mdwn | 8 + doc/design/roadmap.mdwn | 18 + doc/devblog.mdwn | 10 + doc/devblog/day_-1__drop_dead.mdwn | 5 + doc/devblog/day_-3__.mdwn | 29 + doc/devblog/day_-4__forgetting.mdwn | 80 + ..._f3cc7a25af4c59fda3924c737a789419._comment | 8 + doc/devblog/day_10__lazy_Sunday.mdwn | 23 + .../day_11__webapp_encrypted_drives.mdwn | 12 + doc/devblog/day_12__gpg_key_generation.mdwn | 35 + ..._48cdfe3bd71fb348ae05fd90e8cf1dab._comment | 8 + .../day_13__encrypted_sneakernet_working.mdwn | 13 + ..._14__gcrypt_refinements_and_OOM_fixes.mdwn | 26 + doc/devblog/day_15-17__Android_rebuild.mdwn | 67 + doc/devblog/day_19__moving_on.mdwn | 37 + ..._870106f671f9a055b81e6fc83e0850b5._comment | 8 + ..._fad055c8860385ac6c012f897c96408f._comment | 10 + ..._69e47d612159587f080ab761566d1830._comment | 18 + .../day_1__inauspicious_beginning.mdwn | 11 + ..._cc4dea43caf3126c6f814b589b701d70._comment | 10 + .../day_20__gcrypt_and_git-annex-shell.mdwn | 14 + doc/devblog/day_21__bugfix_day.mdwn | 5 + doc/devblog/day_22__gcrypt_on_rsync.net.mdwn | 20 + doc/devblog/day_23__GNU_day.mdwn | 23 + .../day_24__nearly_done_with_gcrypt.mdwn | 23 + doc/devblog/day_25__finishing_up_gcrypt.mdwn | 25 + .../day_26__gcrypt_really_done_this_time.mdwn | 17 + doc/devblog/day_27__locking_fun.mdwn | 49 + ..._0eb247235fbf8f563934f3548e1d2e10._comment | 8 + ..._e8b1dfe1b0641e031d05733448b7bc8b._comment | 8 + ..._b67f8ef4ed42b49c8c2e6c4e53163b16._comment | 18 + ..._0759644baf26b75f4e48dbb387d725a5._comment | 10 + doc/devblog/day_28__lazy_saturday.mdwn | 17 + doc/devblog/day_29__scheduling.mdwn | 10 + doc/devblog/day_2__new_laptop.mdwn | 8 + ..._93447dbd4eb09b4db96770644ea663cb._comment | 10 + ..._e1d022b25f2c16dbe72db07ad4b10a2d._comment | 8 + doc/devblog/day_30__cronner.mdwn | 17 + ..._53dfd9310e92f5225db52a13e20a46d4._comment | 10 + ..._f98357c6f7a6da23873ac27c2e1e9638._comment | 10 + doc/devblog/day_31__blah.mdwn | 17 + doc/devblog/day_32__fsck_config_UI.mdwn | 20 + doc/devblog/day_33__fsck_on_connect.mdwn | 9 + doc/devblog/day_34__wrapping_up_fsck.mdwn | 7 + .../day_35__anacron_and_bugfixing.mdwn | 15 + doc/devblog/day_36__bugfixing.mdwn | 1 + doc/devblog/day_37__long_day.mdwn | 6 + .../day_38__starting_git_repo_repair.mdwn | 11 + ..._321468d9686db5dde072500bdaeb7d29._comment | 10 + .../day_39__git-recover-repository.mdwn | 54 + doc/devblog/day_3__gcrypt_uuids.mdwn | 63 + doc/devblog/day_40__another_fine_mess.mdwn | 15 + doc/devblog/day_41__onward.mdwn | 17 + ..._a716c7b5a9ea3c949ff047cfb4e9a0a4._comment | 8 + ..._33149e424cd5f03fac376288bcc4dfdc._comment | 8 + ..._3b07503bd79089ad3ce3ddd7535ed116._comment | 14 + doc/devblog/day_42__repair_milestone.mdwn | 35 + doc/devblog/day_43__bugfix_day.mdwn | 26 + ..._44__automatic_removable_drive_repair.mdwn | 16 + doc/devblog/day_45__command_line.mdwn | 9 + .../day_46__wrapping_up_the_month.mdwn | 18 + .../day_47__fell_off_the_blogging_wagon.mdwn | 3 + .../day_48__direct_mode_guard_design.mdwn | 29 + ..._ec0147ccc55bad3a38652383f4098a65._comment | 8 + ..._49__direct_mode_guard_implementation.mdwn | 14 + ..._3ebe5c3f708070f164ecaf36b79f7bfc._comment | 8 + .../day_4__unexpected_windows_day.mdwn | 10 + doc/devblog/day_50__grab_bag.mdwn | 34 + ..._01846f6494fe843889391fd09fd127a0._comment | 8 + ..._12736014aa2c1af81e4b83072505e7d5._comment | 8 + .../day_51__direct_mode_guard_finished.mdwn | 6 + doc/devblog/day_52__slowly_but_surely.mdwn | 5 + .../day_54__android_bisection_minions.mdwn | 9 + ..._bea8fbe2b87d4a4865b92fa796298fa0._comment | 8 + doc/devblog/day_55__fireside_porting.mdwn | 22 + ..._d690a52db82f9594d99ae65fe51e1f1a._comment | 8 + .../day_56__git-annex_user_survey.mdwn | 20 + doc/devblog/day_57__mavericks.mdwn | 14 + doc/devblog/day_58__urgle.mdwn | 16 + ..._bd279f58f614b103a53215dfb0211007._comment | 12 + doc/devblog/day_59__release_day.mdwn | 11 + .../day_5__gcrypt_special_remote_part_1.mdwn | 7 + .../day_60__damage_driven_development.mdwn | 36 + ...day_61__damage_driven_development__II.mdwn | 15 + doc/devblog/day_62__upgrade_alerts.mdwn | 22 + ..._cdb44aaa1d2a784a72613cbf16038f89._comment | 8 + ..._b08bb946e4760d7f03b45c852c745b2e._comment | 8 + doc/devblog/day_63__leverage.mdwn | 24 + doc/devblog/day_64__overkill.mdwn | 31 + ..._e1db7678aae37af281d31ae211677786._comment | 10 + ..._f7a96f0b6d942d0b59d9d0ec1b21c4bf._comment | 8 + doc/devblog/day_65__wrapping_up_upgrades.mdwn | 5 + doc/devblog/day_66__upgrade_testing.mdwn | 17 + doc/devblog/day_67_thanksgiving_rush.mdwn | 19 + doc/devblog/day_6__gcrypt_fully_working.mdwn | 8 + ..._136bb7537a9ba93d400ce6f6ea1932ac._comment | 8 + ..._1f8faa65bbd56a12588b43a5bc822d96._comment | 10 + doc/devblog/day_7__release_day.mdwn | 10 + ..._12bb94d903868ecddb3e348c9c4afeaf._comment | 8 + ..._d3e38d6f6bba179dab40d4d75ff061de._comment | 8 + doc/devblog/day_8__ill.mdwn | 20 + doc/devblog/day_9__Friday_the_13th.mdwn | 21 + ..._07195b4ec399ba1be6c8bdb3ae0fa50b._comment | 12 + doc/devblog/moving_blogs.mdwn | 5 + ..._6caa7e67461a6ea5de8155ae9cf75fab._comment | 8 + ..._e3e2048fc2397b87a2f29c9fe49394cb._comment | 10 + doc/direct_mode.mdwn | 93 + ..._1c79c93f4b17cfc354ab920e3775cc60._comment | 26 + ..._1b5218fdb6ee362d6df68ff1229590d4._comment | 10 + ..._55108ac736ea450df89332ba5de4a208._comment | 12 + ..._ff4ffc2aabc5fd174d7386ef13860f78._comment | 10 + ..._1cd32456630b25d5aaa6d2763e6eb384._comment | 8 + ..._8020d74bddf0e38b0a297e5dae7c217b._comment | 12 + ..._97c26bd82f623a3b2d56bab4afff0126._comment | 12 + ..._42363bf0367f935b3eee8ad3d2eaf5cf._comment | 10 + ..._5f03b1686c1fb3f7606a5bc724ac3812._comment | 8 + ..._5355ac418bfb26e990762b80f4c36b77._comment | 12 + ..._6cd15e2c5fd0bef48f60c6993322c2fc._comment | 9 + doc/distributed_version_control.mdwn | 21 + doc/download.mdwn | 40 + ..._ec2578241a966cfcdd43f2a26a5c8709._comment | 13 + ..._ee0d158ac59903737dbc4ef632f11fe3._comment | 7 + doc/ekg.mdwn | 14 + doc/ekg/ekg.png | Bin 0 -> 57392 bytes doc/encryption.mdwn | 101 + ..._1afca8d7182075d46db41f6ad3dd5911._comment | 10 + doc/favicon.ico | Bin 0 -> 405 bytes doc/favicon.png | Bin 0 -> 714 bytes doc/feeds.mdwn | 4 + doc/footer/column_a.mdwn | 7 + doc/footer/column_b.mdwn | 7 + doc/forum.mdwn | 8 + ...s_to_delete__44___files_to_keep__63__.mdwn | 12 + ..._fe291cd6cd8e2d5b8e23f8e3689d824b._comment | 15 + ..._f0dbc3c723999bf0f22502e3a89d1d4a._comment | 8 + doc/forum/A_really_stupid_question.mdwn | 3 + ..._40e02556de0b00b94f245a0196b5a89f._comment | 31 + ...ssing_files_directly_on__a_USB_device.mdwn | 11 + .../Accessing_files_in_bare_repository.mdwn | 5 + ..._7eb66e3806f9524e043fae2da9d57d64._comment | 10 + ..._f0165d66865ad14f7eb5d50e900c1df4._comment | 10 + ..._0e7ea5161b6da6e9bb9425bdb953de33._comment | 8 + ..._f804b9bf71f7d04bd23ce32d813dc340._comment | 8 + ..._6de649d38febd2240eb5b703da77c2d6._comment | 15 + ..._7e8dd09915ddc3267377e900891cb02c._comment | 24 + ..._80eae4a73f38d1a7e35f97c33b6401f8._comment | 8 + ..._5ec13e98d3ecb69426e974d34f712f9b._comment | 8 + ..._dccbf5793998c6381e23eb8ff6497ebf._comment | 17 + ..._42d923916232c81f3b8bdbefa34a89d3._comment | 18 + ..._43a0a7d222faee582aeb3150a59cef87._comment | 8 + ..._ec1024235c1c74c113483a833df84654._comment | 12 + ..._c156b8c1ae0f2905566bbdb13b84e577._comment | 37 + ...__and_crippled__41___annex_repository.mdwn | 28 + ...ect_mode_sync_should_avoid_git_commit.mdwn | 1 + ..._06dae5709750ea1da4f7fdbee4e84efc._comment | 16 + ..._2069c5c41882ae0a1973fb7da583b60e._comment | 10 + ..._b35e3a87c30974eedd71ebe52ecbed96._comment | 8 + ..._84e026f9bda87bfd12a3769dcef77f8b._comment | 8 + ..._ed3534196164c6736a8dbf21c65c119d._comment | 10 + ..._1e29bcf568f02765c48f0eac6c640673._comment | 45 + ..._9ea6803a94b1de15079a3fa20d59c9af._comment | 10 + ..._3fae5a7fa5d99d0eb4473adb43e7f6f5._comment | 8 + ..._57a5b73cff480266355e75c7bdc762c2._comment | 8 + ..._bbcf5e863c8f152e1079536e9011a404._comment | 16 + ..._fdcd144c22601bdf98ff844254b0120d._comment | 8 + ..._b77243e765b2af7ba71e963fcb5cbbb1._comment | 71 + ..._cb0815e96ee211d4778f2e7a4274e855._comment | 8 + doc/forum/Add_a___34__local__34___remote.txt | 13 + ..._c68ad724b465c4be5243be687168c0b3._comment | 12 + ...dding_existing_S3_bucket_to_sync_with.mdwn | 16 + ..._30b9a70d367dd5b8781e9a86e42d4c3e._comment | 10 + ..._a8525c1a7e5f89c30c9503fe8bfed02e._comment | 8 + ..._c3878989f74e740c0ed42f440750f3a4._comment | 8 + ..._c06cc86496f9d4c0c42a8c89aa5a7b35._comment | 8 + ..._0a1c2dd0929511ff824be8de2c8d85eb._comment | 9 + ..._1444c2f89885f028f20a4d3ce225a403._comment | 23 + ..._1c30944010d541096baff18198a5560d._comment | 23 + ...t_high_cpu_usage_to_be_expected__63__.mdwn | 3 + ..._7880fc38792a1fcbf3e5c47e8bcaabce._comment | 8 + ..._840fbce18b4fdec21ee557fdf52c366e._comment | 10 + ...Annex_contents_just_disappeared__63__.mdwn | 12 + ..._4ab5ca00f912c0c95fabc10f2d9600d3._comment | 12 + ..._657f737c5d64d440aa133ddb41408fbc._comment | 8 + ..._9b4c35feb14b37d43d053d7430da9abf._comment | 12 + ..._c3625409652bff5f2165260803269a8a._comment | 10 + doc/forum/Annex_dropping_files.mdwn | 12 + ..._62fbea95248fda2ff075b5a8952a728f._comment | 8 + doc/forum/Assistant:_configure_auto-sync.mdwn | 11 + ..._c8cabd38114582bbdbad49f2d81959d7._comment | 13 + doc/forum/Assistant_not_syncing_to_Rsync.mdwn | 15 + ..._2178a7fc0d66643e84597b0938ef65f2._comment | 10 + ..._650651398443e128c2adc6a2a2d320d0._comment | 12 + ..._e6d0c9620b148acc72342862a8b4cfef._comment | 10 + ..._b91f9febdb8b69d8b487ba4ea08c119a._comment | 11 + ..._c5ad7c1546a17d8459c995c9c8c26414._comment | 31 + ..._4c12587f972eced91c5128d4885800b5._comment | 30 + ..._6ecaaee9316bcf0c65688676d60fc055._comment | 8 + ..._daa9a9a6188afa0394833e1b682f7cd4._comment | 10 + doc/forum/Auto_archiving.mdwn | 17 + ...es_due_to_external_modification__63__.mdwn | 46 + ..._dab1099ee56541c194de319c593f1268._comment | 9 + ..._b5faccf132fb47e3cda778a6600fd9ef._comment | 8 + ...ic_commit_messages_for_git_annex_sync.mdwn | 1 + ..._ea2ec57bc695da4df8a30a35d433959d._comment | 15 + ..._af71f53dbbca35d5a5c66ff131887ada._comment | 8 + ...lly_syncronise_centralised_repository.mdwn | 14 + ..._6a2047daa9faf4309d2ed27d5cc48b76._comment | 10 + ..._3be7b45bc2284019f17a81375637a576._comment | 10 + doc/forum/Behaviour_of_fsck.mdwn | 13 + ..._0e40f158b3f4ccdcaab1408d858b68b8._comment | 8 + ..._ead36a23c3e6efa1c41e4555f93e014e._comment | 19 + ..._97848f9a3db89c0427cfb671ba13300e._comment | 19 + ..._e4911dc6793f98fb81151daacbe49968._comment | 8 + ...manage_files_on_removable_media__63__.mdwn | 18 + ..._direct_and_crippled_annex_repository.mdwn | 17 + ..._552e74f9573a34ec178f396b83252c3e._comment | 12 + ..._33c57922714f204fc63c260b838f3712._comment | 8 + ...sn__39__t_been_working_for_a_few_days.mdwn | 72 + ..._6ca872c241399b9129cf9a18f42ebd43._comment | 8 + ...uilding_a_Debian_package_of_git-annex.mdwn | 27 + ..._0848513c46f3efa21bc34784554ae88a._comment | 10 + .../Building_git-annex-3.20121112-19309.mdwn | 78 + ..._b115e28c77fe748ee6643c41f766beb4._comment | 12 + ..._8c6ae1fd74f14da12ccfa77dbd27fc65._comment | 16 + ..._2f30b301c14f3a7fa0f52715d6140353._comment | 13 + ..._1e3c3903a71a2ff7109372aa4dd5742a._comment | 8 + ...esolve_dependencies___40__yesod__41__.mdwn | 19 + ..._2eb4f410b54a25fcc895893a3c631c43._comment | 8 + ..._44cd6f6dd674df105d6f0b3f320f3236._comment | 19 + ..._992af6855901df79a2018a07941cb8b6._comment | 8 + .../Calculating_Annex_Cost_by_Ping_Times.mdwn | 1 + ..._9b4a6bc8d52ecbbdd537e8cf76757a80._comment | 15 + ..._7e04f85c6ba74c18c8dde148aef9bf80._comment | 8 + ...in_the_git-annex_git_repository__63__.mdwn | 6 + ..._c8f9923d8dc76b8bed25dce5ae09b520._comment | 8 + ...git-annex_merge_to_work_from_git_hook.mdwn | 41 + ..._8b71cb6772b219c27c17392d5099907a._comment | 12 + ..._af2a2634d8d128868022d033d6adb549._comment | 13 + ..._31ec762a0684d2ce87d229ed2924db93._comment | 16 + doc/forum/Can__39__t_get_pairing_to_work.mdwn | 5 + ..._b981977b4fb942fd109c37fcf40f35d7._comment | 22 + ..._341e2ff6c88ace1b1422e16781edf580._comment | 8 + ..._0c8cce48f179f2564ff0844bb7ef6bd1._comment | 8 + ..._169d77b30cea05125068ee1eeb2ef328._comment | 25 + ..._70e6c4f4f01277be1767b38ca8374793._comment | 11 + ..._2cd014a76fac6e08269dfd8146957418._comment | 10 + ..._b9b715084d5a5562998b1724699d49e5._comment | 8 + doc/forum/Can__39__t_init_git_annex.mdwn | 15 + ..._c4d2ab1ecf69718a2211c3ea7b27092b._comment | 10 + ..._fca9ed3707e097bee2cd642424681005._comment | 8 + ..._a294b5e7e52aa9f66a708866be16f137._comment | 10 + ..._fcf678d5188821d63b4c9ea5b59474a8._comment | 13 + ..._c83f7dea7d5304e226e52eb3c43ef14a._comment | 9 + ..._06a01dd51ffbfd006c0afb8eab40b530._comment | 8 + ..._53c33484bded57abc60f0449331c7b05._comment | 11 + ..._9e0ff44f6e62581bfc83f9f1da3e0100._comment | 14 + ..._7f96b5ef05e2faf4a3dbe8bfc39b810e._comment | 10 + ..._65ab8463716f4ddd7721a5bcfcd18fa0._comment | 8 + ..._31a45f6a72266190b3ed7a7b02e03d5b._comment | 8 + .../Can__39__t_install:_Mac_OS_10.8.2.mdwn | 36 + ..._c44023d81e9e4f7c9341af0e4271a1e4._comment | 10 + ..._dfbcd39eedff28dc9ed866a8f1411ef3._comment | 30 + ..._b37b2a9906ffb956cca91adb4bb4e521._comment | 8 + ..._afddf16f8faedc78d458835480f10dc3._comment | 15 + ...motes_that_aren__39__t_tracked__63___.mdwn | 13 + ..._35e5a963b9e58ed7773dfcb884f8ecbd._comment | 10 + .../Cannot_find_git-annex_in_server.mdwn | 10 + ..._bf7e98e6130698ad0dc92e3a6a63ade3._comment | 15 + ..._168dda4aed09f90a510bc453e8a7cda7._comment | 10 + ...unch_webapp_on_ubuntu_12.04_using_ppa.mdwn | 6 + ..._9345551f5772c3a6f1490b00e1edbf69._comment | 8 + ..._0b688a442b6a911a0353e73097a24cb6._comment | 12 + ..._7e246caa00005560bb489c927c663046._comment | 12 + ..._1d8025aabe8bc72711a77f691f67da5f._comment | 8 + ..._7c2f95da65190016192424e7c622122f._comment | 8 + ..._9b8465cefe609e7a696e7573b8892e38._comment | 8 + ..._af6472762a598a454ba52ac0caa059aa._comment | 10 + .../Centralized_repository_with_webapp.mdwn | 13 + ..._dcb9b07fd154f4d4fdef4809cc37ce77._comment | 18 + ..._08c84f2703f89dc12982eba9dd2a06d1._comment | 11 + doc/forum/Change_remote_server_address.mdwn | 6 + ..._401c3d2530ac7ba41dd3857ab4737ed5._comment | 10 + .../Check_if_remote_is_using_GPG__63__.mdwn | 1 + ..._db8ce8ef50fc33a28860ee475988450f._comment | 14 + ..._11c7033904c9c7a1df766e915632c386._comment | 8 + ..._a7ab70ad87a334c36761ddb3d830d99b._comment | 8 + .../Check_when_your_last_fsck_was__63__.mdwn | 4 + ..._ee98a1fcd796fe4fd7af6f77d0c1837d._comment | 10 + ..._up_after_aborted_sync_in_direct_mode.mdwn | 19 + ..._3440b2e1662d3b113c18283afcbf4520._comment | 8 + ..._9a61ba8ac4a375f1d69cd09b5a6f8091._comment | 14 + ..._6b9d8c48547f3d0a911310622ba91df7._comment | 13 + doc/forum/Coming_from_git_world.mdwn | 9 + ..._098bef38c2688607e869425a557cc482._comment | 8 + ..._98d75a1415e0c3689ab4231855e61233._comment | 12 + ..._5e7079e9bf3e4d97191333c66ac00e52._comment | 10 + ..._357443dc601ae38784c01cf18552f4d5._comment | 14 + ..._ed1847dd3f47a9d013b8dd0455fb80ff._comment | 8 + ..._09c6bb83a73d34dff2b8bc185a14a1db._comment | 18 + ..._6c731bb9a8d21dd9ab8c09612b23f908._comment | 16 + ..._e719d99af5afd90da3d3db692eff28dc._comment | 11 + ..._85a42106944dba9995fb3f4bfee3443a._comment | 10 + ..._90623294b910ceca3dc8ebd41b50fc9b._comment | 38 + ..._28dbee30eb54877418f72eb8935302d8._comment | 8 + ..._6edb36ea9535030fa3766937398e5bc7._comment | 8 + ...tes___40__specifically_S3__41____63__.mdwn | 1 + ..._9c6c4ca0c9dc6976ba7cf27e84683bf0._comment | 8 + doc/forum/DBus_on_Ubuntu_12.04__63__.mdwn | 3 + ..._dc14a40b64b7eda94d1a3fd766cd39cc._comment | 28 + ..._608a30e274e6a691a39f69503720e320._comment | 10 + ..._791b9978b410c1aff7fd8ef05c38f5f9._comment | 40 + ..._8665c95299916138c4af375626d9ec7d._comment | 8 + .../DS__95__Store_files_are_not_added.mdwn | 3 + ..._30687306da9bd35ec02a806193c5e240._comment | 7 + doc/forum/Debugging_Git_Annex.mdwn | 4 + ..._ce63b2ee641a2338f1ad5ded9e6f09a8._comment | 7 + ..._1d70ff052d00f33c34fd45730ea13040._comment | 12 + doc/forum/Default_text__47__html_handler.mdwn | 2 + ..._4730061916c7e12b7a41906152f847ee._comment | 12 + .../Delete_unused_files__47__metadata.mdwn | 7 + ..._3efc19895c8dec89b71ae3778b583fea._comment | 11 + ..._23597d9468347b3d94257f3c02afe1b8._comment | 8 + doc/forum/Detached_git_work_tree__63__.mdwn | 11 + ..._656c737772bf92be2c7a2f33bd2bb0f0._comment | 10 + ..._28ac35a325fba250721d9f1b7c994960._comment | 8 + ..._7128c26bbc8efea04a5a317edf0ca9f2._comment | 13 + ..._a3c22f905748ff2c803e8621c74a87a0._comment | 8 + ..._8063921241760458349e7cb0cadf3d4e._comment | 8 + ..._4510a787255cb03e7d0c3e7b830b7d52._comment | 16 + ..._ffd9c67ecc5b46ae98996018573f5591._comment | 10 + ..._36ca007643c983604fc4aed6ec8cb3d2._comment | 8 + ..._b7a2da4fbace7156e11c48a496a19dc9._comment | 8 + ..._f9fa237a693d28178f0451799209f7e2._comment | 8 + ...between_copy__44___move_and_get__63__.mdwn | 24 + ..._26ee8192af3a62178c1ccf17c6da5ca5._comment | 10 + ...pointing_to_same_special_remote__63__.mdwn | 6 + ..._359f46805e6508d03aadd90429937546._comment | 10 + doc/forum/Direct_special_remotes.mdwn | 26 + ..._50357130a1c57ad2fab70f71925faf02._comment | 8 + ..._e94a722ca056a068bcc16eb822008602._comment | 18 + ..._187036bbfee0508e2914afb51ead3c71._comment | 16 + ..._6bfbf60f2061d49b7d34c844e7e1dea2._comment | 66 + ..._69c34c655e4b153dfc0d1b8580091124._comment | 8 + ..._b054cfc3d3f81873f3faae7eb4f5337c._comment | 8 + ..._work_when_the_buddy_is_offline__63__.mdwn | 1 + ..._f290dd8547176793934f8077374e1c0a._comment | 17 + ..._c358eb51047f333e582bd824be5e0e65._comment | 8 + ..._a2332c0e7b29110b9aed2ab69ce9d8c4._comment | 12 + ...oes_git-annex_version_big_files__63__.mdwn | 5 + ..._0b44003c1dc53adb807298ae452f8004._comment | 8 + ..._ca40b67abd7bd36155d16d0396d7472c._comment | 14 + ..._32de3501feedce51b43ed9dcc399c7a9._comment | 15 + ..._8c65a7f8bda3c876971c2801fb6a76a1._comment | 8 + ...s_migrate_ensure_data_integrity__63__.mdwn | 7 + ..._cef50b32c46f4406c6f918c5866ddc15._comment | 11 + ..._f389b924c8531b35fdf5dedd10fc8000._comment | 8 + ...tand_how_to_delete__47__recover_files.mdwn | 25 + ..._b307bfb0b70d649897f411eb753bd50a._comment | 14 + ..._58a6a1476274b8c4feb3d43ecd998759._comment | 41 + ..._4b857f481db7b2437ac9f8137a8510e2._comment | 11 + ..._828db3bf2863d98c0b0fb4074aa7f066._comment | 33 + ..._cb2063d6a4e08a5c12bf3723d0fa74e0._comment | 8 + ..._1759bcd5708f591f91b9c410f6dc5c54._comment | 14 + ..._2a389f01eb5131042ea1e71a73c9787a._comment | 21 + ...39__t_understand_local_vs._known_keys.mdwn | 19 + ..._10749c0d76e824217dd1ff8c8a6e42a5._comment | 10 + ..._db9f1b6d9638c2b0a7e241c2727e8cfb._comment | 13 + doc/forum/Drop_with_assistant.mdwn | 5 + ..._048f5a31c549afb19b76a65bddd0cd24._comment | 13 + ..._527d7b6a8efa85b904111f179912d926._comment | 8 + ..._c50857506869bb1cd306b66acf37fba8._comment | 14 + ..._1ea37445d5eb96c3efa182e88e07b867._comment | 8 + ..._c08908ea5232cbe067c73ecd12d0e218._comment | 10 + ..._015134228cb865f97326fbb7193636ea._comment | 8 + ..._950759930667588f21659cd6d7065fbb._comment | 17 + ..._773e540e46adc43487323e8d38ceb2d9._comment | 23 + ..._d85d120d7219ea6c179c2619a17bdae9._comment | 15 + .../Effectively_replicating_backup_files.mdwn | 25 + ..._b1ab0da82db076c5244b0dcc95282ddd._comment | 14 + ..._472ab9c973b475f7f3ce7e3934f94281._comment | 19 + ..._826493bd59b81786c1f6a56f1c438004._comment | 10 + ...ypted_ssh_remote__44___synced_folders.mdwn | 87 + ..._7b9b4ef614c90e0b222d24678d1b9026._comment | 10 + .../Error_adding_ssh_remote_in_assistant.mdwn | 15 + ..._eecc0660db4083cc91c5330587f74610._comment | 8 + ..._3e6aad22e8020b12ff7ef914b75281d1._comment | 8 + ..._3ea529e16502071fc0980c6d5c60a036._comment | 8 + ...it-annex_branch_but_not_master_branch.mdwn | 1 + ..._9a909e3d89061adacbd8ed370520250c._comment | 9 + ..._0dd489b264374b7b1065b89e1ff7561b._comment | 8 + ...Request:_add_filename_to_hash_objects.mdwn | 6 + ..._73dc0a9cad486cf2d34faf064c6193b1._comment | 10 + ..._f818b3ecfeb1d1dd83df4668c061718a._comment | 8 + ...equest:_Multiple_concurrent_transfers.mdwn | 19 + ...nnex_copy_--auto_does_the_right_thing.mdwn | 5 + ..._bbac7d0810a79eb1f42a01e1b31d5c4c._comment | 12 + ...pp_support_for_centralized_bare_repos.mdwn | 1 + ...t_at_an_OSX_launcher___40__.app__41__.mdwn | 3 + ..._97c261b9080c5ecc5424683066bbe05b._comment | 14 + ..._ae45f9703b635c235409682cf252d36c._comment | 8 + ..._066ca31a2e5dfe55a58092ba85231c7c._comment | 10 + ..._a0a9f7f44cadb8036fcddfc21bb0781f._comment | 10 + ..._92240b3f8629f1f2bbe1829700082a79._comment | 10 + doc/forum/Fixing_up_corrupt_annexes.mdwn | 10 + ..._cea21f96bcfb56aaab7ea03c1c804d2d._comment | 7 + ..._5cdd2fcfa61b3f6255e5ad63a3ab00ce._comment | 8 + ...e_repo_to_contain_a_copy_of_all_files.mdwn | 1 + ..._702b1b94c735f1b9cde16daa77a80c12._comment | 8 + ..._3df7fcbcd482bb9377ead238b314995b._comment | 8 + doc/forum/GPG_passphrase_handling.txt | 76 + ..._11ba130e8bea6698858d0a1a5b01830f._comment | 15 + ..._ef9d58d15b7bbe0b3c7140bb01d73a31._comment | 15 + ..._84eb129c8483b87b3ae6ecaf8b4a8309._comment | 12 + ..._8724297f6d7ac140ab395a940bab0d7d._comment | 8 + doc/forum/Getting_started_with_Amazon_S3.mdwn | 28 + ..._f50883133d5d4903cc95c0dcaa52d052._comment | 10 + ..._e90aa3259d9a12cd67daa27d42d69ab5._comment | 8 + ..._c3adce7c0f29e71ed9dd07103ede2c1a._comment | 8 + ..._Assistant:_How_to_add_a_remote__63__.mdwn | 11 + ..._d0a3d0090928790d5a05e9f8e5f05320._comment | 12 + doc/forum/Git_Annex_Transfer_Protocols.mdwn | 9 + ..._a870ec991078c95a6bb683d6962ab56e._comment | 8 + ..._71419376ef50a679ea8f0f9e16991c17._comment | 8 + ..._fea43664a500111ca99f4043e0dadb14._comment | 8 + ..._56fb2dab1d4030c9820be32b495afdf0._comment | 8 + ..._a6ec9c5a4a3c0bac1df87f1df9be140b._comment | 8 + ..._1678452fb7114aeabcf0cc3d5f6c69b0._comment | 8 + ...t_annex___39__corrupting__39___itself.mdwn | 34 + ..._bcf50a215e2f8771e098aadfff4c300c._comment | 43 + ..._75f957e7be6c1ad8936c0a2a5374db3e._comment | 20 + ..._ab062b1df3b55fd49852a6220c98249e._comment | 10 + .../Git_annex_assistant_in_command_line.mdwn | 2 + ..._ce05226307ade8db90ada2dbf290bd58._comment | 10 + doc/forum/Git_annex_assistant_on_EC2.mdwn | 5 + ..._bbdb4611373117a2176c225378110a05._comment | 8 + ..._614ed11f7134137d6376d36a61c293f5._comment | 8 + doc/forum/Git_annex_on_Windows.mdwn | 11 + ..._da24ba0219a164f9ab93fe75dd85127e._comment | 11 + ..._c0880ce3ee13d388ab5b46a740170845._comment | 50 + ..._70c22716fde60d14fd0c7e74acf4a224._comment | 11 + ..._b9232deab6bc5036d7339aa202013218._comment | 12 + ..._27af3c431b50b540d2bd1d3af3f21080._comment | 8 + ...ex_syncing_speed__44___possible__63__.mdwn | 21 + ..._8aa224b3016dc38e4cea8ee1865a3ab6._comment | 12 + doc/forum/Git_repos_in_git_annex__63__.mdwn | 7 + ..._8aaa0d83e8fcd5997f6b0097f3b21622._comment | 14 + .../Git_repositories_in_the_annex__63__.mdwn | 5 + ...ial_remote_when_content_changes__63__.mdwn | 19 + ..._05ee6a1b1943ef3c90634e52233bde1c._comment | 12 + ..._48d82e391812d8ec0d4e6562d0607fe7._comment | 10 + doc/forum/Help_Windows_walkthrough.mdwn | 177 + ..._5fc22393a1b28235eabb2871ad83d0a7._comment | 12 + doc/forum/Help_on_my_usecase.mdwn | 22 + ..._a35b35c7927640f21d47c3df4f91dabb._comment | 12 + .../Help_with_syncing_file_contents.mdwn | 68 + ..._7ec34de3140983739080115c82966bf5._comment | 18 + ..._7dba58d3c62d6f64a270298e4e4329a4._comment | 10 + ..._b26cfa20dc81517d93e760f4809bdc24._comment | 12 + ..._Android_git-annex_installation__63__.mdwn | 1 + ..._e14757c2c106770c2d7069ace4987b3b._comment | 8 + ...dropunused_with_an_rsync_remote__63__.mdwn | 3 + ..._8db3cb5348b845eb99c2c829957db9ea._comment | 8 + ..._6cc909d9d74bc1ccb8a7b0d7d234c7cd._comment | 10 + ..._f24d678e4192a70322aa164ed9b71fc8._comment | 8 + ..._9233decd0aaf9211447f36e0d9346445._comment | 15 + ..._e1deb110f752e5495d5c77ec444abac5._comment | 8 + ...now_when_something_fails_a_fsck__63__.mdwn | 4 + ..._1c14981916dd55376d5e9f95023556cb._comment | 32 + ...ex_assistant__39__s_web_browser__63__.mdwn | 7 + ..._f4402eabda2327da3a0bbc64ed3baf9a._comment | 12 + ..._cdb41f2c7b6bc5bf40d88582dcbf45aa._comment | 10 + ..._ca75e928c245eb23a02b5f40ec69cbb1._comment | 8 + ..._1635f136909711295b9b70d1255e0378._comment | 11 + ..._ee0cbe9498c518de98480a2ad229f685._comment | 10 + ..._799b9d9d3ffbc2c14eca8d442e2aff8c._comment | 11 + doc/forum/How_to_cancel_an_add__63__.mdwn | 5 + ..._f768ce5dc7c76f96ee6eb352f167be44._comment | 8 + ...7__ssh_backend_to_other_backend__63__.mdwn | 14 + ..._7973928b1aa9e0fcfeb6bf80885441f5._comment | 10 + ...th_renamed_files_in_direct_mode__63__.mdwn | 3 + ..._fe38fedbbc9e4a9e13bf19950e63c7ac._comment | 10 + ...url_for_a_git_remote_repository__63__.mdwn | 7 + ..._52918b5ec25e55837215439fe1bb1a14._comment | 8 + ..._3a1567c9f484b5e12e5560cdcc2cfddd._comment | 8 + ..._48c3a80c14a85f27d742482b2ccbe628._comment | 8 + doc/forum/How_to_delete_a_remote__63__.mdwn | 1 + ..._8cba186bb67079ff41bf6d0b04613f4a._comment | 10 + ..._33c429ffa7e9e2ed9c5fac760ee8e82c._comment | 12 + ..._e9c5508092ca2983f458b16bf1e07082._comment | 14 + ...tes_with_git_annex_assistant_and_ext4.mdwn | 28 + ..._42ca6cfbbb79fe63514805b8119ac16b._comment | 8 + ..._c94ce6a9767c624e2445a7d9eea40396._comment | 29 + ..._bcda51053b62bbb20ce71a59469e1b26._comment | 10 + ..._48e5b9eae920e5f13812de8d6f6bc640._comment | 8 + ..._787c0bfdc1d309db1486c3a37723a957._comment | 13 + ..._8894beb06443f234e9200b03b5f3badf._comment | 8 + ..._457f62ee3e58f68a55f66c5bde6002fd._comment | 10 + ..._bd2b412116a66107bc0ff0efd7e39a58._comment | 10 + ..._of_files_that_have_been_edited__63__.mdwn | 7 + ..._dccf4dc4483d08e5e2936b2cadeafeaf._comment | 8 + ..._5710294c1c8652c12b6df2233255a45e._comment | 8 + ..._to_handle_the_git-annex_branch__63__.mdwn | 5 + ..._800bd55b322e72f229882d7fd3888b14._comment | 8 + ...n_releases_work_with_git_annex___63__.mdwn | 5 + ..._9298aa55771b68873de02e6a7964bbdc._comment | 8 + ...stant_from_downloading_all_data__63__.mdwn | 9 + ..._fd8b287758ad77b3527ae71017cffabf._comment | 8 + ..._e8e75b4451aaf55461edf2f3d68797ed._comment | 8 + doc/forum/How_to_rename_a_remote__63__.mdwn | 1 + ..._a9bfbd82f7bb47661f0d9e0e0d904332._comment | 28 + doc/forum/How_to_restore_symlinks.mdwn | 1 + ..._c67e752cf7d5431096fab4b3304790a7._comment | 11 + ..._f9ec6096595e2c149c48924e3b54542f._comment | 14 + ..._4ff80729787a2a4e2baf05dd1db37da3._comment | 12 + ...ly_annex_a_file_already_in_a_git_repo.mdwn | 5 + ..._one_shared_transfer_repository__63__.mdwn | 15 + ..._bedaf308cfc70b9e751914a400ebcbc2._comment | 10 + ..._d665b1514253c8aa487ebf8b2728e3b1._comment | 10 + ..._aef42387a3673ab6710fb23e878d7e17._comment | 10 + ..._bfbcc041db472f4808979e6b3d7c4be2._comment | 10 + .../Howto_remove_a_repository__63__.mdwn | 4 + ..._b55fa4e92bb457ecaa5ca8f5cee7be1d._comment | 8 + doc/forum/Howto_remove_unused_files.mdwn | 31 + ..._f2a7948268ce3cb3967a9fdd8ccc570a._comment | 16 + ..._9b4d198c2d8a52adef3d166a8196fc0d._comment | 8 + ..._441d10901d5c055ac3ed2a6cb61c075c._comment | 8 + doc/forum/Import_options.txt | 14 + ..._118a5f978090a3909299876a01c0adec._comment | 21 + ..._21da91f08cb6b28ae3e79ade033db516._comment | 17 + ...de_of_the_object_directory_safe__63__.mdwn | 9 + ..._c25900b9d2d62cc0b8c77150bcfebadf._comment | 13 + ...state_before_the_initial_commit__63__.mdwn | 18 + ..._f9decde3955f10148febc4646fba5a68._comment | 12 + ..._ed32a48edce4f150bedf24cfe91de254._comment | 8 + ..._ef9618850e5e688bac3c646983f00ed8._comment | 10 + ..._4bf460c5826c36b205e418c4f3f7d770._comment | 15 + ...e_git-sync_not_nullify_symlinks__63__.mdwn | 23 + ..._d6f2d2cdc5f4ffde9eee9f3a8c215a06._comment | 10 + ...ebapp_on_Trisquel__47__Ubuntu_Precise.mdwn | 7 + ..._6bd27bd31833336c1df783253378ccae._comment | 10 + .../Let_watch_selectively_annex_files.mdwn | 27 + ..._8379de87d16502d9aadf252da01e4d9a._comment | 10 + ..._2219ff6b4dc927eb2a299cd1af90aed8._comment | 8 + ..._or_actual_files__63___Confused__33__.mdwn | 21 + ..._779cee2448d7070b1dd636d01296c01e._comment | 8 + ..._bccda88697ab7beec0b9fe9ee0230688._comment | 18 + ..._c2a9da3f03b55ff294dc0d2010380119._comment | 8 + .../Local_and_remote_in_direct_mode.mdwn | 7 + ..._45f89ebcb6092d1b2582feebc8a5e9d7._comment | 15 + doc/forum/Looking_at_the_webapp_on_OSX.mdwn | 18 + ..._68820f2f469356633c1abb18a47e0c59._comment | 12 + ..._4ce86546d8a135df9cfab46b4612fa0b._comment | 23 + ..._6d398a2cceff14a1b774b85ee1725073._comment | 12 + ..._5e503787a4b1d3534c5e20da5480b763._comment | 8 + ..._c735841bc230efc61594ea013fc2902b._comment | 8 + ..._0e489fbfc89d282e9eb47f1b814ff70c._comment | 8 + .../Make_whereis_output_more_compact.mdwn | 13 + ...git-annex_a_self-funded_project__63__.mdwn | 10 + ..._4a1ba95b7231ba973ddb672d2419e28c._comment | 8 + ..._7c476ae92e63c991f229708678874ca2._comment | 8 + .../Making_git-annex_less_necessary.mdwn | 5 + ..._03faaa3866778d24cd03887b85dc9954._comment | 12 + ..._2db02a94dffd525885c9d7fc6c5fa464._comment | 12 + ..._429ec656e0ac02f98843f8d7f3c02d6a._comment | 11 + ..._384813dd022dfd9c1ef14e0f1479a123._comment | 18 + ...ead-only_medium___40__E.G._DVDs__41__.mdwn | 118 + ..._a061d300b718ad943c940e122cc57220._comment | 23 + ..._76529080054407570611b4357ce4f3ed._comment | 8 + ..._9acf5ce41a023f3848a51891cceeb51b._comment | 21 + ..._25e65ee3949e7d918376298cf11585f2._comment | 10 + ..._8a71ca048f9de29a198a6afb17d5315e._comment | 11 + ..._e3d1d3a3d3d831432ec940a8ab6f31e9._comment | 14 + ..._26a33eae98b4faaf6baf6635e3d28a8f._comment | 27 + ..._49ac298d39c824b0e52a239961463e09._comment | 14 + ..._55a4a3616ea59654da1c2f9902561e3b._comment | 13 + ..._92a2af3e0e328bb48bcc67a69187ee57._comment | 13 + ..._f6e39e71882d55cdc061166aea3e2bd3._comment | 26 + ..._6c45a6264d69e22800c329a0f8a2d470._comment | 8 + ...multiple_annexes_with_assistant__63__.mdwn | 13 + ..._ba8c70e4a46441b48ad910625636eee5._comment | 8 + ..._4b4f0a7d84a51ae92536e2c190256069._comment | 10 + ..._86daadc565f96db5db13b6dbcbc66db3._comment | 8 + ..._e43d71ddfdfdb7bcb13bfb894de6a5ec._comment | 8 + ..._e94d33be83b45918d1a39d6e16fba4b4._comment | 8 + ...tiple_repositories_concurrently__63__.mdwn | 5 + ..._ebec1ddad71e961cdc9b21cbddfbcdaf._comment | 10 + doc/forum/Manual_Setup_of_a_Central_Repo.mdwn | 1 + ..._3a163fd5629dc40423f1290a78ae1c07._comment | 12 + ...l_mode_option_in_assistant_auto-syncs.mdwn | 11 + ..._4a0468b6ca2ffff8ef8f19800597567d._comment | 10 + doc/forum/Manual_webapp_behaviour_on_ARM.mdwn | 15 + ...Missing_git-annex.linux__47__runshell.mdwn | 44 + ..._f29a5105649579ef15e79d983c4e1f8e._comment | 8 + ...ithin_the_repo_without_copying___63__.mdwn | 19 + ..._9e3290138133d5a23a80f72342f47ec4._comment | 8 + ..._232b77894dda51d02cbc34bd25d3213b._comment | 13 + ..._d35ac1bdb3fa6e303ad92348ba174158._comment | 11 + ..._4b443ec6b47eaabe214d0c2222083e4a._comment | 8 + ...s_file_content_without_doing_checkout.mdwn | 4 + ..._f114b75b29123453758b493fae7f5167._comment | 8 + ..._e377b7614c2961b460a10e285f3db274._comment | 10 + ..._d251958795ab0867c65cf182e54a6ffe._comment | 8 + ...r_some_weeks_with_git-annex_assistant.mdwn | 57 + ..._9d4019a54fb508e286a5d6d2660361d9._comment | 26 + ..._109534a45881ce94a4586c8a83945f9f._comment | 85 + ..._build_instructions_for_Debian_stable.mdwn | 5 + ..._8c1eea6dfec8b7e1c7a371b6e9c26118._comment | 8 + ..._f6ff8306c946219dbe39bb8938a349ab._comment | 21 + ..._bcda70cbfc7c1a14fa82da70f9f876e2._comment | 8 + .../Need_some_help_to_fix_my_repository.mdwn | 31 + ..._f0d279c530b796b2c93d793f85d147e8._comment | 13 + ..._a3fcfa1f8eadec5fa8a9efacca174048._comment | 10 + ..._7878f9b76ddfa3392c9ec6a1810cb745._comment | 10 + ...nnex_integration_mode_for_Emacs_users.mdwn | 3 + ...al_remote_suggeston_-_clean_directory.mdwn | 15 + ..._4d81941fe53881eebff97109a07ba2f4._comment | 8 + ..._660a5b764ad42468154b2bb94f8ec004._comment | 8 + doc/forum/New_user_misunderstandings.mdwn | 24 + ..._c1785924109b5d5cde9aa3d3460cf955._comment | 10 + ...to_connect_to_the_Jabber_server__34__.mdwn | 5 + ..._59158afcedac18a7285d57491b2a468a._comment | 8 + ..._2a70ac08bb95774415b09dab7d7f8605._comment | 8 + ..._92a52b523ed4c68b70ddcabc2a050b76._comment | 12 + ..._c52a75761ea107f6d69c09bac64f0f0a._comment | 12 + ..._2685e3a87464ccd37d593516d94ba5cf._comment | 10 + doc/forum/No_SSL_traffic_for_S3__63__.mdwn | 8 + ..._f509bf273896180e6df8c771438dd093._comment | 11 + ..._358635d19c82202c63014ca84de7fc3b._comment | 8 + ...Not_sure_how_to_get_my_s3_remote_back.mdwn | 31 + ..._ed35a6ec605e8f79ec107856af6d1a46._comment | 18 + ..._e48b6efa42159dc83e1be11bfb54abcd._comment | 14 + ..._b58232d0e3fa4649565c0c7d4ce2e82e._comment | 31 + ..._85368b60091dc3ce2efb58013ffe9f83._comment | 10 + ..._e65281bef23e0076936c508728a87897._comment | 25 + ..._fffb59ad5a197d2980dd0ec35cf4aafa._comment | 10 + ..._0cfcc2075bff556b9fde5acc3dc1d599._comment | 8 + ..._6fe2ff1282fb14a4ce26ef8dc775d07e._comment | 8 + ..._64338d2d77dcbabd16b55eb145f40dc6._comment | 12 + ..._dd66c9ea0c83388f6826751944330d10._comment | 16 + ..._dc0c5e395e4c443b7227afdb157194e5._comment | 10 + ..._3c0ea4c76cdd889707f7308576e3efa0._comment | 65 + ..._36519ee4499a19f0864e4fcd264e9933._comment | 20 + ..._85b23f375e53469fb09b24b945b3aba9._comment | 17 + doc/forum/OSX_Mavericks_anyone__63__.mdwn | 3 + ..._3075b02aeb57adcbf4addf9fb4c123ba._comment | 11 + ..._c2b6110fc4a3d3481ed8a4b48efb9635._comment | 17 + ..._7df9ba63cb1f385681242b4b58d6a87c._comment | 8 + ..._740fee31c4ca9d84428f97f63ffc075a._comment | 8 + ..._sshd_behaviour_has_limited_paths_set.mdwn | 12 + ...kell-platform_statically_links_things.mdwn | 17 + doc/forum/OpenOffice___47___Libre_Office.mdwn | 5 + ..._98ed542fedd820d47bf8deb7d3232725._comment | 8 + ..._f313fdaa23863c2ae99cfbfe9ec2e1e0._comment | 8 + ...___whereis__44___find_and_status_cmds.mdwn | 5 + .../Overwriting_data_without_getting_it.mdwn | 3 + ..._f1c0199ee9bffcc84287370b89361294._comment | 26 + ..._6a1d08dbca206129ef6cf8aa97daeee1._comment | 8 + ..._52958e76e506fdbb6b533681ab619b3b._comment | 8 + ...ickey__41___On_second_Step_...___63__.mdwn | 36 + ..._6c74f0b43c457fe97b2d8630ca4fde29._comment | 10 + ..._b7a384e853e1756a684774348fad29e6._comment | 22 + ..._3a8a7f51cb04a92c576549d379b57248._comment | 12 + ..._582ad3ba0c62a77b08a10b37a780c670._comment | 15 + ...Please_fix_compatibility_with_ghc_7.0.mdwn | 1 + ..._d1d10217ebd0151e947b3a6cd37399ce._comment | 8 + ...new_releases_not_shorter_than_11_days.mdwn | 6 + ..._da3d39de5be47ebe8b25a42ed1f36510._comment | 8 + doc/forum/Podcast_syncing_use-case.mdwn | 34 + ..._ace6f9d3a950348a3ac0ff592b62e786._comment | 10 + ..._930a6620b4d516e69ed952f9da5371bb._comment | 8 + doc/forum/Poor_man__39__s_IMAP.mdwn | 6 + ..._258ff23c462dc88b88ced405c4f5040f._comment | 11 + ..._c88d1abdda4cb526a6ee45a710c75bc4._comment | 10 + ..._3847e371db1c2788c075e7dca1fbd33e._comment | 8 + ..._cf6cc21f2cf2aa5c949844e24a7b4075._comment | 8 + ..._d861fa69475ce526841b3195be8ee356._comment | 10 + ..._1e81bd4bb62652bc674cdcd7ed57ac5c._comment | 12 + ..._b3929281dff6078d77f1b9ae42e25bb6._comment | 16 + ..._69506e8c519196f44b9ed15b32f00106._comment | 22 + doc/forum/Post-Kickstarter.mdwn | 5 + ...in_directory_tree_below_objects__47__.mdwn | 77 + ..._5dd978f9b5a0771f44ab9e086bf5a07f._comment | 14 + ..._9f51947b35ee04e473655e20d56c740a._comment | 16 + .../Problem_compiling_current_master.mdwn | 12 + ..._135df61ec850c06e3b48ccfef7b5b031._comment | 8 + ..._fb3e27b6014e84bd919a7a4a95e39ef9._comment | 20 + ..._b737b3945103c5e2aa798b4e65fbce06._comment | 8 + ..._28c1b335ae388d4e1f22b711ac1c001f._comment | 8 + doc/forum/Problems_syncing_with_box.com.mdwn | 26 + ..._8db642849da4d42cd9a43142e2b7cb70._comment | 12 + ..._cd18f33647aebc04af5469e4ce1fbcd2._comment | 11 + ...using_submodules_with_git-annex__63__.mdwn | 1 + ..._c7a927736d419d3c31c912001ff16ee4._comment | 7 + .../Problems_with_large_numbers_of_files.mdwn | 8 + ..._08791cb78b982087c2a07316fe3ed46c._comment | 22 + ..._0392a11219463e40c53bae73c8188b69._comment | 25 + ..._537e9884c1488a7a4bcf131ea63b71f7._comment | 8 + ..._7cb65d013e72bd2b7e90452079d42ac9._comment | 29 + ..._86a42ee3173a5d38f803e64b79496ab3._comment | 14 + ..._4551274288383c9cc27cbf85b122d307._comment | 11 + ..._d18cf944352f8303799c86f2c0354e8e._comment | 8 + .../Pruning_out_unwanted_Git_objects.mdwn | 3 + ..._0cf7a12bfa2957260f4b2f79b0cadf2f._comment | 8 + ..._7472943c02cfe2808b0d566e06caa1a5._comment | 8 + ..._6a1e7a83d94394454fc085f6d2728cd7._comment | 8 + doc/forum/Purge_a_remote.txt | 2 + ..._78b3b77f457c65d31fd8a5abf714905d._comment | 8 + ..._dc65719157dee63b3979563ed57ee0ce._comment | 10 + ..._63e0280273b816fa4b837724e102f813._comment | 8 + ..._7fad1c4798ca03a4095ac3241c279f6d._comment | 11 + .../Push__47__Pull_with_the_Assistant.mdwn | 1 + ..._f7b63d379c2d21794adf8658f546f8a7._comment | 10 + ..._aec8cc20576e7ffd5a8be4348d1a0073._comment | 21 + ..._git_repo_to_AWS_S3_from_behind_proxy.mdwn | 9 + ...Reappearing_repos_in_webapp_and_vicfg.mdwn | 43 + ..._bd977e864ae89816fa7f4ff69879b15f._comment | 8 + ..._05749f9e75689d0111339b7126c12300._comment | 15 + ..._b1531994eea0fbbf4cb097e604378a53._comment | 12 + ..._f1eba3e8aa4116e3c20747ec1d6e24e5._comment | 12 + .../Recommended_number_of_repositories.mdwn | 4 + ..._3ef256230756be8a9679b107cdbfd018._comment | 15 + doc/forum/Relocating_annex_directory.mdwn | 1 + ..._13ff5438baa1db110beb6aab3a783def._comment | 11 + ..._6d88ff03fcf00ae872442e8a86c968ed._comment | 10 + ...g_files_not_found_by_git_annex_unused.mdwn | 29 + ..._420c6230e68de0a0ac7d7da91ac60801._comment | 8 + ...__dumb__34___client_without_git-annex.mdwn | 11 + ..._077c492fd37d335f74a5c886ff0d524f._comment | 32 + ..._00e6576e3e60d2650461eeb0f918e6e5._comment | 8 + ..._c36a9562c53ac683b62fc4471405aa2a._comment | 15 + ...-annex-shell_to_a_specific_repository.mdwn | 25 + ..._66544520bff71181e4a03ca583b0b458._comment | 12 + ..._2a210255e8535712c71fa183e56ab600._comment | 13 + ..._52cd4bd9694b2100b0e0dd2eafa9e828._comment | 8 + ...rieve_previous_version_in_direct_mode.mdwn | 5 + ..._ca3a999ed64c42b8df810115de205d2f._comment | 12 + ..._1292b34ff6d9976b2bd08748e1ba4e7a._comment | 8 + ..._699e816c0397f6db924feeab906f1151._comment | 8 + ..._d900388753de5870b7b9c0e8b8c06ed7._comment | 8 + ...Revert_file_linkage_to_original_files.mdwn | 9 + ..._898ca2c9976e92d22470c7404aa9813f._comment | 10 + ...n_a_server___40__no_X_available__41__.mdwn | 2 + ..._dd75d78ef63f2689199a302ed1846017._comment | 8 + ..._df654df60c5fa6a84d786d248928a352._comment | 11 + .../Running_assistant_steps_manually.mdwn | 20 + ..._e14e0a1d55d01cb4f67a94bbe349b872._comment | 20 + ..._3192f614c929b8060d4fbde56a7adec1._comment | 14 + doc/forum/Running_out_of__inodes.mdwn | 17 + ..._abc73d9ad662ef642337b683bf0a0253._comment | 12 + ..._Jabber_account_for_different_annexes.mdwn | 1 + ..._90c3954fe11980eef42b5f5d34f83488._comment | 8 + ..._802600b3568e5f94d0550092b22975db._comment | 8 + doc/forum/Securing_a_shared_ssh_server.mdwn | 3 + ..._ea971b57d94db5b8d487f728faa5e9a8._comment | 10 + ..._421a19f6e1fb40db6ee205daf8e3f867._comment | 15 + ..._acdbf92f646dbbf691621f08b3d94c26._comment | 12 + ..._67533d08e1b8706b844262e9c483d982._comment | 15 + ..._bf193e02b388b4358632a169d2425b5c._comment | 10 + ..._50d391992cd444080ebc70db30b215c5._comment | 9 + ...ial_remote_with_non-standard_ssh_port.mdwn | 13 + ..._1eb6990e93ec92cb6fd7dbee59f31072._comment | 13 + ..._c85d5167e7ccce1ecf1de396e72ce7bc._comment | 8 + ...files_of_a_repo___40__Assistant__41__.mdwn | 6 + ..._ec0d56cb31b918023a9184cee168b406._comment | 8 + ...are_with_friend_copies_only_sym_links.mdwn | 38 + ..._a8d22dfefb219f0c9130cc294364b198._comment | 17 + .../Sharing_annex_with_local_clones.mdwn | 1 + ..._2b60e13e5f7b8cee56cf2ddc6c47f64d._comment | 12 + ..._24ff2c1eb643077daa37c01644cebcd2._comment | 8 + ..._5359b8eada24d27be83214ac0ae62f23._comment | 8 + ...Simple_check_out_with_assistant__63__.mdwn | 2 + ..._ade8a0743ef1ec933c8a40ed64eeac2d._comment | 8 + ...y_finer_control_over_file_whereabouts.mdwn | 18 + ..._bcb883d46a637dd1a8ef9a92733d202a._comment | 10 + ..._b7a8b9eaf114f883866fbf2be51b622f._comment | 8 + ..._6236bcfa9beba705ead3ec2141c5d835._comment | 8 + ..._ea935b37ca93e73c85d04df7c9bf6057._comment | 12 + ..._f89a8e38283ac4c8c4a3b74c413d67a1._comment | 8 + ..._07a0a754a089c46ff69dc97ea7ba9384._comment | 22 + ..._e884c001a556a0c693d1cc9a97c068ac._comment | 8 + ..._3e8674b5857e4994dfbc26be4f4b2855._comment | 25 + ..._7aeabc2e52a39423e83fbd04560e8f91._comment | 8 + ..._53b95449cfad2fe0f72d2ad642822c03._comment | 15 + ..._a17c102a45e4fc3f101a79acb8eb4081._comment | 18 + .../Some_mounted_devices_not_detected.mdwn | 3 + ..._0ba07b95f12f57ea63bb450b88430c45._comment | 8 + ..._4f8c7bcd0f20dafa5635a3580ec8d1f6._comment | 13 + ..._06c0db7d670d9b82823102d22db15a36._comment | 10 + ..._80820a29361c5be4a94672dacfdefa6f._comment | 8 + doc/forum/Special_remote_without_chmod.mdwn | 12 + ..._4f5f9506cae72a1f321296fc5a5f339a._comment | 8 + ...toring_uncontrolled_files_in_an_annex.mdwn | 3 + ..._175645a90be0c79221c129308adf643e._comment | 27 + ..._d29f214eadfe3bfd098bbc3bcf07129a._comment | 8 + ..._286b502e7906cca50e9e747db735bc88._comment | 10 + .../Stupid_mistake:_recoverable__63__.mdwn | 31 + ..._00ceb3a5e37825c4bbc806f532893706._comment | 23 + ..._cbedc29678d9b6af3b3c0bb1915d2391._comment | 12 + ..._86aa4d92a1330811862da1ba568b3037._comment | 42 + ..._6d15bf8a3c3c27cc92957070161675a9._comment | 12 + ..._f836b9b1d03d94c49e3798961790b2ba._comment | 21 + ..._ssh_server_back_into_android_version.mdwn | 9 + ..._5c2f376a82458c6387560355940419d3._comment | 12 + ..._6321dec0b2f22f841f3cb986e063113f._comment | 8 + doc/forum/Sync_with_one_offline_peer.txt | 11 + ..._3859d842d4f7e2ef44877b05ebe881fb._comment | 20 + ..._c9ba3983b37b0c1868269616fd81e518._comment | 14 + ..._28b9c003b4560c3ce90c9ebf808b091b._comment | 10 + doc/forum/Sync_without_jabber_account.mdwn | 9 + ..._3e95ac2e67451f953cf0538094109f8b._comment | 10 + ...ize_large_files___40__VM_images__41__.mdwn | 10 + ..._619f6ed2d7da5832ab253d61b6dd8044._comment | 10 + ...yncing_machines_on_different_networks.mdwn | 9 + ..._1c3523c722c178a96b096a68b9be4165._comment | 8 + ..._d7b14ffee65072329cfe9ab08a0dba50._comment | 8 + ..._65d1dae9b76fccb5f2b8fd8c69b60075._comment | 15 + ..._2ec67428af69d6c0ea051c6a67d58905._comment | 10 + ..._5ce093f82a2aad3fd8d7ccd5fdcab94f._comment | 8 + ..._a55982c28d7b90e0b70ec2bb5e594e08._comment | 8 + ..._c519d546e1a2a4e834609f3de3a605b0._comment | 8 + ..._84a822238ddbaf211cce5f527c3559d3._comment | 8 + ...emote_from_a_different_computer__63__.mdwn | 4 + ..._cd55d06a4065b9d3f14d50674c3fcaf7._comment | 8 + ..._25cbdf478091af9923090e049c432a7d._comment | 22 + ..._7e71d355457d6b1a0391d4cdae6895e6._comment | 16 + ..._a73f67f2fcf0762fbd7c8366b3844af6._comment | 11 + ...nisation_between_3_repositories__63__.mdwn | 11 + ..._ca5192a26950627a1c2efcb55d6d2fa3._comment | 10 + ..._while_committing_it_repeatedly__63__.mdwn | 3 + ..._3cbe520b184d323219cb402ff046c3b4._comment | 29 + ..._6afe7f593e955db2eefe87d9fa01882b._comment | 8 + ..._209399487fc4f76b29f03ad82dbc2d6f._comment | 8 + ..._f33fd6f72cb9ad7dd20a04c82199413b._comment | 26 + doc/forum/Transfer_remotes.mdwn | 3 + ..._c08cf3bda00d7f20a3ca3d0fdba19c9c._comment | 8 + ..._98930629d398329f1161135464a966a5._comment | 12 + ...stalling_from_cabal_on_debian-testing.mdwn | 15 + ..._0d3e9d7cffafc34bc212557e8bbb987d._comment | 12 + .../Truly_purging_dead_repositories.mdwn | 1 + ..._a4c75d49714b3543a9f1617a15d4a2d1._comment | 8 + ..._3da60a02e7323a204c5c5dd02ba04d6c._comment | 8 + ..._2576e45436008ff5a7ae5a38cade658e._comment | 8 + ..._477e3c213c5a5d4a33afd42a5b94c718._comment | 10 + ..._backup__34___repository_groups__63__.mdwn | 18 + ..._b8702892280447193e6e80be22a580a0._comment | 11 + ..._50cafde7e30b928480d1f142ddd763d2._comment | 10 + doc/forum/USB_backup_with_files_visible.mdwn | 7 + ..._2832f8ae24dfb0f101e06f7c18283028._comment | 10 + ..._6163e01aa441f8435091f026cc6da337._comment | 8 + ..._ee92ff320eb5d9a031bdd1896aee0d86._comment | 11 + ..._437c8342c0b65e3a89129800313eb73c._comment | 10 + ..._5e10cffe8465ea4ecaa71c03a4c29ea4._comment | 8 + ..._add048a16837f7940a859f21426cdbe9._comment | 8 + ..._de227ca9911fe57d7a6d3e037f574fe9._comment | 14 + ..._0c0ed0e038f7f0e2d2d4ed69b7b29fbc._comment | 10 + ...ansfer_group_keeps_growing_-_assistant.txt | 22 + ..._0a6f6054d70009979f4a036e24b7c500._comment | 10 + doc/forum/Ubuntu_PPA.mdwn | 3 + ..._b55535258b1b4bcfc802235f0cba075d._comment | 8 + ..._adc4d644fed058d1811acf0b35db9c18._comment | 8 + ..._fc9cd51558c47718f243437202a11803._comment | 8 + ..._3a8bbd0a7450a7f5323cd13144824aea._comment | 12 + ..._2e1beaeebda0201c635db8b276cedf20._comment | 12 + ..._bd99fb70399fc58d98781a89c6d38428._comment | 8 + ..._c3f7ec8573934c59d70a48e36e321c13._comment | 12 + doc/forum/Un-git-annex__63__.mdwn | 6 + ..._6059265afb66190d325083e0f28bcf33._comment | 10 + ..._fac4bfb81dbbf0dc82059aace261eb51._comment | 10 + ...ndo_Git_Annex_Changes_To_Linked_Files.mdwn | 7 + ..._568dde820c2608d86d05b07444146a26._comment | 13 + ..._a8cf71cdf1217d9c8596cd9006eb83f5._comment | 8 + doc/forum/Unknown_remote_type_S3.mdwn | 5 + ..._2aea2cd51286c809427d16519606cd37._comment | 8 + ..._06f775062cd30767979fe56bcb3cf7bf._comment | 8 + ...files_when_assistant_is_running__63__.mdwn | 13 + ..._3f4aadf0c856c81e15c6f5ae7f1992b4._comment | 10 + ..._a76797ee9e05e43af7947508cadd7bed._comment | 9 + ..._syncing_only_a_subset_possible__63__.mdwn | 13 + ..._a0a272a0931b27e5c94b93e42656b62c._comment | 10 + ...tead_of_re-downloading_from_S3_remote.mdwn | 3 + ..._cfb6021a36eee087705967a69967f327._comment | 10 + ..._7268b194ba72331858bc3274996b780e._comment | 11 + ...s_on_BTRFS_instead_of_symlinks___63__.mdwn | 1 + ..._85806316ed28d7a891f04fab4027141b._comment | 8 + ..._ecb411a2c4d67917b734a90bd460d44b._comment | 10 + ...__41___to_manage_photos_with_Shotwell.mdwn | 13 + ..._5e8d54daf6b7ff357619ac65fe39a2d7._comment | 12 + doc/forum/Using_Linux_static_builds.mdwn | 25 + ..._22fd266cbe68af3e754a10f1f1295e9b._comment | 13 + ..._36f69f30117ff8696425a754ab19a08b._comment | 8 + ..._64506833dad0202626239e00d1eb6490._comment | 23 + ...sync__34___to_sink_all_branches__63__.mdwn | 9 + ..._ef3d5c5e2600ffa36dd933c8a42cdf96._comment | 16 + ..._424b0c6fdfe87ca08f5d408b7684ab08._comment | 10 + ..._adaf9114c69f1268330adcebd8018fa0._comment | 10 + ...ltiple_independent_client_repos__63__.mdwn | 36 + ..._c61c28600f1079fb03ddabc950307f27._comment | 11 + doc/forum/Using_for_Music_repo.mdwn | 13 + ..._3488ed85ad98f14cb17f229225ece26e._comment | 10 + ..._c794648878cfc77558f8db862271f997._comment | 25 + ..._8c5e820f5ff7d717d64b1fd66927941b._comment | 8 + doc/forum/Using_git-annex_as_a_library.mdwn | 1 + ..._1f8e74c5856f21c53d5a91892cbef0c6._comment | 8 + ..._11a243fa7d8ac947aa9a798228dbd191._comment | 12 + ...ng_git-annex_via_command_line_in_OS_X.mdwn | 3 + ..._1c9e121f60fb6868c07f1a53b03c4ed0._comment | 8 + ..._52d8ffba82e29ac2722a8e43e469cc47._comment | 9 + ..._which_only_has_exFAT_and_no_symlinks.mdwn | 8 + ..._b9f202a30ba7e3bc264064d24454c099._comment | 12 + ..._1334a8d9f4bb60f3bf3ebabc656d98d9._comment | 18 + ..._076f22d05fad140068a540e4d835106f._comment | 8 + ..._c8446ee1b817f1824fa0df07e742015c._comment | 12 + ..._f746c1b85ee8e4b57b6819ccceabd28b._comment | 8 + ...7__FTP_TV_NAS_with_preconfigured_dirs.mdwn | 5 + ..._bd73c8d10028e1b45da9ea8f657e5064._comment | 10 + ..._16c3c994ee8fcb466e52ca0e812e5915._comment | 8 + ..._ac60f6edb76bdd541711e472eec9591a._comment | 10 + ..._2194f0600d9a90f0d9c947ea9cc213a3._comment | 8 + ..._eb7d13f6b6fa674a2536bde51bfc3fd1._comment | 48 + ..._ae323b16ddb9342e91be955408eca3b1._comment | 8 + ..._me__44___what_am_i_doing_wrong__63__.mdwn | 16 + ..._cdac15fec6fc41d5487b7f653fa718a4._comment | 14 + ..._82050b7dc367ca5968ab0306db9bd7e3._comment | 10 + ...__assistant__47__webapp_documentation.mdwn | 12 + ..._adb377589dbae7fc91001df235c6b48e._comment | 14 + doc/forum/Webapp_on_ARM.mdwn | 6 + ..._82ac40cef5b59070136527b8d81a5ce2._comment | 10 + ...vior_with_OS_X_Finder_and_Preview.app.mdwn | 12 + ..._8c8d86790a9d31518f9bb96a2d2dafee._comment | 18 + ..._b538dc2c6f122b9ce5f7569de1b03f3e._comment | 8 + ..._16e6724fa184392d4decbe0c4eb6efe6._comment | 14 + ..._e514fe2d4d0ad6a10e281939e6ab4266._comment | 15 + ..._e0eec765f72f7bf6f5a2a92c9b5dacad._comment | 10 + .../What_can_be_done_in_case_of_conflict.mdwn | 7 + ..._5ca86b099dfa08a50f656ea03bf1dcd9._comment | 12 + ..._69ee17959a92bb8359c0fd7b2a9d8dfb._comment | 10 + ..._017f4bac57a040c496e0c9d068dcfd9e._comment | 41 + ...hat_happened_to_the_walkthrough__63__.mdwn | 1 + ..._70db0e3cfb1318e95671c23726e5541d._comment | 8 + ..._f9305dd19b9b5f35e66d915b8c30374b._comment | 7 + ...o___34__git_annex_mv__34___file__63__.mdwn | 1 + ..._02d305f307b4d2ff7acd98cb36508a2f._comment | 10 + ...r__34___and___34__remote_server__34__.mdwn | 3 + ..._68734a118b7dc0c88ba67eca20953a55._comment | 10 + ...an_encrypted_ssh_remote_is_left__63__.mdwn | 1 + ..._67ee446ca6d66e2c259ea771c2c9a2b2._comment | 12 + ..._6d3cce3c8048e4aea8f0ed76473f6af1._comment | 8 + ..._bd506e1ca7307660b3b9769eb97beddb._comment | 8 + ..._cloud_providers_are_supported__63___.mdwn | 3 + ..._1f9398840144e0452a2fed9336046547._comment | 10 + ...be_enabled_for_removable_drives__63__.mdwn | 7 + ..._4341898d5ae4f09a5b06d24f5fe6192d._comment | 8 + ...up_remote_use___126____47__.bup__63__.mdwn | 5 + ..._da9c7c0e93aefc2da7409de5b138d86f._comment | 8 + ...Will_git-annex_solve_my_problem__63__.mdwn | 7 + ..._35acbdd1a7727df204d776c2e8f02b53._comment | 8 + ..._230256c19ac139dea207d89c06f70782._comment | 8 + ...x_work_on_a_FAT32_formatted_key__63__.mdwn | 3 + ..._426482e6eb3a27687a48f24f6ef2332f._comment | 8 + ..._af4f8b52526d8bea2904c95406fd2796._comment | 8 + doc/forum/Windows_support.mdwn | 6 + ..._23fa9aa3b00940a1c1b3876c35eef019._comment | 9 + doc/forum/Windows_usage_instructions.mdwn | 25 + ..._d43dbd9406da3b9747b147715eca94ac._comment | 8 + .../Wishlist:_Bittorrent-like_transfers.mdwn | 5 + ..._13544d54fb0418af4ca9200cdb045d91._comment | 15 + ..._9a7dad35bf80c684ad97892420d7370c._comment | 16 + ..._e5de748bc5da12a4a01e08cde2407dd1._comment | 14 + ..._e51530178f1e034c0fdd5c9aa9945567._comment | 8 + ..._81ea9c129d8c02097f09ef8c68f1bb11._comment | 27 + ..._3b5798414f89686526da3dfa72c0c4f2._comment | 10 + ...hlist:_Don__39__t_make_files_readonly.mdwn | 3 + ..._7148527961e2d27793810966588c8d35._comment | 10 + ...s_without_copying_the_file_data__63__.mdwn | 6 + ..._1cf4ab29dfa2cff59b86305fc0018251._comment | 10 + ..._f5ebb7f43dcef861ecc13373fb1e263f._comment | 15 + ...cting_files_based_on_meta-information.mdwn | 15 + ..._818f38aa988177d3a9415055e084f0fb._comment | 15 + ..._97e2ed48bd552d02918c4f98f963e6e1._comment | 9 + doc/forum/Wishlist:_automatic_reinject.mdwn | 14 + ...g_the_disk_used_by_a_subtree_of_files.mdwn | 10 + ..._7abb1155081a23ce4829ee69b2064541._comment | 9 + ..._b4c6ebada7526263e04c70eac312fda9._comment | 18 + ..._ded71b270b94617a8ebb3a713d46a274._comment | 19 + ..._daemon___40__for_the_assistant__41__.mdwn | 1 + ..._42aa2b61b880f4048d874210212aa63b._comment | 8 + ..._3e201039fa0e611554171ee30e69a414._comment | 8 + ..._d1074724c44f3296cb438b2d526d8728._comment | 8 + doc/forum/Wishlist:_mark_remotes_offline.mdwn | 12 + ..._9e3901f0123abb66034cce95cc5a941a._comment | 14 + ..._d10e3d90cf421ae425e64ab266ea811b._comment | 12 + ...ptions_for_syncing_meta-data_and_data.mdwn | 13 + ...ecial_characters_if_filesystem_is_FAT.mdwn | 5 + ..._5d33bcbd862537f53edd91dcff2b8977._comment | 13 + .../XBMC__44___NFS___38___git-annex_.txt | 27 + ..._86480f31d410e903766f82e6ecf83e1c._comment | 12 + ..._d8ed4dd51d3050db691a8abdec24cd42._comment | 10 + ..._42b80ee51ce25775bf4532f53a8ecfe3._comment | 11 + ..._01767f3f864954cf8080274e206da9d4._comment | 8 + doc/forum/XMPP_authentication_failure.mdwn | 15 + ..._19c7c3aa79d209d613d2e061e3129690._comment | 8 + ..._870059fed451e8377e5d382464ecc34b._comment | 8 + ..._1a7ff955e9173f13d10b75f203792384._comment | 10 + ..._d59031ebc0dd3abc1f4c96878328362c._comment | 8 + ..._c37ef477bef7efdb79dd05dce90dfde6._comment | 10 + ..._48cabea4c2caf5b3bd854df3aaa17d3d._comment | 8 + ..._14cd9b67806db93c3af055d88c9a910a._comment | 10 + ..._151d3fd7d3cceb30fd20a8f3bd54036c._comment | 24 + ..._fbb9eba65fbb72201f08511945fbcf8c._comment | 9 + ...provide_some_kind_of_debug_data__63__.mdwn | 9 + ..._1ba0735141fc6a21ac15913f4cacefae._comment | 8 + ..._16994dc86b87592fc62799e2d206d172._comment | 10 + ..._6afd424edc4095b8f71b136de2a9e64d._comment | 10 + ..._1381b6a927410642c6a93aa8354be791._comment | 17 + ..._c5b33c7a8aa8e6d0f9349510dac2366d._comment | 12 + ..._9913d2983ba2744ed24911f74988e4c7._comment | 11 + ..._ad6f385a2b95803eb9d81dfe76359551._comment | 10 + ...tch_queries_to_the_location_log__63__.mdwn | 45 + ..._01cbfc513c790faef3a3ede5315d3589._comment | 10 + ..._fe28dfb360caa12d5d5bc186def3eb45._comment | 35 + ..._9bb30ab62febe4ef63bed49f831a473a._comment | 8 + ..._7832f0347a41b8204538c01b72487803._comment | 19 + ...Pairing__34___more_than_two_computers.mdwn | 11 + ..._80f7a4bb3c66b11e566043407b611bbf._comment | 10 + ...du__34___equivalent_on_an_annex__63__.mdwn | 5 + ..._a41bd02361aa961e5285aeaf1ea062be._comment | 10 + ..._28ba62a546f5cc8f416491423d743d8a._comment | 10 + ..._8d97f40c1d14b7230f3656a00a99cf80._comment | 8 + ..._baa8fbbdd5c449a0dc2bb622cb4a47ce._comment | 18 + ..._2ee6cbbfe54a2e7b6e8eb539c18e663d._comment | 10 + ..._48f6a2761a34b7f991325f1d24e2c5ff._comment | 8 + ..._d632baff41b8582f1a79bc5018c68545._comment | 8 + ...__39__t_send_it_to_working_directory..mdwn | 11 + ..._0c0a5999a92bf5880f2113177dc67cc2._comment | 11 + ..._c18083d9054f66f0bd51d63452af07eb._comment | 8 + ...nex_lock__34___very_slow_for_big_repo.mdwn | 7 + ..._044f1c5e5f7a939315c28087495a8ba8._comment | 16 + ..._e854b93415d5ab80eda8e3be3b145ec2._comment | 13 + ..._95c110500bc54013bc1969c1a9c8f842._comment | 8 + ...I_would_like_to_have_file_x_y_z__34__.mdwn | 5 + ..._bfeb1446dee4d2f52ef25fabfb8cc8f6._comment | 11 + ..._e60f2bbc1c058993472fd920edbc75fc._comment | 8 + ...n_denied__34___in_fsck_on_shared_repo.mdwn | 17 + ..._3a5202ef2116ebb5559b6f4d920755fc._comment | 10 + ..._86663eeb75b0477f53c45f26c8e4b051._comment | 8 + ..._c336b2b07cd006d378e5be9639ff17ec._comment | 10 + ..._1339cd27ca2955f30b01ecf4da7d6fe8._comment | 10 + ..._refs__47__heads__47__git-annex__34__.mdwn | 34 + ..._e50188896df347f1d92e20a52053aa14._comment | 10 + ..._d67793f7c969f64943d1fd54a1208c2b._comment | 15 + ..._3523884833b5fd458a35f898797bf897._comment | 10 + ..._02c32c2521ba1a1eaa19eaca7281f2a6._comment | 10 + ....3.2_requires_syb___61____61__0.1.0.2.mdwn | 16 + ..._fae6e88115d175239fc55cef4c33fb2c._comment | 13 + ..._4c7a75638e8717132ccde949018d6008._comment | 10 + .../_preferred_content:_lastpresent.mdwn | 1 + ..._7610cd866b256d36646b642eb5f8cae5._comment | 14 + ..._d25666a173b78213d583f029fd166d06._comment | 10 + .../advantages_of_SHA__42___over_WORM.mdwn | 5 + ..._96c354cac4b5ce5cf6664943bc84db1d._comment | 8 + doc/forum/android_binary-only_download.mdwn | 9 + ..._aab206e0bf0bb5ff47c7cc9795f12f92._comment | 8 + ...y_for_web_remote_with_SHA256E_backend.mdwn | 12 + ..._d1605a6e3b4d6863f4089218994ce564._comment | 29 + ..._d249ff27fa3d9ac3ca32485cdef49930._comment | 8 + doc/forum/archaeology_of_deleted_files.mdwn | 36 + ..._48f27df03ec18d2c27cf6b70dcf71dc5._comment | 10 + ..._c698cd10c8038bac45bd1049506a27c3._comment | 8 + doc/forum/archival_and_multiple_users.mdwn | 8 + ..._fc4ee256f03a7c189d687caf4a34e21e._comment | 9 + ..._a96d57d4bb567ac9b0b9167d5b1be011._comment | 12 + ..._bd44634b04732ffb91154c61ef9cf828._comment | 14 + ..._b89a56a5f1cd641f87925c7a5f74bcec._comment | 13 + ..._81293bf5dc8ad4552712c2083fd589c9._comment | 19 + ...ne_-_how_do_these_play_together__63__.mdwn | 10 + ..._d90d1d599ce557af03c6f0f2ea188212._comment | 10 + ..._58b1af497cab132acb28cb5f9283ec2a._comment | 8 + ..._37d4fd8f69e8066b5aa19454b714e443._comment | 11 + ..._a974e2105774d4f82ad286ff0792ba84._comment | 10 + ...d__backup_remote:_Howto_restore__63__.mdwn | 38 + ..._70200f871b9df49261f32752a6bb0e67._comment | 14 + ..._173da510b45f0320ae8aa2df9f14ae7b._comment | 11 + ...zealously_moving_stuff_to_other_repos.mdwn | 5 + ..._6bd240edf1868615024ff11c24c3d52c._comment | 13 + ..._37c5e9a7669b5b94fbadb8792a765316._comment | 8 + ..._87aa4c5942929be81ddc1e2795d56f0e._comment | 9 + doc/forum/assistant_without_watch__63__.mdwn | 13 + ..._be1f7c038426e53209a85ae1119269d5._comment | 15 + ...ders_for_git-annex_to_aid_development.mdwn | 34 + ..._7e88f815e8d9652ef18ea6d54b118962._comment | 8 + ..._fef17a10226af5671495c2929653c337._comment | 8 + ...nstorming:_git_annex_push___38___pull.mdwn | 28 + ..._3a0bf74b51586354b7a91f8b43472376._comment | 11 + ..._b02ca09914e788393c01196686f95831._comment | 14 + doc/forum/bash_completion.mdwn | 1 + ..._5c42c0c8e7fc3224bf5406880f9fd0c4._comment | 8 + ..._6cbe3c825db99bf9188a0de8bb937d5b._comment | 8 + ..._948c40f1e46ca220d61365aebcd4f6d7._comment | 136 + ..._dbae348b230b780cda91ed8576b8f9fa._comment | 8 + ...batch_check_on_remote_when_using_copy.mdwn | 34 + .../benefit_of_splitting_a_repository.mdwn | 10 + ..._93a86cb03b66e7ab5dd7146e7b86c9e8._comment | 15 + ..._4e2fed247298d620fee7be883a1e86a6._comment | 15 + doc/forum/cabal_install_fails_on_uuid.mdwn | 23 + ..._2a3963e21bc7ff526124b902cb0b6ad2._comment | 8 + ..._1609525998e2b36c04d67f4d988139c0._comment | 10 + .../can_I_only_add_my_own_files__63__.mdwn | 27 + ..._767d647af9d0345f337338d6319071fa._comment | 10 + ..._0c3306ffb38b97b54e1e0436d12c1876._comment | 8 + .../can_git-annex_replace_ddm__63__.mdwn | 13 + ..._aa05008dfe800474ff76678a400099e1._comment | 12 + ..._008554306dd082d7f543baf283510e92._comment | 19 + ..._4c69097fe2ee81359655e59a03a9bb8d._comment | 12 + ...ncrypted__41___rsync_remote_on_MacOSX.mdwn | 18 + ..._21f0101447623f5a0cf9e72c3ff463bb._comment | 8 + ..._6234ca64bd03a0e15efbe8f5c204338a._comment | 8 + ..._5ac2b520a907e232984eb513ce088054._comment | 8 + ..._183dd1c29f66539193e7c0b73f329430._comment | 9 + ..._c920d04ffe332caed9d223fa0ac42746._comment | 7 + ..._7a3cf0853a8ec7b996e19b5e80145d21._comment | 8 + doc/forum/central_non-bare_and_git_push.txt | 9 + ..._76d0c73c8985e860eb86333c63be6340._comment | 8 + doc/forum/clear_box.com_repository.mdwn | 1 + ..._2e839d8f974269c80a9fca183712350f._comment | 8 + ..._8f9c7248a148a24ae2aba39c4a79a6d1._comment | 8 + ..._f64ad21e5abfbf4e1f925b3d651bdba3._comment | 10 + ..._f8c06ac9b23b51cf18d362c260fc47a9._comment | 13 + ..._61d401b29322802cb25896503f3e6514._comment | 8 + doc/forum/cloud_services_to_support.mdwn | 16 + doc/forum/cloudcmd.mdwn | 6 + ..._current_workdir_state_in_direct_mode.mdwn | 5 + ..._748481ff00374f570284bd4571584874._comment | 10 + .../confusion_with_remotes__44___map.mdwn | 113 + ..._a38ded23b7f288292a843abcb1a56f38._comment | 10 + ..._cd1c98b1276444e859a22c3dbd6f2a79._comment | 8 + ..._18531754089c991b6caefc57a5c17fe9._comment | 24 + ..._3b89b6d1518267fcbc050c9de038b9ca._comment | 11 + ..._27801584325d259fa490f67273f2ff71._comment | 16 + ..._496b0d9b86869bbac3a1356d53a3dda4._comment | 8 + ..._9a456f61f956a3d5e81e723d5a90794c._comment | 27 + ...t_way_to_add_two_preexisting_datasets.mdwn | 25 + ..._c5c3ff25c9f5e34db222b5f4ae58b093._comment | 10 + ..._ee3ecc86990ac5a8d0c4fdfb482a7594._comment | 16 + ..._e29bf8b848da04c761dc601ac979ac14._comment | 11 + ...could_not_read_from_remote_repository.mdwn | 36 + ..._27d4d1556a80c06505ed3d8a9422d082._comment | 8 + doc/forum/dot_git_slash_annex_slash_tmp.mdwn | 5 + ..._14b74438bb1e3e02cff7926d774ba09a._comment | 8 + ..._b1f717342c1c8ea42a451caa2d936622._comment | 8 + ..._e2c6ad99333018c8c46e736da416b8ef._comment | 8 + ..._1a35ef8cb89e0cd392f6e9fcee1fb92c._comment | 8 + ..._f4cc36c493d7c20fbaf949edd38e1252._comment | 15 + ..._69268f8aa29e807a56248f1fac86aa41._comment | 10 + ..._0ffb0c803c232a1587f956f16113aeb7._comment | 27 + ..._c303e28825241733d69fca74f2015fc6._comment | 13 + ..._3f0b376e37bd092b8d46c46bb1940e35._comment | 14 + ..._615641b3dd176d4b3a5bbfb521098e38._comment | 9 + ..._4600fa9234a787004ea0e0dbb36184b9._comment | 8 + ..._4f5cd0d0d4db0479c1ad86ffdc5ae434._comment | 8 + ...working_when_using_git_annex_assistant.txt | 18 + doc/forum/endless_password_prompt_loop.mdwn | 8 + ..._cceba12ed25cd671c7cee5a28631163e._comment | 10 + ..._f0cb86b45eb289f35197c43f83660a8f._comment | 8 + ...error_in_installation_of_base-4.5.0.0.mdwn | 14 + ..._0b2f79c014e0dd9badd52b8b6aa47e0c._comment | 19 + ..._3badd64e48fbb174cd7de1ac9589bedf._comment | 31 + ..._d8190061ac1c683a7b699cf42e9db694._comment | 8 + ..._49a4fcd2dc4f97d4055b5051feea5e3b._comment | 8 + ...e_of_massively_disconnected_operation.mdwn | 33 + doc/forum/exclude_files_from_annex.mdwn | 10 + ..._82e7de5e631bae3b347815586274a936._comment | 25 + ..._03d4599fdceb3dff184eed82824674bc._comment | 12 + ...xpire_files__44___move_to_other_hosts.mdwn | 19 + ..._ddcc2a00be1ae96a352d75a443458bcf._comment | 14 + ..._7a4c3858c5eae409d04de3f9da43b57e._comment | 17 + doc/forum/exporting_annexed_files.mdwn | 4 + ..._e08e4c79588e17fb2f1cdf53d9fab7ea._comment | 16 + ..._15dc3024417b5b2ff3544a08beacab34._comment | 8 + ..._86f0e0f767a84a0f583e121d36cb7d48._comment | 8 + ...oes_not_exist__40__v_3.20111231__41__.mdwn | 26 + ..._990197bf01351dc1ccbe1940d5084adb._comment | 7 + ..._3bb1d21b7f0d0bd6d59190ae9d246d46._comment | 12 + ..._692f268218690437138ae0540c879425._comment | 16 + doc/forum/first-time_setup_git-annex.mdwn | 7 + ..._a58d83ee3a7c2251d9a775847223f8ca._comment | 13 + .../flickrannex_--_not_sure_I_get_it.mdwn | 7 + ..._57ea9f26760f970a70f09934d31a79b5._comment | 8 + ..._ba93563b4ce1f6497a9f1d5e6eb0d1bb._comment | 8 + ..._74f143965f48c89a3583acf1b6a7635a._comment | 9 + ..._493bb86dedfa91ccc0c9be4045953ee4._comment | 8 + ..._2c410aa478b21c0e6eb0e4d54bc8c362._comment | 8 + doc/forum/fsck_gives_false_positives.mdwn | 6 + ..._b91070218b9d5fb687eeee1f244237ad._comment | 15 + ..._f51c53f3f6e6ee1ad463992657db5828._comment | 10 + ..._692d6d4cd2f75a497e7d314041a768d2._comment | 10 + ..._7ceb395bf8a2e6a041ccd8de63b1b6eb._comment | 10 + ..._86484a504c3bbcecd5876982b9c95688._comment | 13 + ..._1d4fbbd212fa92967abda346323031f4._comment | 8 + doc/forum/gadu_-_git-annex_disk_usage.mdwn | 7 + ..._f632a62c4dbbf01b29f146893d7725f9._comment | 15 + ..._73461da2d55d040cb43e0db286975821._comment | 21 + ..._6c4fb123091bde435c18ac3dfd5a9b77._comment | 8 + ..._067d0ffe8900751bd2d2743254ac4d77._comment | 11 + ..._ec8b57426e4d82c3392eb7dd683f2ddc._comment | 17 + ..._38296fef5a2dc5794c2dc09df676b8c1._comment | 18 + ..._1bcc94f9982c6cfd0888f3dba0f9221e._comment | 8 + ..._4365cd3031456fac1b563ee72984638e._comment | 18 + ..._2b03d7b857497cb811e992f85700cdcc._comment | 12 + ..._03a4dfaf3bd73d41c6f3c3fab0a6a922._comment | 8 + ..._fc6ddb4dc075ee42368863c1b026dbf7._comment | 13 + ..._f03254e518cbdda73e4b88e72476275d._comment | 8 + .../get_and_copy_with_bare_repositories.mdwn | 7 + ..._a6e4628c0770e3f5e81348a6f29dd845._comment | 10 + ..._652fa1bae5c2bb63dcffcbda97a567c4._comment | 8 + ..._annex_to_do_a_force_copy_to_a_remote.mdwn | 11 + ..._3deb2c31cad37a49896f00d600253ee3._comment | 14 + ..._627f54d158d3ca4b72e45b4da70ff5cd._comment | 12 + ..._3f49dab11aae5df0c4eb5e4b8d741379._comment | 8 + .../git-annex___38___ikiwiki_experiment.mdwn | 28 + ..._9f74449ec91577dbf6095f4beafac293._comment | 10 + ..._e034585c8b51cc30b35c1f7ae68205bf._comment | 14 + ..._fbbd47c3dbe8de24b0df664e4afd5cb8._comment | 14 + ..._55da5c3c41c13b08590ce1ff8117cef6._comment | 23 + ..._f67823351164ddfe7d595685c3679652._comment | 10 + ..._d5cc91164772849d027fed5f962d9000._comment | 10 + ..._cb4ec7ed3c39d0649133191a85ea6ab3._comment | 17 + ..._86565e5e1508ff1862f88975446650a2._comment | 12 + .../git-annex_across_two_filesystems.mdwn | 30 + ..._53167648b8b70b41d19ca662a5f3687e._comment | 26 + ..._39adeebc1af9c437f1fc2e00c07509bf._comment | 11 + ..._f4e3f28db005301adeef7ccd2c9998fb._comment | 18 + ..._53fa7ac6f80e3281768a7bfd3d438b34._comment | 10 + ..._2e1be54c01970ef3456e8af4aaf00cbf._comment | 10 + doc/forum/git-annex_and_tagfs.mdwn | 14 + ..._887c74cb61d30198322ef74ebc80f950._comment | 8 + ...ex_assistant_with_2_dedicated_servers.mdwn | 11 + ..._533ade2215c879cd46782fd66a97b167._comment | 16 + ..._c9ae51d7b772cf7a91d90925f74d2b60._comment | 10 + ..._41fbee0ec9bc890e309bcd48a58c3851._comment | 18 + ..._571cffc0beb8ba5fc936db6971cd3d62._comment | 8 + ..._53a79af2d8e3abe50b983bf91972b8f2._comment | 14 + ..._c0ba3e8b7fbf8a5ed718001cec8df676._comment | 35 + ..._60c39bc8ef74e80e72381d514b6dd223._comment | 8 + ..._6241120b4325c905661ef72881f4d7af._comment | 20 + ..._cab00b8fa195340f4d3fdaf5af975b57._comment | 8 + ..._e24df9a1c68724a912b8ac6533d9bd25._comment | 16 + ..._ace3dc7c60c710a04b0a587206b341c4._comment | 8 + ..._9a96bc970a17ed62b0ceb7aa3f0a6f8b._comment | 14 + ..._ea88e0696f6e25e6904248a323f6cc36._comment | 8 + ...Meego_Harmattan__41___and_Sailfish_OS.mdwn | 7 + ..._301a51c48c3d54f9d37feace26a772f8._comment | 8 + .../git-annex_communication_channels.mdwn | 10 + ..._198325d2e9337c90f026396de89eec0e._comment | 17 + ..._c7aeefa6ef9a2e75d8667b479ade1b7f._comment | 8 + ..._1ff08a3e0e63fa0e560cbc9602245caa._comment | 8 + ..._1ba6ddf54843c17c7d19a9996f2ab712._comment | 8 + ..._404b723a681eb93fee015cea8024b6bc._comment | 8 + ..._0d87d0e26461494b1d7f8a701a924729._comment | 8 + ..._2c87c7a0648fe87c2bf6b4391f1cc468._comment | 10 + doc/forum/git-annex_on_OSX.mdwn | 1 + doc/forum/git-annex_on_Samba_share.mdwn | 9 + ..._3e9cfdf2c088e48c967ad08f79966742._comment | 12 + ..._9d3df393b7b727653598453d94dd33db._comment | 12 + ...on_Ubuntu_13.04_and_13.10_not_working.mdwn | 12 + ..._209956f3812450a43986d4ca5e647da6._comment | 10 + ..._12a58b8efe545e09b64760c87849839b._comment | 12 + ..._e0f7328603256f25c3be3706ecc9c76c._comment | 12 + ..._6bb8e4522241556fb82784d9b834cbfe._comment | 10 + ..._89a5296b461d400b51006074a13a4560._comment | 8 + ..._62daef4b4392c951b914a01b3effac11._comment | 8 + ...git-annex_on_archlinuxarm__44___armv6.mdwn | 20 + ..._88fa644df8614c2db0d092b3eb1d3156._comment | 10 + ...nex_pre-commit_eats_all_my_4GB_of_ram.mdwn | 24 + ..._ff16c7932b60b85c744bafc48bb040e4._comment | 13 + ..._5599cddf579d18f70cab6e48d04ae99d._comment | 12 + ..._412941e9385f63153b23695641e71deb._comment | 15 + ..._112ad140d9006c530db2121bec24de30._comment | 10 + ..._9178023b95683a649355f291165a1467._comment | 8 + ..._9251203421c1c3c3aed7828c4b97ecb8._comment | 17 + doc/forum/git-annex_teams___47___groups.mdwn | 5 + ..._0450673ab74f184a47ac7bab568d26dc._comment | 8 + ...nex_unused_not_dropping_deleted_files.mdwn | 34 + ..._2152cfb09675e46e7492e198dd3ea094._comment | 8 + ..._97e666dbac9de2a5e688921cba8a42e9._comment | 20 + ..._d7b0e9515bface28f3650b8aa20ec2f4._comment | 8 + ..._5816f6cab42e27e724e735368f693b09._comment | 8 + ..._8e97f39225515f0bf8b168dfd6a0efab._comment | 10 + ..._bef37f8ec9c337387b79ffd6d56fe425._comment | 10 + doc/forum/git-assistant_clarification.mdwn | 11 + ..._8f553e59da12f798b854a457b96b5778._comment | 14 + ..._06cf62b599edea6ad8396776f0081494._comment | 10 + ..._36f0bd6e7a824e6ef40a309850bb087b._comment | 15 + doc/forum/git-remote-gcrypt.mdwn | 1 + ..._175c8c35d9bbb470fcc17697eb8cc6b8._comment | 12 + ..._fdcaf507e14c995636dd93a41e488df3._comment | 8 + ..._f4e830f961dbe1c60ddd277b9d888133._comment | 8 + .../git-status_typechange_in_direct_mode.mdwn | 48 + ..._12c8b67aadbfa2b073e12997a55d49a7._comment | 12 + ..._005d1b17f3c2ae192aa30c6e5163989e._comment | 8 + doc/forum/git-subtree_support__63__.mdwn | 9 + ..._4f333cb71ed1ff259bbfd86704806aa6._comment | 10 + ..._73d2a015b1ac79ec99e071a8b1e29034._comment | 8 + ..._c533400e22c306c033fcd56e64761b0b._comment | 8 + ..._75b0e072e668aa46ff0a8d62a6620306._comment | 8 + ..._f5ec9649d9f1dc122e715de5533bc674._comment | 8 + ..._85df530f7b6d76b74ac8017c6034f95e._comment | 8 + ...nex_add_crash_and_subsequent_recovery.mdwn | 25 + ..._062d0153a379c1ba1df8585b90220d3d._comment | 18 + ..._6fc6be43c488c468a4811cd0a1360225._comment | 19 + ..._45efaaf27d9b580c4c75cbcdc4f65b64._comment | 10 + ..._c560eae40867512b0af2cbef161fc8ac._comment | 8 + doc/forum/git_annex_alternative.mdwn | 10 + ...istant__44___share_with_other_devices.mdwn | 3 + ...-to_blah_much_slower_than_--from_blah.mdwn | 15 + ..._5b6e0b749b01a97a6b52a2c1cca6e35a._comment | 12 + ..._8f2567f4c4f6db2078211a87689757d3._comment | 17 + ..._ab98121076b88f351fc8cd9197e6bf64._comment | 8 + ..._cb13328add1b7a812efd817ad3dd1a4f._comment | 8 + ...glish_filenames.__Rsync_problem__63__.mdwn | 22 + ..._292ee7c8b37cbd13f03eb67d0359b99e._comment | 10 + ..._f6341119fcfde5d8160c8f603b1a6fea._comment | 10 + ..._8ad3a1d1fe5995d61e5e137280bc76c3._comment | 8 + ..._86b61b0484f3f4ecff657e46333b3d4f._comment | 8 + ..._5ffac00d08d26acaba8c3513b24c4d65._comment | 10 + .../git_annex_get_creates_a_new_uuid.mdwn | 6 + ..._004c87183968c326058bd3159a5baa0b._comment | 14 + ...___47___metadata_in_git_annex_whereis.mdwn | 1 + ..._7fba10b85f4d9289c7782eccef46949e._comment | 8 + ..._7dcec124ea7d0291ed40d80e2ffd5c7e._comment | 8 + ...annex_sync_dies___40__sometimes__41__.mdwn | 22 + ..._48bbac0545bf13bbf04da723e418d037._comment | 14 + doc/forum/git_annex_test_on_windows.mdwn | 5 + ..._258ac5cfa2f5d24e737d94dc48f06899._comment | 10 + doc/forum/git_pull_remote_git-annex.mdwn | 11 + ..._9c245db3518d8b889ecdf5115ad9e053._comment | 36 + ..._0f7f4a311b0ec1d89613e80847e69b42._comment | 14 + ..._1aa89725b5196e40a16edeeb5ccfa371._comment | 14 + ..._646f2077edcabc000a7d9cb75a93cf55._comment | 37 + ..._4f2a05ef6551806dd0ec65372f183ca4._comment | 10 + ..._3925d1aa56bce9380f712e238d63080f._comment | 8 + ..._24c45ee981b18bc78325c768242e635d._comment | 8 + ..._7e76ee9b6520cbffaf484c9299a63ad3._comment | 12 + doc/forum/git_tag_missing_for_3.20111011.mdwn | 1 + ..._7a53bf273f3078ab3351369ef2b5f2a6._comment | 8 + doc/forum/git_unannex_speed.mdwn | 1 + ..._10cf326248f4e89e1f75bf97d7574763._comment | 7 + ...ls_and_daily_free_retrieval_allowance.mdwn | 6 + doc/forum/hashing_objects_directories.mdwn | 27 + ..._c55c56076be4f54251b0b7f79f28a607._comment | 12 + ..._504c96959c779176f991f4125ea22009._comment | 14 + ..._9134bde0a13aac0b6a4e5ebabd7f22e8._comment | 12 + ..._0de9170e429cbfea66f5afa8980d45ac._comment | 12 + ..._ef6cfd49d24c180c2d0a062e5bd3a0be._comment | 12 + ...ing_git-annex_on_top_of_existing_repo.mdwn | 12 + ..._4cb38d71c943657c5ba0896cd70d2e64._comment | 8 + ..._b5e94c10ebbed9125c7e2332f75709ca._comment | 13 + ..._2b3b93bbc60fbc24d436231954d6822a._comment | 10 + ..._2dfda33ffa39b92b16c8bd9005e1cefe._comment | 21 + ..._96b1eb1e8e9f315c646f4686870f9b52._comment | 10 + ..._e85c3fa1d17f1d6ec625b9c4f9b698c3._comment | 47 + ...e_from_encrypted_special_remote__63__.mdwn | 14 + ..._d4dc451892e7a6e230bf32adb7f3f9fa._comment | 8 + ..._79340bf3c0691073a9808c5ac2da0a3d._comment | 14 + ..._6302fb6e5bb7cbddf2cfe74d98d32897._comment | 12 + ..._e3d95bc09c9fb21e8e9bbacc642aa60f._comment | 8 + ..._f2f0a1c2fb0c6323707b11e2b06aa2db._comment | 8 + ..._66fe80e634a8f13cce18fe68974ec67a._comment | 8 + ...nks_but_keep_historical_file_contents.mdwn | 7 + ..._cba76311e146dabb8ffc789bf4c8b714._comment | 14 + ..._8d99c50fc1347367ccc0714e8d1af385._comment | 40 + ..._a7a9c55c2ad448179dff5d5b69976c7d._comment | 10 + doc/forum/howto_update_feed.mdwn | 14 + ..._bec356619f370a618f19a187d09d2e35._comment | 8 + ..._84dfb80ba3db8d41164eb97022becae3._comment | 8 + ..._20166db298c10074e062aecad59ffd71._comment | 20 + ..._f040e31b763fc9a7aa092442b4d6b8e8._comment | 20 + doc/forum/incompatible_versions__63__.mdwn | 1 + ..._629f28258746d413e452cbd42a1a43f4._comment | 8 + doc/forum/known_and_local_annex_keys.mdwn | 14 + ..._3cb4828dc7116e4cf49e119f055ae9a3._comment | 20 + ..._68f20c881eafe986694bde10571cf1c0._comment | 10 + ..._e195a7091a06ce0427bb28aca9a17d04._comment | 8 + ..._d81f0bf7465832cb676fd89f5d53ec18._comment | 8 + doc/forum/linux_standalone_tarballs.mdwn | 1 + ..._5c3ceb845a45e50784f7098bfbf94df1._comment | 13 + doc/forum/location_tracking_cleanup.mdwn | 24 + ..._7d6319e8c94dfe998af9cfcbf170efb2._comment | 10 + ..._e7395cb6e01f42da72adf71ea3ebcde4._comment | 15 + ..._c15428cec90e969284a5e690fb4b2fde._comment | 10 + doc/forum/lost_in_walkthrough....txt | 78 + ..._51b703b961ca762f0359e1c169f1ee75._comment | 8 + ..._a9de0401a103bdd4401ba2d5983dc54a._comment | 11 + ...use_of_my_shiny_new_rsync.net_account.mdwn | 20 + ..._0ebe509b768d46081db2100f5b712ef7._comment | 10 + ..._ef63d893531d93d2eb09f48f8baff4dd._comment | 13 + ...n_pages_in_the_prebuilt_linux_tarball.mdwn | 1 + ..._a7bc2e84e6d7c0e2de5900685207af78._comment | 9 + doc/forum/managing_multiple_repositories.mdwn | 3 + ...update_of_.git__47__annex__47__objects.txt | 8 + ..._ea6ec91150c8962e2711631f2422bf3a._comment | 10 + doc/forum/many_remotes.mdwn | 24 + ..._existing_git_repository_to_git-annex.mdwn | 66 + ..._4181bf34c71e2e8845e6e5fb55d53381._comment | 10 + ..._5f08da5e21c0b3b5a8d1e4408c0d6405._comment | 60 + ..._f483038c006cf7dcccf1014fa771744f._comment | 12 + .../migration_to_git-annex_and_rsync.mdwn | 33 + ...__files__42___into_an_annex.__bummer..mdwn | 3 + ..._752db25abb647804a1cc12c5b247378a._comment | 10 + ..._db6f4959c35732f72e7a90bd9f4c665c._comment | 8 + .../multiple_routes_to_same_repository.mdwn | 2 + ..._26c1734d41d5374f18fc688d862d6b8e._comment | 8 + ..._d119ab485fb2d5512c15372efdb2327d._comment | 8 + ...___40__for_tagging_photos__41____63__.mdwn | 11 + ..._96beb9ea895c80285748adb940b4f57d._comment | 9 + ..._985065c1feed9300631dac7a2701f669._comment | 8 + .../multiple_urls_for_the_same_UUID.mdwn | 26 + ..._de7410d8824a864c4d106c9f1afaec3f._comment | 8 + ..._309a86cf7e08448be64357a30d8b56ae._comment | 13 + ..._fa97a45fc1392935fd5e0714db999bc2._comment | 14 + ..._139178b1ba45b62eec0c89a660c0c81e._comment | 8 + doc/forum/new_microfeatures.mdwn | 59 + ..._058bd517c6fffaf3446b1f5d5be63623._comment | 8 + ..._41ad904c68e89c85e1fc49c9e9106969._comment | 8 + ..._a1a9347b5bc517f2a89a8b292c3f8517._comment | 15 + ..._5a6786dc52382fff5cc42fdb05770196._comment | 18 + ..._3c627d275586ff499d928a8f8136babf._comment | 8 + ..._31ea08c008500560c0b96c6601bc6362._comment | 8 + ..._94045b9078b1fff877933b012d1b49e2._comment | 10 + .../nntp__47__usenet_special_remote.mdwn | 18 + ..._171a0b95b1f95cfd82073e88bdefaab9._comment | 10 + ..._48736ed17c98ffcfb13ec00b901b2dd6._comment | 13 + doc/forum/non-bare_repo_on_cloud_remote.mdwn | 6 + ..._da0c023af7c78f1ef1cfe1143a900a9f._comment | 10 + ..._71baea93f6caaf7b81a9ac00bee91e5e._comment | 67 + doc/forum/not_getting_file_contents.mdwn | 1 + ..._4a0f7f4de9c9bc4d13db033cb75d20af._comment | 10 + ..._dc7403e1b551552f9fd00da6a1453570._comment | 8 + .../one_annex_versus_many_annexes__63__.mdwn | 10 + doc/forum/one_or_many_annexes__63__.mdwn | 7 + ..._656d96011801d67a45b0b3bb3d70fa63._comment | 8 + ...nce_and_multiple_replication_problems.mdwn | 17 + ..._a2cdf1a4840f099f6bc941fd8de966c7._comment | 16 + ..._e65b360706c66ede6e0e841b2ebbbfbc._comment | 8 + ...it_on_ssd__44___annex_on_spindle_disk.mdwn | 12 + ..._b3f22f9be02bc4f2d5a121db3d753ff5._comment | 8 + ..._f94abce32ef818176b42a3cc860691ae._comment | 20 + ..._0c8e77fe248e00bd990d568623e5a5c9._comment | 10 + ..._4b7e8f9521d61900d9ad418e74808ffb._comment | 8 + ..._7abbbe7db3988a2d239d11b0a4c597e7._comment | 10 + ..._46bd45fdc25d9c583f4ebe3a9730ab9f._comment | 8 + doc/forum/post-copy__47__sync_hook.mdwn | 14 + ..._c8322d4b9bbf5eac80b48c312a42fbcf._comment | 11 + doc/forum/preferred_content.mdwn | 11 + ..._9c9e5f2ee5ae4d8459358ad16f879ef1._comment | 10 + ...ontent_settings_for_multiple_symlinks.mdwn | 7 + ..._70da012d96ab576151fe3e081ef905d1._comment | 10 + ..._ccea74d8b5a4de1f3cd1f6da6694ae0e._comment | 8 + ..._fab70c642d5aaf26de05270860281030._comment | 10 + ..._3cbd06de53b6a13e2741124a8e7b5b5b._comment | 10 + ..._963558ab261d8a6315402d371e8348f9._comment | 10 + doc/forum/public-web-frontend.mdwn | 16 + ..._c73bd2dfe020c25eaad1c0707dd2db01._comment | 9 + ..._0026d7be6b17e50d86b3b54985882f80._comment | 14 + doc/forum/pulling_from_encrypted_remote.mdwn | 12 + ..._e9d6a9a6e01d01edb41a11b0da11d74d._comment | 10 + ..._8d0db2ff65ce935c6e68044a3e0721a8._comment | 16 + doc/forum/pure_git-annex_only_workflow.mdwn | 46 + ..._683768c9826b0bf0f267e8734b9eb872._comment | 8 + ..._6b541ed834ef45606f3b98779a25a148._comment | 30 + ..._ca8ca35d6cd4a9f94568536736c12adc._comment | 10 + ..._00c82d320c7b4bb51078beba17e14dc8._comment | 8 + ..._b63568b327215ef8f646a39d760fdfc0._comment | 32 + ..._cb7c856d8141b2de3cc95874753f1ee5._comment | 12 + ..._a32f7efd18d174845099a4ed59e6feae._comment | 32 + ..._66dc9b65523a9912411db03c039ba848._comment | 15 + ..._9b7d89da52f7ebb7801f9ec8545c3aba._comment | 12 + ..._dc8a3f75533906ad3756fcc47f7e96bb._comment | 20 + ..._afe5035a6b35ed2c7e193fb69cc182e2._comment | 24 + ..._3660d45c5656f68924acbd23790024ee._comment | 12 + ..._33db51096f568c65b22b4be0b5538c0d._comment | 15 + ..._6e5b42fdb7801daadc0b3046cbc3d51e._comment | 12 + ..._ace319652f9c7546883b5152ddc82591._comment | 14 + doc/forum/purge_files_with_no_copies.mdwn | 3 + ..._12b578689eb8d5d38c06261ec65e2109._comment | 12 + ...out_assistant_and___47__archive__47__.mdwn | 22 + ..._97890e26072af9277144651e3fdcada0._comment | 10 + ..._542bf265e35a976ac76767762d67d617._comment | 104 + ..._bafe99159df2adcd5fecc0d67bbf05a5._comment | 8 + ..._e77fa2992d9302a49a05f514c81612ca._comment | 10 + ...ndirect_renames_on_direct_repo___63__.mdwn | 254 + ..._f4b0a14373c75cb752597c832e296bcc._comment | 17 + ..._8c86dfc99f0b9040402c9d746decda53._comment | 41 + ..._0246fff6c7c75f6be45bd257ec3872a5._comment | 75 + doc/forum/recover_deleted_files___63__.mdwn | 66 + ..._d7abb7c45c6ec2723a04f153ed215453._comment | 8 + ..._8ea2acaa30d3ee7e9f75310f4ec859b2._comment | 8 + ..._376de81c70799bf409be189a48234815._comment | 12 + .../recovering_from_repo_corruption.mdwn | 11 + ..._01fc85037e24fc70e5c5329898cf6781._comment | 15 + ..._3bd1c0bf25a0e892e711a60f53cd5298._comment | 8 + ..._679dde8ca0081fc6854d6d2e8a42abdb._comment | 8 + ...annex__44___does_not_recognize_remote.mdwn | 8 + ..._c1962d757dd22f49e774afa13a9862ca._comment | 10 + ..._1f0f4a1dc89643cee81ff7199b55e747._comment | 8 + ...ity__47__completeness_of_XMPP_updates.mdwn | 7 + ..._e0f7aa48d54fc0564f41c3a569c723b7._comment | 12 + ..._4e74039a673c16c0163f2cfb406dc4c3._comment | 8 + ..._41ade4fe72804b2f06cd4dbf405c1746._comment | 8 + doc/forum/relying_on_git_for_numcopies.mdwn | 47 + ..._8ad3cccd7f66f6423341d71241ba89fc._comment | 36 + ..._be6acbc26008a9cb54e7b8f498f2c2a2._comment | 18 + ..._43d8e1513eb9947f8a503f094c03f307._comment | 8 + ...ent_repositories_are_bare__33____63__.mdwn | 17 + ..._234241460f6c75a8376b303b8dd4e882._comment | 11 + ..._42dfc382d07af2a4f29c76016084f87c._comment | 12 + ..._space_with_directory_special_remotes.mdwn | 2 + ..._cd17b624704d93b51931023f69573323._comment | 8 + ..._877ca1be23d1484a8a30cdaeb6630053._comment | 15 + ..._65910eeaf3c6fcfd03f22c2957293232._comment | 8 + doc/forum/retrieving_previous_versions.mdwn | 7 + ..._a4e83f688d4ec9177e7bf520f12ed26d._comment | 11 + doc/forum/rsync_over_ssh__63__.mdwn | 2 + ..._ee21f32e90303e20339e0a568321bbbe._comment | 8 + ..._aa690da6ecfb2b30fc5080ad76dc77b1._comment | 8 + ..._2e340c5a6473f165dc06cc35db38e5c0._comment | 8 + ...rsyncing_.git__47__annex__47__objects.mdwn | 24 + ..._25eb9f7be5730337b9efd96dce9efd2e._comment | 10 + ..._d7ceae666c8a1951021d3c6e6ac39a11._comment | 8 + doc/forum/s3_vs_ssh_Performance_Problems.mdwn | 8 + ..._65f064f09d7850abecab97007b0d30f0._comment | 12 + ..._baaf2384d9196077268e9ca9bbe3b871._comment | 8 + ..._dc44be42070c073d150c476406e9b425._comment | 10 + .../safely_dropping_git-annex_history.mdwn | 20 + ..._a4b93a3fbc98d9b86e942f95e0039862._comment | 8 + ..._383882fafd32f25ed22b5eb2fb3691b9._comment | 18 + ..._47794a2abf29bf4ea2763ff89d872ab4._comment | 8 + ..._4fd76d10a93fe01588fce7a621f9254d._comment | 12 + ..._10ecf3220ffcbbe94ba09da225458f18._comment | 12 + ..._e3beb8acb075faaeef6c052aecbf0a41._comment | 50 + ..._61a5fe2e7e47c60a8b237ea69404a37f._comment | 8 + ..._426d02e2f2a2ae4ec7eae02dfe4519b3._comment | 9 + ..._410a7296c2cee16d3d5bb618a5a41c1d._comment | 10 + ..._42cf492fc98a9eba8176387749ef12e0._comment | 8 + ..._c0327ada073d8b69535f71b4dc6aa57e._comment | 21 + ..._f83d6090aea2b7d5d54c876df940cbad._comment | 40 + ...o_build_fine_on_haskell_platform_2011.mdwn | 1 + doc/forum/shared_cipher_tries_to_use_gpg.mdwn | 10 + ..._760961eaaa7d5c254dd71c5792437c9e._comment | 12 + ..._f3260aea3a5bb9b95a9bdf1d0dfce090._comment | 8 + ..._really_good_happened_with_3.20130124.mdwn | 5 + ..._1712bddd2f483a353f6313aa626445f1._comment | 8 + .../sparse_git_checkouts_with_annex.mdwn | 31 + ..._c7dc199c5740a0e7ba606dfb5e3e579a._comment | 12 + ..._e357db3ccc4079f07a291843975535eb._comment | 8 + ..._fcfafca994194d57dccf5319c7c9e646._comment | 8 + ..._04dc14880f31eee2b6d767d4d4258c5a._comment | 20 + doc/forum/special_remote_for_IMAP.mdwn | 44 + ..._7c7d4b57a1b6508fff1a6b0508c861f8._comment | 10 + ..._9c46fe8a857aa7a5ce797288144386bd._comment | 8 + ..._27e3b644df6942ce4c103236d0d5cb1b._comment | 23 + doc/forum/special_remote_for_iPods.mdwn | 5 + ..._37cc3dc740341cc663074fd3bfb85947._comment | 8 + ...sistant_startup_on_large_repositories.mdwn | 1 + ..._5ba637a0f6d01ba24fe25e6265134e0a._comment | 10 + ..._d65746697977f8971a4b59f5b413f926._comment | 13 + ..._be6c4fe5a0c745688438b716973791cc._comment | 12 + ..._a07472338a08c068a9b88b2176fc2bee._comment | 9 + doc/forum/ssh_password.mdwn | 3 + ..._a3e5a41e1d4da683d577976b134b11ee._comment | 10 + ..._fa261676a99d49d4b237b0d43048d76d._comment | 10 + ...itory__34___option_during_setup__63__.mdwn | 3 + ..._7244794579a191a677190c60758f32e7._comment | 8 + ..._277cf12907bd7c5930eb4f137b115e29._comment | 8 + .../start_assistant_from_command_line.mdwn | 11 + ..._f8dfce1fca9f1212ccaf84e431db71a9._comment | 12 + ..._e769c5d09afbff85961363ddc5eb4019._comment | 10 + doc/forum/switching_backends.mdwn | 12 + ..._ecf4109c1148dafde3519243ae3c5a03._comment | 10 + ..._21f465a18f40b95dafd307fce0de659a._comment | 8 + ..._4c13d22c1695195e6b101bd20ef6bb42._comment | 35 + ..._e1d4a48baac23fd3f67b20eba4eee8af._comment | 8 + ...irect_mode_while_assistant_is_running.mdwn | 2 + ..._7832243a36613c48d0077b438dbf8b4a._comment | 10 + doc/forum/syncing_home_directories.mdwn | 7 + ..._220a6e0ffe0ea610921a63c0a6e3beab._comment | 16 + .../syncing_non-git_trees_with_git-annex.mdwn | 46 + ..._7f9593bdfd95e4a8814e6cc5c44619e6._comment | 24 + ..._49f15478781a0ad5e46e75319070335c._comment | 16 + ..._6d8f399f0549eddd1d1f5c9c9a10c654._comment | 13 + doc/forum/taskwarrior.mdwn | 11 + ..._1c3a29e7d292cb602d9d349f8009b51e._comment | 10 + ...ll_us_how_you__39__re_using_git-annex.mdwn | 6 + ..._4884803ddee7f642a3ac995a19967a6a._comment | 17 + ..._61f5054918e7b36c191454365bc7f3b7._comment | 10 + ..._db07e8703be606c998c831e91d300d69._comment | 10 + ..._a58595969cdd42ed20210e9615b42e42._comment | 22 + ...95__remotes__47__hook_with_tahoe-lafs.mdwn | 22 + ..._76bb33ce45ce6a91b86454147463193b._comment | 10 + ..._4d9b9d47d01d606a475678f630797bf9._comment | 10 + ..._8a812b11fcc2dc3b6fcf01cdbbb8459d._comment | 12 + ..._fc98c819bc5eb4d7c9e74d87fb4f6f3b._comment | 39 + ..._c459fb479fe7b13eaea2377cfc1923a6._comment | 8 + ..._2e9da5a919bbbc27b32de3b243867d4f._comment | 23 + ..._d636c868524b2055ee85832527437f90._comment | 20 + ..._39dc449cc60a787c3bfbfaaac6f9be0c._comment | 10 + doc/forum/ui.mdwn | 11 + ..._f3e3446b05d6b573e29e6cad300fb635._comment | 10 + ..._b493ee97eb2378e72c12f3d137109580._comment | 15 + doc/forum/unannex_alternatives.mdwn | 9 + ..._dcd4cd41280b41512bbdffafaf307993._comment | 46 + ..._58a72a9fe0f58c7af0b4d7927a2dd21d._comment | 36 + ..._b1687fc8f9e7744327bbeb6f0635d1cd._comment | 16 + .../unknown_response_from_git_cat-file.mdwn | 8 + ..._f26ba569e715fe69b6de3093930362ee._comment | 8 + .../unlock__47__lock_always_gets_me.mdwn | 11 + ..._dee73a7ea3e1a5154601adb59782831f._comment | 12 + ..._f89b4349dde840c355a3bc28908decdf._comment | 8 + doc/forum/unsynced_folder.mdwn | 3 + ...ting_the___34__number_of_copies__34__.mdwn | 14 + ..._327bdb0d9c190c60c7147b3acf07af09._comment | 10 + ..._7e11c839637e0894332e413cde02cee9._comment | 8 + ..._8b7a70fb3bb41e4eda412302834730bb._comment | 8 + doc/forum/use_existing_ssh_keys__63__.mdwn | 5 + ..._c420c53f022bbd1b28494bc44d076feb._comment | 8 + ..._e4cae848e5701852073ced307832872b._comment | 12 + ..._a97c20b6df74c49e5f57c7caf962f1e2._comment | 10 + ...2_directories___40__like_unison__41__.mdwn | 7 + ..._5c3ee8a8aaa6d0918c0cc9683ce177ae._comment | 10 + ..._648946353c6d90c57351cce4010f1301._comment | 10 + doc/forum/version_3_upgrade.mdwn | 9 + ..._05fc9c9cad26c520bebb98c852c71e35._comment | 13 + doc/forum/vlc_and_git-annex.mdwn | 11 + ..._9c9ab8ce463cf74418aa2f385955f165._comment | 10 + ..._037f94c1deeac873dbdb36cd4c927e45._comment | 8 + ...webapp___47___assistant_without_watch.mdwn | 9 + ..._1bcd99aa81f937ded683e19a69d33dd9._comment | 10 + ..._9f5b3f5bf7fedcd5baec519d97d3aa8c._comment | 16 + doc/forum/webapp_and_manual_mode.mdwn | 7 + ..._5b5df5ffeb6ee15779972f13fdc11729._comment | 10 + ..._a1f06b50d1317c78a301b47eb05d2617._comment | 19 + .../webapp_listen_port_with_autostart.mdwn | 3 + ..._65dbcf3d8f6c16568f5a326242eab9c5._comment | 20 + ..._39664f833dedc1a4fe083eec9bc4a7cd._comment | 75 + doc/forum/windows_port__63__.mdwn | 2 + ..._23fa9aa3b00940a1c1b3876c35eef019._comment | 9 + ...et__47__drop_via_webapp_file_explorer.mdwn | 1 + ..._c818a6d44dc13a56460b1865f70eb97c._comment | 8 + ...ake_copy_stop_on_exhausted_disk_space.mdwn | 4 + ..._467e5e3db3e836030bc4b4f15846951f._comment | 12 + ..._e3ca3db9bea11d3e085ee9c3c56b33fe._comment | 8 + ..._0ef8c37350fc192d9b784fbab1d9f318._comment | 8 + .../working_without_git-annex_commits.mdwn | 20 + doc/future_proofing.mdwn | 38 + doc/git-annex-shell.mdwn | 120 + doc/git-annex.mdwn | 1419 +++ doc/git-union-merge.mdwn | 38 + doc/how_it_works.mdwn | 41 + ..._b3bdd6a06d5764db521ae54878131f5f._comment | 14 + doc/ikiwiki/pagespec.mdwn | 86 + doc/index.mdwn | 45 + doc/install.mdwn | 31 + doc/install/Android.mdwn | 37 + ..._225f2c6fe255be93702cfbd4dc172f3b._comment | 8 + ..._4e970633d9073fcf4bc33f3fff2525b2._comment | 10 + ..._87da4f379a0276b662583e7e22061218._comment | 8 + ..._f9ced494a530e6ae3e76cfbaddb89f5d._comment | 8 + ..._74cccae04ea23a8600069c7e658143aa._comment | 8 + ..._82c7cb31d19d4e18ca5548da5ca19a79._comment | 8 + ..._cebaa8ee5bbed27d9b2d032ca7bdec6e._comment | 8 + ..._34f7c42050fa48769a6bfae60d72e477._comment | 8 + ..._f3d289b78d6bdb3cc65689495a8439a5._comment | 11 + doc/install/ArchLinux.mdwn | 19 + ..._da5919c986d2ae187bc2f73de9633978._comment | 8 + ..._e5f923e6d81cfb3fba7a72f60baaf4ab._comment | 16 + ..._8e607cd883ec174571e9dfe3b25bfd05._comment | 8 + ..._a378391dd218859f381c479259dd8fe3._comment | 10 + doc/install/Debian.mdwn | 20 + ..._d5da996e106d2e4d8a822aa9bcc78596._comment | 12 + ..._84283676da247c401bc9b4bb12c2b453._comment | 8 + ..._0aca83b055d0a9dd8589c50250a8bbea._comment | 13 + ..._167a091764e5e99ec0f35a65e95a22de._comment | 8 + ..._a34e23d9aa3027012ab1236aa4f7d5cb._comment | 8 + ..._20d8271ba3f6cfe3c8849c3d41607630._comment | 8 + ..._029486088d098c2d4f1099f2f0e701a9._comment | 9 + ..._648e3467e260cdf233acdb0b53313ce0._comment | 8 + ..._4d922e11249627634ecc35bba4044d9e._comment | 8 + ..._2a93ab18b05ccb90e7acc5885866fca2._comment | 9 + ..._38e6399083e10a6a274f35bddc15d4ac._comment | 18 + ..._2e7bbdbaabbfb9d89de22e913066e822._comment | 8 + ..._1bccc7bf7a4ef61a9b30024b9b22ba7d._comment | 12 + ..._5b5a3b0e8abe8831a6a15a4e258d14fd._comment | 10 + ..._97eaed998ffd1ed79585075ed5cff06e._comment | 8 + doc/install/Fedora.mdwn | 39 + ..._c4db84e672ad4b45b522db735706b00f._comment | 16 + ..._f98c488c09bef86e2b0414589ce9e141._comment | 25 + ..._d872acf8865fe7c99a9b712db5b38ea4._comment | 8 + ..._93b3402e4c51e1a5c96f907bb528164b._comment | 16 + ..._0427e0503764b29e57abf9e97155136b._comment | 15 + ..._1b1b38a79251fe2e8c1e4debbe3bc3c5._comment | 12 + doc/install/FreeBSD.mdwn | 2 + doc/install/Gentoo.mdwn | 3 + doc/install/Linux_standalone.mdwn | 34 + doc/install/NixOS.mdwn | 6 + doc/install/OSX.mdwn | 71 + ..._cd2120552ef894a37933b328136fa4cc._comment | 8 + ..._740fa80e2e54e6fb570f820ff1f56440._comment | 8 + ..._a84028080578a8b60115b6c4ef823627._comment | 8 + ..._d6f1db401858ffea23c123db49f5b296._comment | 8 + ..._035f856923276b0edad879e196e94097._comment | 9 + ..._336e0acb00e84943715e69917643a69e._comment | 35 + ..._1befafa862b7d07b1f6e57c0182497cf._comment | 36 + ..._19c08b2c6c2c5cd88bf96d2bcbbd9055._comment | 10 + ..._537fad5d8854e765499d47602d1ab398._comment | 8 + ..._18d4377f4ded5604d395d73783ba82c9._comment | 8 + ..._3e6a3c00444badf2cf7a9ee3d54af11e._comment | 8 + ..._987f1302f56107c926b6daf83e124654._comment | 11 + ..._6b5f44a98f9d37a1c6ecfe19a60fe6c5._comment | 12 + ..._3d82a270dd4b0159f4aab5675166e1e3._comment | 30 + ..._b9d3563a2cc3d769f27876e028dc344d._comment | 12 + ..._db90984062a07576a4777b2d743161f1._comment | 24 + ..._2a60108a440231ba83f5a54b6bcc5488._comment | 14 + ..._d453510b9bb62072a4c663206c12c8a4._comment | 8 + ..._0970bfd63137ea48701dff6aea1b4bcb._comment | 18 + ..._8622ed56c6a8034c20fb311418d94003._comment | 8 + ..._25552ff2942048fafe97d653757f1ad6._comment | 8 + ..._ce58633ef5b2f8f4caa7e626358f33be._comment | 8 + ..._09084a7b3cf06bfa3add0f4991476ffe._comment | 10 + ..._a46d8e3e7795b9afb1e1c2be943d12af._comment | 10 + ..._203a36322b3c453c05c8906c64e62e06._comment | 8 + ..._c9362141d15a2f68a75df9f8bfe29da0._comment | 17 + ..._8106196c3fef70652cb2106e2d5857db._comment | 8 + ..._47a77a03040fe628109bd54f82f9ad7a._comment | 17 + ..._25cac8bcd84a5210fc0a5243260b8cc7._comment | 18 + ..._bbe99673033e4c48c8bb3db24ee419f9._comment | 8 + ..._39b4b748b4586bf32b37edfefef84bba._comment | 8 + ..._1a9c91ef43edc4148947f202ff604114._comment | 8 + ..._892f7e65f95f43697164267c4b71c0d5._comment | 8 + ..._38d9c2eea1090674de2361274eab5b0e._comment | 29 + ..._35bf3812db6f3ef25da9b3bc84f147c5._comment | 8 + doc/install/OSX/old_comments.mdwn | 1 + ..._4d15bfc4fc26e7249953bebfbb09e0aa._comment | 11 + ..._798000aab19af2944b6e44dbc550c6fe._comment | 10 + ..._707a1a27a15b2de8dfc8d1a30420ab4c._comment | 10 + ..._60d13f2c8e008af1041bea565a392c83._comment | 8 + ..._a6f48c87c2d6eabe379d6e10a6cac453._comment | 8 + ..._6ef2ddb7b11ce6ad54578ae118ed346e._comment | 9 + ..._6fd1fad5b6d9f36620e5a0e99edd2f89._comment | 9 + ..._af6fe3540032cdf4400478de87771058._comment | 30 + ..._8d3a0596db67108041728b20f2790f31._comment | 7 + ..._0a1760bf0db1f1ba89bdb4c62032f631._comment | 13 + ..._0327c64b15249596add635d26f4ce67f._comment | 19 + ..._7683740a98182de06cb329792e0c0a25._comment | 25 + ..._47c682a779812dda77601c24a619923c._comment | 8 + ..._733147cebe501c60f2141b711f1d7f24._comment | 16 + ..._b090f40fe5a32e00b472a5ab2b850b4a._comment | 8 + ..._fc092412e99cf4c5f095b0ef710bc4de._comment | 8 + ..._d513e21512a9b207983d38abf348d00f._comment | 16 + ..._d68c36432c7be3f4a76f4f0d7300bac9._comment | 20 + ..._e6109a964064a2a799768a370e57801d._comment | 30 + ..._50777853f808d57b957f8ce9a0f84b3d._comment | 10 + ..._626a4b4bf302d4ae750174f860402f70._comment | 8 + ..._18a8df794aa0ddd294dbf17d3d4c7fe2._comment | 7 + ..._2ce7acab15403d3f993cec94ec7f3bc6._comment | 14 + ..._a93ad4b67c5df4243268bcf32562f6be._comment | 39 + ..._ae3ed5345bc84f57e44251d2e6c39342._comment | 14 + ..._c6b1b31d16f2144ad08abd8c767b6ab9._comment | 23 + doc/install/ScientificLinux5.mdwn | 62 + doc/install/Ubuntu.mdwn | 39 + ..._490e065314693423ab6969d8ae6978fe._comment | 8 + ..._4ebac3fb43de854ed1a3b1d2ea94011a._comment | 10 + ..._38f69dffe2db0d15e4c4e5cb47f40ef8._comment | 8 + ..._d1c511153fe94bf33e19a1281f1c92f2._comment | 8 + ..._ad13886c1c1f76d1cd995ea7b7d8471c._comment | 8 + ..._a08817322739b03cf0fec97283b16f1a._comment | 8 + ..._fe0997e56136bd30749f0995cbf19b56._comment | 12 + ..._fbb5306a162db1a1ee9efa3523aac952._comment | 11 + ..._a97e7f0e62ac685c3ded423bddeaa67f._comment | 14 + ..._921a223fd7e679b9ced3d8ba5ce688e0._comment | 8 + ..._1f943cb084fa8e21bc6ee5fc3118f02f._comment | 8 + ..._c2f8b35ada873acb1ce593b04e2899fe._comment | 11 + doc/install/Windows.mdwn | 34 + doc/install/cabal.mdwn | 58 + ..._7ebe353b05d4df29897dc9a4f45c8a91._comment | 8 + ..._0d06702e6e0ae3cd331cf748a9f6f273._comment | 44 + ..._b93ca271dffca3f948645d3e1326c1d9._comment | 12 + ..._3dac019cda71bf99878c0a1d9382323b._comment | 8 + ..._14b46470593f84f8c3768a91cb77bdab._comment | 9 + ..._c3a5b0aad28a90e0bb8da31a430578eb._comment | 8 + ..._4faf214f97f9516898d7c17d743ef825._comment | 10 + ..._2a9d6807a3a13815c824985521757167._comment | 10 + ..._1efa0c7a963ec452fc6336fbe4964f6e._comment | 10 + ..._6f42f9234f9ff6a2ca6bbb4d2643843e._comment | 44 + ..._f04df6bcd50d1d01eb34868bb00ac35c._comment | 18 + ..._0f553be2a4c666e3bed58b2bce549406._comment | 8 + ..._f91a6ec21e96eced73ea9579fd8cbd15._comment | 8 + ..._2f27b78215f97ade1986ca806c634cb3._comment | 16 + ..._c34d2b1d95830a3e58671a5b566a1758._comment | 8 + ..._40cbde8ec067b3a860e6df1a9bea5f76._comment | 8 + ..._8a7664e6f9271718dc607a0782366c5b._comment | 8 + ..._bd455c732639728bce2bfc39e32871d2._comment | 8 + ..._c080e9239b6eec88d329c28da7bb4141._comment | 17 + ..._15951dd070a675300420eea137a28ef9._comment | 10 + ..._ac082dca67f4a29b06070c0283130f52._comment | 39 + ..._a69d17c55e56a707ec6606d5cdddee25._comment | 17 + ..._ad639c07cb79e89406e95c1dafce3a01._comment | 35 + ..._4763b24a29627d55f465b9ea260ea7ec._comment | 22 + ..._1d34c294486c85b1149675fa5861ae35._comment | 10 + ..._55bed050bdb768543dbe1b86edec057d._comment | 10 + ..._2ff7f8a3b03bea7e860248829d595bd1._comment | 14 + ..._8789fc27466714faa5a3a7a6b8ec6e5d._comment | 24 + ..._5afb2d081e8b603bc338cd460ad9317d._comment | 21 + ..._129c4f2e404c874e5adfa52902a81104._comment | 22 + ..._738c108f131e3aab0d720bc4fd6a81fd._comment | 8 + ..._5ddbba419d96a7411f7edddaa4d7b739._comment | 12 + doc/install/fromscratch.mdwn | 72 + doc/install/openSUSE.mdwn | 3 + doc/internals.mdwn | 132 + ..._4b8ed353dca4f484b3b6eb463fa02fd8._comment | 8 + ..._c19232d5cc4976c2e5b014aef6e8d9ec._comment | 8 + doc/internals/hashing.mdwn | 30 + doc/internals/key_format.mdwn | 20 + doc/internals/lockdown.mdwn | 44 + doc/license.mdwn | 14 + doc/license/AGPL | 661 ++ doc/license/GPL | 674 ++ doc/license/LGPL | 502 + doc/links/key_concepts.mdwn | 7 + doc/links/other_stuff.mdwn | 7 + doc/links/the_details.mdwn | 8 + doc/location_tracking.mdwn | 30 + doc/logo-old-bw.svg | 60 + doc/logo-old.png | Bin 0 -> 9092 bytes doc/logo-old.svg | 77 + doc/logo-old_small.png | Bin 0 -> 4713 bytes doc/logo.mdwn | 13 + doc/logo.svg | 92 + doc/logo_small.png | Bin 0 -> 4749 bytes doc/meta.mdwn | 5 + doc/news.mdwn | 11 + doc/news/2013_git-annex_user_survey.mdwn | 5 + doc/news/LWN_article.mdwn | 2 + doc/news/Presentation_at_FOSDEM.mdwn | 4 + doc/news/git_annex_fall_of_code.mdwn | 27 + ...rebox_a_FUSE_filesystem_for_git-annex.mdwn | 19 + ..._e238d1734238e37bb55ff952b32e06b8._comment | 9 + ..._937cbaccf235d6d9118aacd49058bb4f._comment | 11 + ..._faa5cf0645728b4ade850a691fa472db._comment | 25 + ..._ad156d6199b525884114ff823d265bf7._comment | 39 + ..._877061eb24d9d9543cc9cd229906bd64._comment | 8 + ..._8991648dda991768e3a58477a4c3c923._comment | 10 + doc/news/version_4.20131024.mdwn | 43 + doc/news/version_4.20131101.mdwn | 29 + doc/news/version_4.20131106.mdwn | 18 + doc/news/version_5.20131118.mdwn | 42 + doc/news/version_5.20131120.mdwn | 11 + doc/not.mdwn | 55 + ..._ab41bec1ccc884e71780cb9458439170._comment | 8 + ..._0e19ff7deb5ed65f2bc685d4c516d816._comment | 8 + ..._bab9584c41a25dda934ad230e3eb732d._comment | 8 + ..._b2a0d5a45ab8ddd66c29dde9412d7a12._comment | 51 + ..._f2829ecbe80a61aa9a8411d2403de69e._comment | 14 + ..._547fc59b19ad66d7280c53a7f923ea08._comment | 13 + ..._581e23cca0219711f8a4500a8d5d20fc._comment | 16 + ..._5c61457f117de38ef487e5cc2780d554._comment | 24 + doc/polls.mdwn | 2 + doc/polls/2013.mdwn | 5 + doc/preferred_content.mdwn | 207 + ..._f0bce3c67f293eaba97b92f0942876b6._comment | 8 + ..._7d45e21dfb016e9ffa4715346dd0c1a6._comment | 19 + ..._1ccd90b009245667ad59f4d29d2a3a37._comment | 8 + ..._384025b5fa23a3f175985a081438149f._comment | 8 + ..._6a9bc657bc7415f0e118357d8c6664c6._comment | 18 + ..._f0a957e67297c4bb5a8778c11b3c9fd4._comment | 9 + ..._b434c0e2aaa132020fd4a01551285376._comment | 12 + ..._c4acaa237bf1a8512c5e8ea4cdbd11b9._comment | 8 + ..._ff2a2dc9c566ebd9f570bdfcd7bfc030._comment | 27 + ..._f82538be42428691d7cab60a7add2e74._comment | 13 + doc/privacy.mdwn | 47 + doc/related_software.mdwn | 12 + doc/repomap.png | Bin 0 -> 67316 bytes doc/scalability.mdwn | 44 + doc/shortcuts.mdwn | 12 + doc/sidebar.mdwn | 15 + doc/sitemap.mdwn | 4 + doc/special_remotes.mdwn | 63 + doc/special_remotes/S3.mdwn | 53 + ..._c366f020c9b97a365e21878a33360079._comment | 10 + ..._c1da387e082d91feec13dde91ccb111a._comment | 12 + ..._59c3ecab7dbc8be53258460473cac21c._comment | 8 + ..._0789a21d980825188bb09f7fc8bba8be._comment | 33 + ..._29574a51d5831c51e2e765eb2c06e567._comment | 12 + ..._ceb9048c743135f6beca57a23505f0a3._comment | 8 + ..._7b79f8b5ef88a2775d61b5ac5774d3e0._comment | 8 + ..._4a1f7a230dad6caa84831685b236fd73._comment | 8 + ..._5b22d67de946f4d34a4a3c7449d32988._comment | 8 + ..._bcab2bd0f168954243aa9bcc9671bd94._comment | 8 + ..._38c0b062997fde1ad28facc05d973e83._comment | 12 + ..._409bc2b56382417cf26bb222fb783ba7._comment | 8 + ..._78da9e233882ec0908962882ea8c4056._comment | 10 + ..._6af9781004d982d8e6b20a83ad29eead._comment | 8 + ..._0fa68d584ee7f6b5c9058fba7e911a11._comment | 12 + ..._7ad757b3865b04967c79af0a263bb3b0._comment | 10 + doc/special_remotes/bup.mdwn | 39 + ..._f78c1ed97d2e4c6ebffaa7482cfe0c9b._comment | 23 + ..._b53bceb0058acf4d1ab12ea4853ee443._comment | 24 + ..._65d923226cf6120349d807c5c60f640c._comment | 8 + ..._96179a003da4444f6fc08867872cda0a._comment | 43 + ..._612b038c15206f9f3c2e23c7104ca627._comment | 12 + ..._1186def82741ddab1ade256fb2e59e6f._comment | 17 + ..._7d22a805dd2914971e7ca628ceea69be._comment | 10 + ..._5942333cde09fd98e26c4f1d389cb76f._comment | 10 + ..._cb1a0d3076e9d06e7a24204478f6fa98._comment | 10 + ..._4cbc67e5911748d13cee3c483d7ece8a._comment | 12 + ..._ca7096a759961af375e6bd49663b45b3._comment | 10 + ..._e9881290486a1770bd260f8650ada9c6._comment | 8 + ..._e01b5cc5a0d81b071e93e27e7b91fe2a._comment | 8 + ..._13237170ef5b6646e0e25d3421af3fe5._comment | 10 + ..._1a36a0483a9db04d36e0234a192ebad8._comment | 12 + ..._a8419963dc024b1d9eb73807596012dc._comment | 8 + ..._95ccfdd22a2391daa99e0beb04adedd6._comment | 11 + ..._b9d238fb15ad7628e33c90b071e07bb0._comment | 12 + ..._cc21b81a8f809f6efa5f5b6332513fc3._comment | 12 + ..._3fe750118ff1edbe91a110b86fb5b662._comment | 10 + ..._6794eb52bd87c28ef1df3172aa7d5780._comment | 9 + ..._961276c18e9353ca8e25cad53e7ec51f._comment | 8 + ..._6b7242721f2f2c77b634568cb737e3e3._comment | 13 + ..._5c11e69c28b9ed4cbe238a36c0839a47._comment | 15 + ..._97543acfa7434e332ebea5672e446317._comment | 8 + ..._9229776623c234204c8b164edff95da0._comment | 8 + ..._3bbda479d13f6bf393dcd59ed94ddeaa._comment | 10 + ..._f7000975d38077828ab11a99095b39eb._comment | 8 + ..._5d2bd7c1e1493d3c3784708a9b0bc001._comment | 8 + ..._af01ee5ce31b1490af565cb087d65277._comment | 10 + ..._3d4ffec566d68d601eafe8758a616756._comment | 13 + ..._26af468952f0403171370b56e127830a._comment | 8 + doc/special_remotes/directory.mdwn | 33 + ..._86f8c1b09cbd82bcd76378dfa1b3ca07._comment | 49 + .../directory/comment_12._comment | 16 + ..._311cd013fd8db47856d84161119e059d._comment | 12 + ..._e8a53592adb13f7d7f212a2eb5a18a31._comment | 12 + ..._d949edad6a330079f9e15f703f9091e3._comment | 10 + ..._49009f4e9e335c9a9d0422aa59c9a432._comment | 8 + ..._f5e9b0b477c4e521f8633fd274757fa3._comment | 8 + ..._e790718423c41f5ea8047ea5225bfacd._comment | 11 + ..._325aac80b86588912c4fd61339ccbd0b._comment | 10 + ..._4206db69d68d9917623ce02500387021._comment | 12 + ..._acd9023511fe43817718bc89430f96c3._comment | 8 + ..._d330eb808a990bb71034613c297a265e._comment | 8 + doc/special_remotes/gcrypt.mdwn | 45 + doc/special_remotes/glacier.mdwn | 47 + ..._fcd856b99dc6b3f9141b65fe639ef76b._comment | 10 + ..._38fcca87074f6ea31a12569a822aa8c9._comment | 12 + ..._cea5bcb162e4288847ba5f25464a0406._comment | 28 + ..._0c92cc82c7ac513130f862391a02d329._comment | 8 + ..._8d1dcb4bf48386314bfb248ea6eeeb68._comment | 8 + ..._adb1db354dc4941e4b004e4ba34660d7._comment | 8 + ..._747e403aac5acaba00e220931e926951._comment | 10 + doc/special_remotes/hook.mdwn | 103 + ..._6a74a25891974a28a8cb42b87cb53c26._comment | 32 + ..._ee7c43b93c5b787216334f019643f6a0._comment | 17 + ..._2593291795e732994862d08bf2ed467b._comment | 17 + ..._35d79b5ffa5a19056efcdc805070bc4b._comment | 18 + ..._6fbf1e963fa3ea4b2eb8ca5a3819762d._comment | 10 + ..._e0ab48d5333e5de85f016b097e6fdac1._comment | 12 + ..._cc2b1243c2c36e63241513bcaddfea67._comment | 10 + ..._bbae315233bda48eb04662dfd48cf1ae._comment | 30 + ..._037523d1994c702239ca96791156fe65._comment | 10 + doc/special_remotes/rsync.mdwn | 56 + ..._43e8fa3517c1f5935f02ad06fbed63dc._comment | 8 + ..._8cafc1a8b37e6fb056185ec058c0c3e8._comment | 8 + ..._9e180c397486989beab21699b8e8f103._comment | 16 + ..._25545dc0b53f09ae73b29899c8884b02._comment | 8 + ..._960a89b1ae7e3888ffba06baa963dc21._comment | 20 + ..._db84816c31239953dd21f23a8c557b43._comment | 15 + ..._ccaffa4aded9dab88c76a856b96ea5b9._comment | 9 + ..._e687b9482b177e1351c8c65ea617d3fa._comment | 8 + ..._e122979ea811d9ef835ba05bb936190f._comment | 10 + ..._d566113318d0aa7500d76ffe1bd46069._comment | 10 + ..._5dcf10a502b2d4feac46b620d43e9d00._comment | 8 + doc/special_remotes/web.mdwn | 11 + ..._0bd570025f6cd551349ea88a4729ac8e._comment | 8 + ..._333141cc9ec6c26ffd19aa95303a91e3._comment | 8 + doc/special_remotes/webdav.mdwn | 42 + ..._6b523eea78eae1d19fe2a9950ee33e3a._comment | 26 + ..._83fc4e7d9ba7a05c8500da659f561b8f._comment | 10 + ..._239367ad639c61ecdf87a89f7ac53efe._comment | 10 + ..._ffa52f7776cdc8caa28667b5eadae123._comment | 8 + ..._5b8cbdb5e9a1b90d748a5074997e1cd5._comment | 12 + ..._d3be3e588c3a2abb2025ceb82c18b0ef._comment | 10 + ..._6fa7e11331db5a943015bd5367eb3d73._comment | 12 + ..._2627b41f80c7511b27464e2040b128a8._comment | 8 + doc/special_remotes/xmpp.mdwn | 39 + ..._c7c2e2e81cb5b2b9a5272430c835dd39._comment | 10 + ..._568247938929a2934e8198fca80b7184._comment | 11 + ..._9fc3f512020b7eb2591d6b7b2e8de2d7._comment | 10 + ..._48ddbba1402d89acaea07cff747c48e0._comment | 28 + ..._59857879abaae22bde444a215e00bf18._comment | 14 + ..._583ee374bd34fcc9ae26c2fd690e8c47._comment | 73 + ..._8f0b5bba1271d031a67e7f0c175d67d5._comment | 8 + ..._ac7acbded03325b015959d82ae77faf1._comment | 10 + ..._81a9636a1e8a36a58185468a26f8633d._comment | 8 + ..._eda76b826491c96b1ce072aacf9d3adf._comment | 23 + doc/summary.mdwn | 11 + doc/sync.mdwn | 38 + ..._59681be5568f568f5c54eb0445163dd2._comment | 8 + ..._9301ff5e81d37475f594e74fbe32f24e._comment | 11 + ..._49560003da47490e4fabd4ab0089f2d7._comment | 8 + ..._cf29326408e62575085d1f980087c923._comment | 8 + ..._18c396c59907147bb2bf713e55392b6b._comment | 8 + ..._012e9d4468d0b88ee3c5dad3911c3606._comment | 10 + ..._6276e100d1341f1a0be368f54de0ae7b._comment | 8 + doc/templates/bare.tmpl | 1 + doc/templates/bugtemplate.mdwn | 18 + doc/templates/walkthrough.tmpl | 2 + doc/testimonials.mdwn | 34 + ..._2bf439f7a3bc3d6fab91849017946182._comment | 8 + doc/tips.mdwn | 4 + ..._37____38____34____35___Haskell__33__.mdwn | 111 + ..._835a3608df3e9d044cabe822d0f3e7e4._comment | 27 + ..._080b30cba72a718e73ea715e259e1cfb._comment | 8 + doc/tips/Crude_Windows_Sync.mdwn | 35 + ...tralized_repository_behind_a_Firewall.mdwn | 59 + ..._78b9035234a690ca5a7c9f3cc78fa092._comment | 8 + .../Delay_Assistant_Startup_on_Login.mdwn | 13 + ..._c63917150527efab4b1106183b3aa7ef._comment | 8 + doc/tips/Git_annex_and_Calibre.mdwn | 120 + ...ly_annex_a_file_already_in_a_git_repo.mdwn | 19 + ..._7eaf73fb3355bd706ab18a43790b3c10._comment | 8 + ..._dac1a171204f30d7c906e878eb6bd461._comment | 45 + ..._b62ec0b848d2487d68d7032682622193._comment | 36 + ..._2423904e41a86cd1c6bc155d7b733642._comment | 9 + doc/tips/Internet_Archive_via_S3.mdwn | 58 + ..._d53a3848c20dce61867283fc03c2adaa._comment | 34 + ..._91c1472da27b00e5d682d22bc1ef04e0._comment | 10 + ..._e23cf781c532f80d47d52265f2b2c87e._comment | 8 + ...content_settings_for_my_android_phone.mdwn | 32 + ..._393d1636bb313530be383a075bd3440a._comment | 14 + ...Git-annex_as_a_web_browsing_assistant.mdwn | 46 + ..._74167f9fff400f148916003468c77de4._comment | 8 + doc/tips/assume-unstaged.mdwn | 31 + ..._44abd811ef79a85e557418e17a3927be._comment | 10 + ..._5b589f37cfc03bf7be33a51826cc4dba._comment | 13 + ...tomatically_getting_files_on_checkout.mdwn | 15 + ...n_doing_fsck_on_large_special_remotes.mdwn | 2 + ..._e7c5c46112a2406b873d08bbf53c40d8._comment | 8 + ..._daf45ce29fed986fa9aa8b173760d0b7._comment | 14 + ..._72d222020af4a9c6c753eb1ee7e1f1cf._comment | 8 + ...sed_repository:_starting_from_nothing.mdwn | 75 + ..._b0d22822017646775869ce1292e676f4._comment | 8 + .../centralized_git_repository_tutorial.mdwn | 140 + ..._9072ebc0c61446d7b151fcfab616fea9._comment | 33 + ..._528e92b21f0551fde4adb956654953ae._comment | 8 + doc/tips/downloading_podcasts.mdwn | 63 + ..._4d4f6c22070b58918ee8d34c5e7290ad._comment | 8 + ..._d8d77048c7e2524968c188e1ad517873._comment | 24 + ..._0859317471b43c88744dd3df95c879f7._comment | 10 + ..._e8c3c97282d17e2a1d47fb9d5e2b2f7b._comment | 18 + ..._05a3694052de36848fbbad6eeeada895._comment | 8 + ..._21028bed8858c2dae1ac9c2d014fd2a1._comment | 8 + ..._4869fb5c9f896acc477c44de06c36ca7._comment | 8 + ..._2e278ff200c1c15efd27c46a3e0aed40._comment | 9 + ..._382f2b970738d9b1af577955c3083e90._comment | 15 + ..._f76fc6835e5787b0156380bf09fd81ca._comment | 8 + ..._f04bc32a34baeeffcd691e9f7cce0230._comment | 13 + ..._65ebf3a3bbf0a2aebd2b69640b757e16._comment | 10 + ..._a9a98cad7358d16792853a2ee413fe6c._comment | 8 + ..._5a8068a5cb0fd864581157a3aa5d1113._comment | 10 + ..._e7072a9da30b4c4b4c526013144238d4._comment | 10 + ..._79b3f8d678ac9f67df4c0cd649657283._comment | 8 + ..._35106fee5458bdd5c21868fbc49d3616._comment | 10 + ..._ceb16498b7aadbf04a27acd5d6561d46._comment | 8 + ..._147397603f0b3fdb42ca387d1da7c5ef._comment | 8 + ..._6a26a6cc7683d38fae0f23c5a52d1e23._comment | 24 + doc/tips/dropboxannex.mdwn | 28 + doc/tips/emacs_integration.mdwn | 20 + doc/tips/finding_duplicate_files.mdwn | 21 + ..._2ed5aa8c632048b13e01d358883fa383._comment | 12 + ..._ddb477ca242ffeb21e0df394d8fdf5d2._comment | 8 + ..._900eafe0a781018ff44b35ac232e3ad3._comment | 8 + .../comment_3._comment | 39 + ..._1494143a74cc1e9fbe4720c14b73d42b._comment | 8 + ..._1a35ca360468bcb84a67ad8d62a2ef7d._comment | 8 + ..._a6e88c93b31f67c933523725ff61b287._comment | 16 + ..._347b0186755a809594bd42feda6363e2._comment | 10 + ..._3af51722da0980b724facb184f0f66e9._comment | 10 + ..._7b4b78a5cd253abfe4f6001049bf64f3._comment | 10 + doc/tips/flickrannex.mdwn | 62 + ..._50707f259abe5829ce075dfbecd5a4ba._comment | 13 + ..._ab5bcb025381b3da4d7c6dfd0c7310dd._comment | 46 + ..._90a331275d888221bc695003c8acbe46._comment | 58 + ..._1596e70dca71c853fd1d6fc9bde02b18._comment | 12 + ..._d74c4fc7edf8e47f7482564ce0ef4d12._comment | 10 + ..._f53d0d5520e2835e9705bea4e75556f0._comment | 30 + ..._9ebba4d61140f6c2071e988c9328cf7e._comment | 14 + ..._4470dae270613dd8712623474bc80ab0._comment | 24 + ..._d395cdcf815cb430e374ff05c1a63ff4._comment | 17 + ..._8cf730097001ffe106f2c743edce9d0a._comment | 12 + ..._a80c8087c4e1562a4c98a24edc182e5a._comment | 12 + ..._94f84254c32cf0f7dd1441b7da5d2bc6._comment | 8 + ..._5299b4cab4a4cb8e8fd4d2b39f0ea59c._comment | 9 + ...ncrypted_git_repositories_with_gcrypt.mdwn | 127 + ..._4440a80d64c60c7312d5c405d54e607a._comment | 15 + ..._5c54690586f2a781905ea4b25aa1147f._comment | 18 + ..._07feedb4348f8c31176cc744c19368a1._comment | 21 + ..._c2f873dffa015f1d72ad0c3921909316._comment | 8 + ..._f8a6e4415f4fe6da14f6a3b7334bc952._comment | 18 + ..._11b8e82d2a234f65b58b823e71c6d6a2._comment | 10 + ..._3e41948e1beffcf279bb05ef8e61cc07._comment | 16 + ..._4ce0b26b25b336f07b2e27246cdfba3e._comment | 16 + ..._49aa34d75d24a2066baa8a585bc9c2e9._comment | 14 + ..._3784e0c828cd60b6a9075c2d32d070cc._comment | 14 + doc/tips/googledriveannex.mdwn | 28 + doc/tips/imapannex.mdwn | 27 + doc/tips/megaannex.mdwn | 41 + doc/tips/migrating_data_to_a_new_backend.mdwn | 16 + ...disconnected_directories_to_git_annex.mdwn | 77 + doc/tips/offline_archive_drives.mdwn | 69 + ..._3d4fdf42191a9d81434d00f51c3609ff._comment | 12 + ..._864c752aa8d064791a4b14dbbe2e6882._comment | 15 + ..._7be2ccaf70c9ecfc9a34384e0e31f490._comment | 10 + doc/tips/owncloudannex.mdwn | 28 + ..._129652308c3c499462828dcaf8e747a4._comment | 40 + ..._38604990368666f654d41891ba99ac61._comment | 15 + ..._1bfd290d00d6536da7d31818db46f8ec._comment | 87 + ..._492b6922a7c5bb5464fedb46b0c5303b._comment | 17 + ..._1d48ac08714fadcb06d874570d745bd8._comment | 16 + ..._65959f49a2f56bffd6fe48670c0c8d5a._comment | 8 + ..._7482002991672ef67836bae43b8d0be8._comment | 8 + doc/tips/powerful_file_matching.mdwn | 36 + doc/tips/recover_data_from_lost+found.mdwn | 19 + ...overing_from_a_corrupt_git_repository.mdwn | 17 + ..._f5827be97f78dbae113a5ba0c9ced896._comment | 8 + ..._e98df7275bb032308bb87e3607bdde32._comment | 8 + ..._11bece6dfac090edbcd783b266c482a3._comment | 8 + ..._86e99017f7585ac2f76753051214637e._comment | 8 + ..._c8953732ce353cdf0c4fb81ddc98c04a._comment | 8 + ..._d0da84df0241dc6ccf0aa0c7598917df._comment | 8 + ..._addf49556e4c33d55a41c393f519d0a4._comment | 10 + ..._505a2fc2b841fe8eb419801f923ef35f._comment | 8 + ...e_or_dvcs-autosync_with_the_assistant.mdwn | 41 + ..._907e4032ca4a39adb846cf16dbf447dc._comment | 8 + ..._902d001ba86657ef0f8cca5b175f99ca._comment | 8 + ..._a1cf93f9b29658f0f26e9e0ae6057ee3._comment | 60 + ..._e10671908b58c554375787d0f76e2366._comment | 13 + ..._4114380f66b6376c851e93f6876d590b._comment | 8 + ..._6a5d6af107b297afd008b021f73d787b._comment | 8 + ..._74d57cf503a86d8f7ace2d769dbb58be._comment | 10 + ...tup_a_public_repository_on_a_web_site.mdwn | 55 + ..._1d0fa6da33e401df1d7ff31979247fec._comment | 10 + ..._b98b761dee9d923153e3c288c1d987ee._comment | 11 + ...nnex_directory_between_multiple_users.mdwn | 39 + doc/tips/skydriveannex.mdwn | 29 + doc/tips/untrusted_repositories.mdwn | 28 + doc/tips/using_Amazon_Glacier.mdwn | 75 + doc/tips/using_Amazon_S3.mdwn | 37 + ..._666a26f95024760c99c627eed37b1966._comment | 8 + ..._f5a0883be7dbb421b584c6dc0165f1ef._comment | 8 + doc/tips/using_Google_Cloud_Storage.mdwn | 9 + ..._c576182f39563ae68767391c4227a177._comment | 18 + .../using_box.com_as_a_special_remote.mdwn | 71 + ..._no_fixed_hostname_and_optimising_ssh.mdwn | 59 + ..._c0b7682a2b6f3078457b85683c825baf._comment | 10 + doc/tips/using_gitolite_with_git-annex.mdwn | 89 + ..._8767bc8014b459a3cd76f275fd4fa8d6._comment | 8 + ..._00715e0b47f09130e0e536e29f7b9258._comment | 31 + ..._7027ce60265b8f24c8ab54553e544068._comment | 8 + ..._75218b7409c0e281cb01c9b2791e8cdf._comment | 20 + ..._7d4d4515218d1259d32be3baeb5ee56e._comment | 13 + ..._dc6f21b5a3d5931c8d949a9753411b9e._comment | 29 + ..._8e5039e6655fc80dc863b6cdf44ef02a._comment | 15 + ..._9c40e1da8bb44f7207e802377f5cf923._comment | 11 + ..._9a2a2a8eac9af97e0c984ad105763a73._comment | 15 + ..._d8efea4ab9576555fadbb47666ecefa9._comment | 8 + ..._807035f38509ccb9f93f1929ecd37417._comment | 8 + ..._eb81f824aadc97f098379c5f7e4fba4c._comment | 33 + ..._f688309532d2993630e9e72e87fb9c46._comment | 20 + ..._3e203e010a4df5bf03899f867718adc5._comment | 25 + ..._f8fd08b6ab47378ad88c87348057220d._comment | 10 + ..._8249772c142117f88e37975d058aa936._comment | 29 + ..._28418635a6ed7231b89e02211cd3c236._comment | 8 + doc/tips/using_the_SHA1_backend.mdwn | 11 + .../using_the_web_as_a_special_remote.mdwn | 101 + ..._321a41d611c6fe45e047af9c96c5176c._comment | 26 + ..._dfe9c8c49aadff80d2020288584e0390._comment | 10 + ..._ed8dd3bbd9b9ae7f2309b72b94f61eb1._comment | 18 + ..._c1133a524989a940f1b5db588707157a._comment | 10 + .../visualizing_repositories_with_gource.mdwn | 22 + .../screenshot.jpg | Bin 0 -> 78509 bytes ..._to_do_when_a_repository_is_corrupted.mdwn | 22 + ...what_to_do_when_you_lose_a_repository.mdwn | 19 + ..._cf19b8dc304dc37c26717174c4a98aa4._comment | 11 + ..._fa9ca81668f5faebf2f61b10f82c97d2._comment | 8 + ...nother_simple_disk_usage_like_utility.mdwn | 9 + ..._41b212bde8bc88d2a5dea93bd0dc75f1._comment | 9 + ..._73698913837bfd5a58cf15721211e43e._comment | 8 + doc/todo.mdwn | 4 + ...y_to_pair_devices_like_bittorent_sync.mdwn | 7 + ..._d828bc374e50a49101c0b863f9b33080._comment | 8 + ..._a4badfc248be428e6426a936212cc896._comment | 8 + ..._0b04089d3d33fdb48eeb46bf168e9a3c._comment | 8 + ..._2bcab1b7998b4df08fca41b8d810f115._comment | 10 + ..._677e958c3f2effec7528b484aeb6478d._comment | 13 + ..._56e53803fdede895cba717e6b6e9a1bb._comment | 23 + doc/todo/Bittorrent-like_features.mdwn | 45 + ..._f4c110ef35ebf4fd89f06edf2c4f0c48._comment | 13 + doc/todo/Build_for_Synology_DSM.mdwn | 1 + ..._e351084d9a83db3fd6d9d983227a6410._comment | 8 + ..._cc67a584f5c460a6fb63cf099c20e573._comment | 9 + ..._94023593d294b9cf69090fcfd6ca0e5a._comment | 9 + ..._314255fd503d125b5aeae2f62acfd592._comment | 8 + ..._9525cd0d75ff4c15182d10a855774b69._comment | 30 + ..._4059016fa8da6af7a3eba8966821e8eb._comment | 10 + ..._8900c2985ab68b3b566c9f5d326471d6._comment | 8 + ..._f2b77368473d42b7f21e9d51d6415b58._comment | 10 + ..._a55fea734044c270ceb10adf9c8d9a76._comment | 8 + ..._59865ada057c640ac29855c65cf45dd9._comment | 23 + ..._6d860b1ad8816077b5fa596a71b12d5c._comment | 8 + ..._19ef2d293ba3bc7ece443d7278371c3f._comment | 8 + ..._609b7ad87dfbba49ec1f8c6fc2739ccd._comment | 12 + ..._d94a73b9a07c5cadf191005f817fd59a._comment | 29 + ...an_upgrade_is_available_in_the_webapp.mdwn | 5 + ..._c904182f6bff8b1a42070bbc038eb34e._comment | 17 + doc/todo/Deleting_Unused_Files_by_Age.mdwn | 13 + ...___47__ssh__47__git-annex__47__config.mdwn | 7 + ..._284c806e83a32af81b02aea7c7bc285a._comment | 10 + ..._1f55ad6b39906458779b2d604b003ffe._comment | 10 + ..._b00dce2374aac6968317d05d23bcfaf7._comment | 8 + ..._743d0b077110c5cac1e2f47187b75333._comment | 10 + doc/todo/Not_working_on_Android-x86.mdwn | 19 + ..._5eec4d7530c9df68f1bd1b1ca7021ef5._comment | 14 + ...ion_for_browser_to_launch_webapp_with.mdwn | 7 + ..._build_if___34__make_test__34___fails.mdwn | 7 + ...e_add_support_for_monad-control_0.3.x.mdwn | 9 + doc/todo/S3.mdwn | 24 + doc/todo/Show_repo_type_in_repo_list.mdwn | 1 + ..._ac6eb1072ef902a094b79dd8e0917c4d._comment | 10 + ..._6979c487f707a724a048d20e2e5744e6._comment | 14 + ..._529254a6cc20de7259d60a3cbc5ccaf7._comment | 8 + ...ow_transfer_for_a_lot_of_small_files..mdwn | 20 + doc/todo/Sync_repo_names__63__.mdwn | 10 + ...Use_MediaScannerConnection_on_Android.mdwn | 7 + ...g_site_for_files_with_obfuscated_URLs.mdwn | 7 + ..._1a1f34f4f389267d67e79409c0ca8b1d._comment | 9 + ...ional_environment_variables_for_hooks.mdwn | 14 + ..._fix_wrong_UUID__47__duplicate_remote.mdwn | 7 + ...irectory_and_also_in_the_target_annex.mdwn | 29 + ..._0cc16eb17151309113cec6d1cccf203d._comment | 20 + ...rsion__96___should_print_the_local_OS.mdwn | 6 + ...__tracking_info__44___and_actual_data.mdwn | 3 + ...dd_--exclude_option_to_git_annex_find.mdwn | 4 + doc/todo/add_-all_option.mdwn | 22 + doc/todo/add_a_git_backend.mdwn | 18 + .../add_an_icon_for_the_.desktop_file.mdwn | 1 + doc/todo/add_metadata_to_annexed_files.mdwn | 5 + ..._38af9b352020194e9ace34d7dde188cf._comment | 10 + ...epo_via_an_ssh_alias_or_an_ip_address.mdwn | 48 + doc/todo/assistant_git_sync_laddering.mdwn | 10 + .../assistant_parallel_file_transfers.txt | 15 + ...nt_smarter_archive_directory_handling.mdwn | 31 + doc/todo/assistant_threaded_runtime.mdwn | 40 + doc/todo/auto_remotes.mdwn | 29 + doc/todo/auto_remotes/discussion.mdwn | 7 + .../automatic_bookkeeping_watch_command.mdwn | 15 + ...nches_upon___34__git_annex_sync__34__.mdwn | 16 + doc/todo/avoid_unnecessary_union_merges.mdwn | 20 + doc/todo/backendSHA1.mdwn | 7 + doc/todo/branching.mdwn | 159 + doc/todo/cache_key_info.mdwn | 37 + ..._578df1b3b2cbfdc4aa1805378f35dc48._comment | 11 + doc/todo/checkout.mdwn | 23 + .../checksum_verification_on_transfer.mdwn | 7 + ..._30f77e631608b9751f9032f97d58cc30._comment | 17 + doc/todo/direct_mode_guard.mdwn | 105 + ..._431b6e1577bbd30b07dce9002a8fe1a2._comment | 10 + ..._85bdb9dc601b87bd7c77150d7b0a5cde._comment | 8 + doc/todo/done.mdwn | 4 + ...emote___40__e.g._for_NAS_mounts__41__.mdwn | 5 + ..._5ed9a2336b432b842c1805add6d96509._comment | 10 + ..._e6ba58c5c31ba23a4575f1189689946f._comment | 8 + doc/todo/exclude_files_on_a_given_remote.mdwn | 18 + doc/todo/faster_gnupg_cipher.mdwn | 9 + ..._8f61f7c724a8224e61c015be68f43db7._comment | 14 + ..._36e1f227a320527653500b445f7c001c._comment | 12 + ..._bd0c975494333dfe558de048d888ace8._comment | 17 + doc/todo/faster_rsync_remotes.mdwn | 4 + ..._0bc3ee0ae563357675eeccf42461e59a._comment | 8 + ..._ccf6f75450c89ca498c8130054f8d32d._comment | 24 + ..._2f6a9d23cb8351fbf0f60ed93752e76e._comment | 14 + ..._3a2f45defebae3dde336ee5f40c26d7e._comment | 8 + doc/todo/file_copy_progress_bar.mdwn | 5 + ...ce_checking_for_local_special_remotes.mdwn | 4 + ..._47c254cec58cbbb3ea84c93ef8282f01._comment | 8 + doc/todo/fsck.mdwn | 11 + doc/todo/fsck_special_remotes.mdwn | 13 + doc/todo/git-annex-shell.mdwn | 15 + doc/todo/git-annex_unused_eats_memory.mdwn | 32 + ...on_and__47__or_UUID_in_commit_message.mdwn | 13 + doc/todo/gitolite_and_gitosis_support.mdwn | 39 + doc/todo/gitrm.mdwn | 5 + doc/todo/hidden_files.mdwn | 30 + doc/todo/http_git_annex_404_retry.mdwn | 16 + doc/todo/http_headers.mdwn | 8 + doc/todo/immutable_annexed_files.mdwn | 8 + ..._123__itemdate__125___with_--template.mdwn | 5 + ..._62752c760fc12eca0c34d67d58753d00._comment | 10 + ..._21672360060f48bc2eacfa535ff4c94d._comment | 11 + doc/todo/incremental_fsck.mdwn | 24 + ..._609b21141dd5686b2c0eaef2b8d63229._comment | 14 + doc/todo/keep_annexed_files_for_a_while.mdwn | 8 + .../link_file_to_remote_repo_feature.mdwn | 52 + doc/todo/makefile:_respect___36__PREFIX.mdwn | 25 + doc/todo/mdwn2man:_make_backticks_bold.mdwn | 22 + doc/todo/network_remotes.mdwn | 5 + doc/todo/nicer_whereis_output.mdwn | 100 + doc/todo/object_dir_reorg_v2.mdwn | 25 + ..._ba03333dc76ff49eccaba375e68cb525._comment | 8 + ..._81276ac309959dc741bc90101c213ab7._comment | 8 + ..._79bdf9c51dec9f52372ce95b53233bb2._comment | 12 + ..._93aada9b1680fed56cc6f0f7c3aca5e5._comment | 12 + ..._821c382987f105da72a50e0a5ce61fdc._comment | 12 + ..._8834c3a3f1258c4349d23aff8549bf35._comment | 10 + ..._42501404c82ca07147e2cce0cff59474._comment | 12 + doc/todo/optimise_git-annex_merge.mdwn | 23 + ...optinally_transfer_file_unencryptedly.mdwn | 6 + ..._4be47e7ac85d0f4e7029a96b615545a7._comment | 8 + doc/todo/parallel_possibilities.mdwn | 13 + ..._d8e34fc2bc4e5cf761574608f970d496._comment | 8 + ..._adb76f06a7997abe4559d3169a3181c3._comment | 12 + ..._145fb974f45da99b7d4b117a3699cccf._comment | 12 + doc/todo/pushpull.mdwn | 4 + doc/todo/quvi_0.9_support.mdwn | 8 + doc/todo/redundancy_stats_in_status.mdwn | 23 + ..._9f1c10f8cea4fa60a99cbcc8306dd5de._comment | 10 + ..._686ced0684d10511caf07953c64cd5b6._comment | 10 + doc/todo/resuming_encrypted_uploads.mdwn | 22 + ..._1832a6fb78e8ad7c838582f46731ac3b._comment | 8 + ..._2ecc8e782f49e90ed1549e9179eb1a1e._comment | 8 + doc/todo/rsync.mdwn | 4 + doc/todo/smudge.mdwn | 162 + ..._4ea616bcdbc9e9a6fae9f2e2795c31c9._comment | 8 + ..._e04b32caa0d2b4c577cdaf382a3ff7f6._comment | 12 + ..._4e7c25fe24a1e71f58a8354fa64f41c2._comment | 10 + .../special_remote_for_amazon_glacier.mdwn | 30 + ..._68f129441eefcbfebf7a9db680f52759._comment | 8 + ..._c5eeaf8ceee414fa0379831ca52e290c._comment | 7 + doc/todo/speed_up_fsck.mdwn | 40 + doc/todo/stream_feature__63__.mdwn | 23 + doc/todo/support-non-utf8-locales.mdwn | 26 + doc/todo/support_S3_multipart_uploads.mdwn | 14 + doc/todo/support_for_lossy_remotes.mdwn | 11 + ..._f5cd9f9deab13ab2d2290ad763906dd3._comment | 8 + ..._for_writing_external_special_remotes.mdwn | 25 + doc/todo/support_fsck_in_bare_repos.mdwn | 17 + doc/todo/symlink_farming_commit_hook.mdwn | 14 + ...my_local_git-annex_from_a_dump_remote.mdwn | 6 + ..._81d63854f89f00855cda5ace0fc8262a._comment | 14 + ..._66822b72b1450e79e8edd0c6c21d5aa6._comment | 14 + ..._b9f73375e2c732e798495f8ee6970c7c._comment | 14 + doc/todo/tahoe_lfs_for_reals.mdwn | 21 + ..._0a4793ce6a867638f6e510e71dd4bb44._comment | 10 + ..._80b9e848edfdc7be21baab7d0cef0e3a._comment | 13 + doc/todo/union_mounting.mdwn | 10 + ..._cb08435812dd7766de26199c73f38e8b._comment | 8 + ..._240b1736f6bd4fbf87c372d3a46e661b._comment | 9 + doc/todo/untracked_remotes.mdwn | 9 + doc/todo/use_cp_reflink.mdwn | 7 + doc/todo/using_url_backend.mdwn | 11 + .../whishlist:_git_annex_drop_--dry-run.mdwn | 5 + ..._20ecfa8ffa52c238d21b904076ac69a2._comment | 10 + ..._d19bc268c9467d24baa8d8f77a6e5e09._comment | 8 + doc/todo/windows_support.mdwn | 23 + ..._394127e34e07ab3dc0e7b94ee6898866._comment | 8 + ..._3cc26ad8101a22e95a8c60cf0c4dedcc._comment | 10 + ..._8acae818ce468967499050bbe3c532ea._comment | 12 + ..._bd0a12f4c9b884ab8a06082842381a01._comment | 8 + ..._ad06b98b2ddac866ffee334e41fee6a8._comment | 8 + ..._444fc7251f57db241b6e80abae41851c._comment | 10 + ..._34f1f60b570c389bb1e741b990064a7e._comment | 8 + ..._a5ca56c487257434650420acfa60e39f._comment | 8 + ..._61214de7d967740d42905f3823ce2f65._comment | 12 + ..._259a0b1a6f4d8d1944173380adc5e7c8._comment | 8 + ...Add_to_Android_version_to_Google_Play.mdwn | 9 + ...Advanced_settings_for_xmpp_and_webdav.mdwn | 7 + ..._11c7444ab4988c60732af505b52bde3c._comment | 20 + ...hlist:_An_--all_option_for_dropunused.mdwn | 4 + ..._d8726d108b3b40116b4ec3c9935f2dff._comment | 8 + ..._578248f7686ba2d80d7dc8b17c0cdf52._comment | 16 + .../wishlist:_An_option_like_--git-dir.mdwn | 3 + ..._5d877d90b8bdf21d4b8649744d229efd._comment | 8 + ..._462264821cbc48a433330cbf7ec6044d._comment | 8 + ..._0c3709b07a0a1091ceeee73b69e0f7ac._comment | 8 + ...wishlist:_Freeing_X_space_on_remote_Y.mdwn | 1 + doc/todo/wishlist:_GnuPG_options.mdwn | 16 + ..._6662e8a71ce20acc62147ef41ecffa50._comment | 12 + ..._a_preview_of_download_or_upload_size.mdwn | 10 + ..._019a2457e07377510feaa089a93bd76c._comment | 8 + ..._29a154699339bf040af0ee8aa24034f1._comment | 15 + ..._8f7e1c4a5c714cbd719ee170354d79fa._comment | 12 + ..._c7335f757e5546aa841cab38fffe7605._comment | 19 + ..._d2a845354f23d07880612740cf99ddd4._comment | 8 + ...:_Option_to_specify_max_transfer_rate.mdwn | 3 + ..._4fd870e14b5b70c8a6ade41406294387._comment | 10 + ..._dd854f297ad6a94b54be9f3edfd0f766._comment | 8 + ..._a8b7e90a473d5937807cc7eb456efe33._comment | 10 + ...ated_password_prompts_for_one_command.mdwn | 45 + ..._3f9c0d08932c2ede61c802a91261a1f7._comment | 14 + ...4___command_that_will_skip_duplicates.mdwn | 28 + ..._d78d79fb2f3713aa69f45d2691cf8dfe._comment | 68 + ..._4316d9d74312112dc4c823077af7febe._comment | 8 + ..._ed6d07f16a11c6eee7e3d5005e8e6fa3._comment | 8 + ..._fd213310ee548d8726791d2b02237fde._comment | 29 + ..._4394bde1c6fd44acae649baffe802775._comment | 18 + ..._076cb22057583957d5179d8ba9004605._comment | 18 + ..._f120d1e83c1a447f2ecce302fc69cf74._comment | 35 + ..._5c30294b3c59fdebb1eef0ae5da4cd4f._comment | 10 + ..._f24541ada1c86d755acba7e9fa7cff24._comment | 16 + ..._c39f1bb7c61a89b238c61bee1c049767._comment | 54 + ..._221ed2e53420278072a6d879c6f251d1._comment | 8 + ..._aecfa896c97b9448f235bce18a40621d._comment | 14 + ...st:_Restore_s3_files_moved_to_Glacier.mdwn | 7 + ...not__41___to_annex_via_.gitattributes.mdwn | 9 + ...it_annex_add__34___multiple_processes.mdwn | 10 + ..._85b14478411a33e6186a64bd41f0910d._comment | 10 + ..._82e857f463cfdf73c70f6c0a9f9a31d6._comment | 8 + ..._8af85eba7472d9025c6fae4f03e3ad75._comment | 8 + ...___annex_get_for_centralized_use_case.mdwn | 14 + ..._5c8812973cf91b046e7fc44d7e86c78e._comment | 14 + ..._f36b6a5b128423211aac91a252ecf85f._comment | 18 + ..._ad1569b2405acacd2e37f42b82f24c88._comment | 10 + ..._8aba90150fe178ce9712ad951628f3d6._comment | 8 + ..._6f42d240e0021f4dfa37146bea3f5d7e._comment | 16 + ..._5fda455febf728b079f26fe42bf7bcab._comment | 16 + ..._f1052ab997f1a2cccbabfd1533fc0a59._comment | 8 + ..._07804647b6023436878756bd97a23f32._comment | 8 + ...:___39__get__39___queue_and_schedule..mdwn | 30 + ...__whereis__39___support_in_the_webapp.mdwn | 4 + ...___96__git_annex_drop_--relaxed__96__.mdwn | 5 + ..._c83a6cddd0ce222205a149cfa41ca395._comment | 10 + ..._353fbc2bcc40cb8c9af42907a34c6e5a._comment | 11 + ...ecksums_but_disregard_annex.numcopies.mdwn | 12 + ..._6bcf067e4860bdfeb1d7b9fd1702a43a._comment | 8 + ...An_easy_way_to_get_data_into_an_annex.mdwn | 13 + ..._b9fd1bfaf9a3d238fdb7bc9c2d75fe5f._comment | 22 + ..._56f6972413c6f0d9f414245b6f4d27b9._comment | 62 + ..._2c094bef802a2182de4fcd0def1ad29b._comment | 12 + ..._14915c43001f7f72c9fe5119a104ef5c._comment | 10 + ...shlist:___96__git_annex_sync_-m__96__.mdwn | 10 + ...ed___40__e.g.__44___with_WebDAV__41__.mdwn | 25 + ..._f46b0c9b49607e9f4f7a27f5a331ce83._comment | 8 + ..._1b34e1dd72011c65e881dec2543a0373._comment | 12 + ...file_samples_for_assistant_and_webapp.mdwn | 6 + ..._b89e90f9a70748c95aaf81740a40b76e._comment | 8 + ..._d64361380cb18b98ddb43ada1c9f540a._comment | 8 + doc/todo/wishlist:_addurl_https:.mdwn | 11 + ..._4e8f5e1fc52c3000eb2a1dad0624906e._comment | 14 + ...onfiguration_of_downloader_for_addurl.mdwn | 3 + ...o_be_accissable_via_different_methods.mdwn | 5 + ..._abb6263f3807160222bba1122475c89c._comment | 8 + ...en_running___96__git_annex_init__96__.mdwn | 5 + ...tracking_the_sources_of_the_downloads.mdwn | 28 + ..._36ae3c75053d5ec278b5e6eb2084d57a._comment | 8 + ..._be8eb800523db8cf7a2c68a28fbf5ea5._comment | 8 + ..._d9f725de41a8572c85e4c6d9b4bcc927._comment | 8 + ..._f52492e4cc6f965515800bd1c0e05c90._comment | 10 + ..._5b36656fc5fa124e763f06711d9da32b._comment | 10 + ..._285215a4466806baf85b8606f680494a._comment | 12 + ..._15bf62e46db4b84ed3156f550f03de42._comment | 12 + ...iles_configuration_in_webapp_and_sync.mdwn | 1 + ..._db632de391ce9fce42af51a770ed3aeb._comment | 10 + ..._4a0931d9884054d764fde315d4fe4851._comment | 14 + ...nnex.largefiles_support_for_mimetypes.mdwn | 1 + ..._304431bb62b5b8a64edc37a11bbaff59._comment | 8 + ...from_remote_with_the_least_free_space.mdwn | 1 + ..._6813fdc7ecc98765a5d35d34163a1712._comment | 8 + ..._21a249cedca1ceb80d10784004735524._comment | 8 + ...tostart_port_and_secret_configuration.mdwn | 1 + ..._be53b8456eed7eadad5d4b8465c8a42b._comment | 10 + .../wishlist:_command_options_changes.mdwn | 17 + ..._bfba72a696789bf21b2435dea15f967a._comment | 17 + ..._f6a637c78c989382e3c22d41b7fb4cc2._comment | 19 + ..._bf1114533d2895804e531e76eb6b8095._comment | 8 + ...fine_remotes_that_must_have_all_files.mdwn | 18 + ..._cceccc1a1730ac688d712b81a44e31c3._comment | 10 + ..._eec848fcf3979c03cbff2b7407c75a7a._comment | 16 + ...ishlist:_detection_of_merge_conflicts.mdwn | 13 + .../wishlist:_disable_automatic_commits.mdwn | 36 + ...n_addWatcher_gets_a_permission_denied.mdwn | 6 + ..._d2665e7347689b520d37561cfddf0aa8._comment | 8 + ..._db153571a32fb072453ed583e3e9ccf4._comment | 8 + ...splay_status_of_remotes_in_the_webapp.mdwn | 1 + ...t:_do_round_robin_downloading_of_data.mdwn | 5 + ..._460335b0e59ad03871c524f1fe812357._comment | 8 + .../wishlist:_dropping_git-annex_history.mdwn | 28 + ..._a4bee2e26b22a9bdaadc05b7227769ef._comment | 10 + ..._f6d750bfe0c9d8a2aa6bc218ca5c49cc._comment | 14 + ...it_remote_on_hosting_site_from_webapp.mdwn | 1 + .../wishlist:_generic_annex.cost-command.mdwn | 17 + doc/todo/wishlist:_git-annex_replicate.mdwn | 12 + ..._9926132ec6052760cdf28518a24e2358._comment | 10 + ..._c43932f4194aba8fb2470b18e0817599._comment | 12 + ..._c13f4f9c3d5884fc6255fd04feadc2b1._comment | 10 + ..._63f24abf086d644dced8b01e1a9948c9._comment | 8 + doc/todo/wishlist:_git_annex_diff.mdwn | 9 + ...--_same_as_get__44___but_for_defaults.mdwn | 17 + ..._d5413c8acce308505e4e2bec82fb1261._comment | 10 + ..._0aa227c85d34dfff4e94febca44abea8._comment | 12 + ..._2082f4d708a584a1403cc1d4d005fb56._comment | 10 + doc/todo/wishlist:_git_annex_status.mdwn | 21 + ..._994bfd12c5d82e08040d6116915c5090._comment | 8 + ..._c2b0ce025805b774dc77ce264a222824._comment | 13 + ..._d1fd70c67243971c96d59e1ffb7ef6e7._comment | 23 + ..._9aeeb83d202dc8fb33ff364b0705ad94._comment | 8 + .../wishlist:_git_backend_for_git-annex.mdwn | 9 + ..._04319051fedc583e6c326bb21fcce5a5._comment | 10 + ..._7f529f19a47e10b571f65ab382e97fd5._comment | 14 + ..._a077bbad3e4b07cce019eb55a45330e7._comment | 10 + ..._ecca429e12d734b509c671166a676c9d._comment | 8 + ..._3459f0b41d818c23c8fb33edb89df634._comment | 8 + doc/todo/wishlist:_history_of_operations.mdwn | 8 + ..._f9a77ce83c6f39b6272d5c577ffbb9f9._comment | 8 + ...ce_the_size_of_repo_to_complete__41__.mdwn | 10 + ..._067b29fc47d26b9da0766f9810684ae8._comment | 10 + ...it_annex_reinject_work_in_direct_mode.mdwn | 21 + ...rtial_files_available_during_transfer.mdwn | 18 + ..._1304a721da6f5133fdfa1dac507f1ecb._comment | 10 + ...e_commit_messages_in_git-annex_branch.mdwn | 39 + ...rd_commit_message_of___96__sync__96__.mdwn | 3 + ...o_the_end_of_the_queue_when_one_fails.mdwn | 7 + ..._82ee9de610a0ac55cd1c27c211079e5b._comment | 10 + ..._bea55156bd32cf9e6dd9b946ba1bb8c1._comment | 10 + ...n_to_disable_url_checking_with_addurl.mdwn | 9 + ..._868a380faa1e55faa3c2d314e3258e86._comment | 10 + ...int_more_info_with___39__unused__39__.mdwn | 37 + doc/todo/wishlist:_perform_fsck_remotely.mdwn | 39 + ..._db92311dcdb1ef0ab0413f83e191c70c._comment | 15 + ..._2f0dbaf143d94290bfbebb6869eb7241._comment | 12 + ...t_locations_for_files_in_rsync_remote.mdwn | 6 + ...9__s_repo__44___not_your_personal_one.mdwn | 3 + ..._3480b0ec629ef29a151408d869186bf8._comment | 8 + ...gs_like_description__44___trust_level.mdwn | 4 + ..._14311384788312b96e550749ab7de9ea._comment | 10 + ..._342d1ac07573c7ef4e27f003a692e261._comment | 32 + ...ve_directory_remote_setup__47__addurl.mdwn | 7 + ..._b79976afc2242791523e63831f30af71._comment | 12 + ..._1741d2392006a9af9cfd1f3b847600b9._comment | 9 + doc/todo/wishlist:_simple_url_for_webapp.mdwn | 36 + ..._552aad504fbb68d1f85abfde8c535e69._comment | 10 + doc/todo/wishlist:_simpler_gpg_usage.mdwn | 12 + ..._6923fa6ebc0bbe7d93edb1d01d7c46c5._comment | 19 + ..._6fc874b6c391df242bd2592c4a65eae8._comment | 10 + ..._012f340c8c572fe598fc860c1046dabd._comment | 8 + ..._e0c2a13217b795964f3b630c001661ef._comment | 10 + ..._9668b58eb71901e1db8da7db38e068ca._comment | 8 + ...ores___40__gnunet__44___freenet__41__.mdwn | 26 + ..._e2c2047e7401cb95a82ffb686a732859._comment | 8 + ..._472b576afdb169b233edd01adcb2123d._comment | 8 + ...of_Youtube_URLs_in_Web_special_remote.mdwn | 22 + ..._1a383c30df4fb1767f13d8c670b0c0b5._comment | 10 + ..._81f7f893ac36c145b31f02db6a682a17._comment | 20 + ..._a7e3cd68c5e5f05139151a58f358df95._comment | 13 + ..._a57947ed257b28bbe995a68bfeb5eeaa._comment | 8 + ..._a0612ae05dbda7f7935be648b42b30fc._comment | 8 + .../wishlist:_special_remote_Ubuntu_One.mdwn | 1 + ...ist:_special_remote_for_sftp_or_rsync.mdwn | 28 + ..._6f07d9cc92cf8b4927b3a7d1820c9140._comment | 10 + ..._84e4414c88ae91c048564a2cdc2d3250._comment | 8 + ..._79de7ac44e3c0f0f5691a56d3fb88897._comment | 8 + .../wishlist:_special_remote_mega.co.nz.mdwn | 3 + ..._6ca08ef808d4336fc42d0f279d6627b5._comment | 44 + ...upport_copy_--from__61__x_--to__61__y.mdwn | 29 + ..._cf8e0f16b723516374c95a93e4da42fc._comment | 12 + ..._d35359c9dd4dd4365d9a7caf695ff833._comment | 16 + ...rt_drop__44___find_on_special_remotes.mdwn | 18 + ..._f11ed642a83d965076778a162f701e84._comment | 8 + .../wishlist:_support_for_more_ssh_urls_.mdwn | 22 + doc/todo/wishlist:_swift_backend.mdwn | 5 + ..._e6efbb35f61ee521b473a92674036788._comment | 8 + ..._5d8c83b0485112e98367b7abaab3f4e3._comment | 8 + ..._bf8625b909c3a7321cae40e6f145e874._comment | 8 + ..._4d97d12ddd99834788e94648c8eebef9._comment | 10 + ...ist:_traffic_accounting_for_git-annex.mdwn | 3 + ..._unify_directory_scheme_for_the_store.mdwn | 20 + ..._44da58beaaab359ecaba7fb905ca4ae1._comment | 10 + ..._bc698c501ecdb56df57171f4f3bb831a._comment | 16 + ..._e555d0dbbaa05528806905c6a940724b._comment | 8 + ...hlist:_use_hardlinks_for_local_clones.mdwn | 9 + ..._85064fafe472a5bd395d60ce8f7acb56._comment | 12 + ...list:_vicfg_possible_repo_group_names.mdwn | 16 + doc/todo/wishlist:alias_system.mdwn | 1 + doc/todo/wishlist_degraded_files.mdwn | 5 + doc/transferring_data.mdwn | 19 + doc/trust.mdwn | 59 + doc/upgrades.mdwn | 106 + doc/upgrades/SHA_size.mdwn | 20 + ..._20f9b7b75786075de666b2146dc13a60._comment | 12 + doc/upgrades/gcrypt.mdwn | 25 + ..._606c1527735996ae671f78948e4ad84b._comment | 8 + doc/use_case/Alice.mdwn | 24 + doc/use_case/Bob.mdwn | 25 + doc/users.mdwn | 9 + doc/users/anarcat.mdwn | 41 + doc/users/chrysn.mdwn | 11 + doc/users/clacke.mdwn | 3 + doc/users/fmarier.mdwn | 6 + doc/users/gebi.mdwn | 1 + doc/users/joey.mdwn | 2 + doc/users/tobiastheviking.mdwn | 20 + doc/videos.mdwn | 8 + doc/videos/FOSDEM2012.mdwn | 7 + doc/videos/LCA2013.mdwn | 8 + doc/videos/git-annex_assistant_archiving.mdwn | 5 + .../git-annex_assistant_introduction.mdwn | 5 + ..._f42ad4183c2c28319d3705a82fceb82f._comment | 15 + ..._b62f4eeeac1138570f7cb8c98d41c2cb._comment | 12 + .../git-annex_assistant_remote_sharing.mdwn | 6 + doc/videos/git-annex_assistant_sync_demo.mdwn | 8 + doc/videos/git-annex_watch_demo.mdwn | 7 + doc/videos/git-annex_weppapp_demo.mdwn | 8 + doc/walkthrough.mdwn | 25 + doc/walkthrough/adding_a_remote.mdwn | 19 + ..._0a59355bd33a796aec97173607e6adc9._comment | 8 + ..._f8cd79ef1593a8181a7f1086a87713e8._comment | 9 + ..._60691af4400521b5a8c8d75efe3b44cb._comment | 9 + ..._6f7cf5c330272c96b3abeb6612075c9d._comment | 10 + doc/walkthrough/adding_files.mdwn | 11 + .../automatically_managing_content.mdwn | 45 + doc/walkthrough/backups.mdwn | 25 + doc/walkthrough/creating_a_repository.mdwn | 6 + .../fsck:_verifying_your_data.mdwn | 16 + .../fsck:_when_things_go_wrong.mdwn | 13 + doc/walkthrough/getting_file_content.mdwn | 12 + doc/walkthrough/modifying_annexed_files.mdwn | 44 + ..._624b4a0b521b553d68ab6049f7dbaf8c._comment | 14 + ..._b000622304535d32b69db17d51156b21._comment | 10 + doc/walkthrough/more.mdwn | 3 + ...ing_file_content_between_repositories.mdwn | 13 + ..._4c30ade91fc7113a95960aa3bd1d5427._comment | 19 + ..._7d90e1e150e7524ba31687108fcc38d6._comment | 10 + ..._558d80384434207b9cfc033763863de3._comment | 12 + ..._a2f343eceed9e9fba1670f21e0fc6af4._comment | 8 + doc/walkthrough/removing_files.mdwn | 17 + ..._cb65e7c510b75be1c51f655b058667c6._comment | 8 + ..._64709ea4558915edd5c8ca4486965b07._comment | 8 + .../removing_files:_When_things_go_wrong.mdwn | 24 + doc/walkthrough/renaming_files.mdwn | 13 + doc/walkthrough/syncing.mdwn | 27 + ...nsferring_files:_When_things_go_wrong.mdwn | 17 + doc/walkthrough/unused_data.mdwn | 35 + ..._684b7b652d3a8ec04f32129c5528f1ab._comment | 22 + doc/walkthrough/using_bup.mdwn | 37 + doc/walkthrough/using_ssh_remotes.mdwn | 33 + ..._98e97c4d7fbbcd449eddf683967a71d6._comment | 8 + ..._f2775a151ed50caba27057bd9c38bae2._comment | 13 + ..._a8bc6110128431ca2a8624ddc75ea364._comment | 10 + ..._365db5820d96d5daa62c19fd76fcdf1e._comment | 13 + ..._451fd0c6a25ee61ef137e8e5be0c286b._comment | 16 + ..._b2f15a46620385da26d5fe8f11ebfc1a._comment | 15 + ..._433ccc87fbb0a13e32d59d77f0b4e56c._comment | 8 + ..._a9805c7965da0b88a1c9f7f207c450a1._comment | 18 + ..._9d5c12c056892b706cf100ea01866685._comment | 12 + ..._725e7dbb2d0a74a035127cb01ee0442c._comment | 16 + ..._8448e55026d2c2b50d8da41707686bea._comment | 16 + ..._61833299a9878f23ac57598fa6da8839._comment | 23 + doc/walkthrough/using_tags_and_branches.mdwn | 14 + ghci | 4 + git-annex.cabal | 201 + git-annex.hs | 34 + git-union-merge.hs | 48 + standalone/android/Makefile | 167 + standalone/android/abiversion | 1 + standalone/android/buildchroot | 27 + standalone/android/buildchroot-inchroot | 25 + .../android/buildchroot-inchroot-asuser | 38 + standalone/android/busybox_config | 997 ++ standalone/android/clean-haskell-packages | 6 + standalone/android/dropbear.patch | 55 + standalone/android/evilsplicer-headers.hs | 32 + .../DAV_build-without-TH.patch | 377 + ...TP_4000.2.8-0001-build-with-base-4.8.patch | 25 + ..._0001-fix-build-not-Android-specific.patch | 34 + ...rs_hack-to-get-to-build-with-new-ghc.patch | 56 + ...afeSemaphore_fix-build-with-new-base.patch | 36 + .../async_fix-build-with-new-ghc.patch | 25 + ...loomfilter_fix-build-with-newer-base.patch | 26 + .../haskell-patches/comonad_cross-build.patch | 25 + .../crypto-numbers_build-fix.patch | 235 + ...utive_0.3-0001-fixes-for-cross-build.patch | 25 + .../haskell-patches/entropy_cross-build.patch | 25 + .../gnuidn_fix-build-with-new-base.patch | 50 + ...1.4-0001-statically-link-with-gnutls.patch | 37 + .../gsasl_0.3.5-0001-link-with-libgsasl.patch | 25 + ...1.2.11_0001-build-without-IPv6-stuff.patch | 47 + ...ge-javascript_fix-build-with-new-ghc.patch | 25 + .../lens_various-hacking-to-cross-build.patch | 385 + .../lifted-base_crossbuild.patch | 25 + ...work_2.4.1.0_0001-android-port-fixes.patch | 1960 ++++ ....BSD-symbols-not-available-in-bionic.patch | 157 + ....0_0003-configure-misdetects-accept4.patch | 34 + ...-getprotobyname-hack-for-tcp-and-udp.patch | 28 + .../persistent-template_stub-out.patch | 25 + .../persistent_1.1.5.1_0001-disable-TH.patch | 32 + ...opt-stuff-to-allow-cross-compilation.patch | 24 + .../process_fix-build-with-new-ghc.patch | 24 + ...profunctors_3.3-0001-fix-cross-build.patch | 26 + ...shakespeare-css_1.0.2_0001-remove-TH.patch | 148 + ...1.0.2_0002-expose-modules-used-by-TH.patch | 26 + ...001-export-symbol-used-by-TH-splices.patch | 26 + .../skein_hardcode_little-endian.patch | 24 + .../socks_0.4.2_0001-remove-IPv6-stuff.patch | 135 + .../stm-chans_cross-build.patch | 25 + .../unix-time_hack-for-Bionic.patch | 56 + ...out-v1-uuid-which-needs-network-info.patch | 79 + .../vector_hack-to-build-with-new-ghc.patch | 24 + .../wai-app-static_deal-with-TH.patch | 54 + .../yesod-auth_don-t-really-build.patch | 34 + .../yesod-core_expand_TH.patch | 411 + .../yesod-form_spliced-TH.patch | 1783 ++++ ...yesod-persistent_do-not-really-build.patch | 26 + ...port-module-referenced-by-TH-splices.patch | 29 + .../yesod_001_hacked-up-for-Android.patch | 74 + ...esod_002_hack-around-missing-symbols.patch | 41 + ....5.4.0_0001-hack-to-build-on-Android.patch | 35 + .../icons/drawable-hdpi/ic_launcher.png | Bin 0 -> 2612 bytes .../ic_stat_service_notification_icon.png | Bin 0 -> 1310 bytes .../icons/drawable-ldpi/ic_launcher.png | Bin 0 -> 1279 bytes .../ic_stat_service_notification_icon.png | Bin 0 -> 682 bytes .../icons/drawable-mdpi/ic_launcher.png | Bin 0 -> 1768 bytes .../ic_stat_service_notification_icon.png | Bin 0 -> 946 bytes .../icons/drawable-xhdpi/ic_launcher.png | Bin 0 -> 3396 bytes .../ic_stat_service_notification_icon.png | Bin 0 -> 1837 bytes .../android/icons/drawable/ic_launcher.png | 1 + .../ic_stat_service_notification_icon.png | 1 + standalone/android/install-haskell-packages | 120 + standalone/android/openssh.config.h | 249 + standalone/android/openssh.patch | 205 + standalone/android/rsync.patch | 40 + standalone/android/runshell | 132 + standalone/android/start | Bin 0 -> 6492 bytes standalone/android/start.c | 64 + standalone/android/term.patch | 598 ++ standalone/licences.gz | Bin 0 -> 60519 bytes standalone/linux/README | 25 + standalone/linux/git-annex | 25 + standalone/linux/git-annex-shell | 25 + standalone/linux/git-annex-webapp | 25 + standalone/linux/glibc-libs | 43 + standalone/linux/runshell | 76 + .../osx/git-annex.app/Contents/Info.plist | 41 + .../osx/git-annex.app/Contents/MacOS/README | 9 + .../git-annex.app/Contents/MacOS/git-annex | 25 + .../Contents/MacOS/git-annex-shell | 25 + .../Contents/MacOS/git-annex-webapp | 26 + .../osx/git-annex.app/Contents/MacOS/runshell | 71 + .../Contents/Resources/git-annex.icns | Bin 0 -> 77548 bytes standalone/windows/build.sh | 56 + static/activityicon.gif | Bin 0 -> 529 bytes static/css/bootstrap-responsive.css | 815 ++ static/css/bootstrap.css | 4983 +++++++++ static/favicon.ico | Bin 0 -> 405 bytes static/img/glyphicons-halflings-white.png | Bin 0 -> 4352 bytes static/img/glyphicons-halflings.png | Bin 0 -> 4352 bytes static/jquery.full.js | 9404 +++++++++++++++++ static/jquery.ui.core.js | 324 + static/jquery.ui.mouse.js | 169 + static/jquery.ui.sortable.js | 1250 +++ static/jquery.ui.widget.js | 521 + static/js/bootstrap-collapse.js | 138 + static/js/bootstrap-dropdown.js | 92 + static/js/bootstrap-modal.js | 210 + static/longpolling.js | 42 + static/syncicon.gif | Bin 0 -> 847 bytes templates/README | 7 + templates/actionbutton.hamlet | 2 + templates/bootstrap.hamlet | 14 + templates/configurators/addbox.com.hamlet | 24 + templates/configurators/adddrive.hamlet | 31 + .../configurators/adddrive/combine.hamlet | 19 + .../configurators/adddrive/encrypt.hamlet | 25 + .../configurators/adddrive/setupmodal.hamlet | 7 + templates/configurators/addglacier.hamlet | 32 + templates/configurators/addia.hamlet | 32 + templates/configurators/addrepository.hamlet | 19 + .../addrepository/archive.hamlet | 11 + .../configurators/addrepository/cloud.hamlet | 26 + .../configurators/addrepository/misc.hamlet | 33 + templates/configurators/adds3.hamlet | 28 + .../delete/currentrepository.hamlet | 34 + .../configurators/delete/finished.hamlet | 14 + templates/configurators/delete/start.hamlet | 11 + .../configurators/edit/nonannexremote.hamlet | 18 + .../configurators/edit/repository.hamlet | 37 + templates/configurators/enableaws.hamlet | 30 + .../configurators/enabledirectory.hamlet | 10 + templates/configurators/enableia.hamlet | 22 + templates/configurators/enablewebdav.hamlet | 22 + templates/configurators/fsck.cassius | 4 + templates/configurators/fsck.hamlet | 31 + templates/configurators/fsck/form.hamlet | 2 + .../configurators/fsck/formcontent.hamlet | 15 + .../configurators/fsck/preferencesform.hamlet | 6 + templates/configurators/fsck/status.hamlet | 5 + templates/configurators/genkeymodal.hamlet | 12 + templates/configurators/main.hamlet | 38 + templates/configurators/needgcrypt.hamlet | 10 + templates/configurators/needglaciercli.hamlet | 10 + templates/configurators/newrepository.hamlet | 12 + .../newrepository/combine.hamlet | 17 + .../configurators/newrepository/first.hamlet | 19 + .../configurators/newrepository/form.hamlet | 11 + .../configurators/pairing/disabled.hamlet | 5 + .../pairing/local/inprogress.hamlet | 18 + .../configurators/pairing/local/prompt.hamlet | 50 + .../configurators/pairing/xmpp/end.hamlet | 32 + .../pairing/xmpp/friend/confirm.hamlet | 11 + .../pairing/xmpp/friend/prompt.hamlet | 12 + .../pairing/xmpp/self/prompt.hamlet | 20 + .../pairing/xmpp/self/retry.hamlet | 11 + templates/configurators/preferences.hamlet | 13 + templates/configurators/rsync.net/add.hamlet | 40 + .../configurators/rsync.net/encrypt.hamlet | 43 + templates/configurators/ssh/add.hamlet | 23 + templates/configurators/ssh/combine.hamlet | 19 + templates/configurators/ssh/confirm.hamlet | 69 + templates/configurators/ssh/enable.hamlet | 29 + templates/configurators/ssh/error.hamlet | 12 + templates/configurators/ssh/setupmodal.hamlet | 12 + templates/configurators/ssh/testmodal.hamlet | 9 + .../configurators/upgrade/android.hamlet | 9 + templates/configurators/xmpp.hamlet | 34 + templates/configurators/xmpp/buddylist.hamlet | 40 + templates/configurators/xmpp/disabled.hamlet | 5 + .../configurators/xmpp/needcloudrepo.hamlet | 17 + templates/control/log.hamlet | 6 + templates/control/notrunning.hamlet | 10 + templates/control/notrunning.julius | 3 + templates/control/repairrepository.hamlet | 26 + .../control/repairrepository/done.hamlet | 13 + templates/control/repositoryswitcher.hamlet | 14 + templates/control/shutdown.hamlet | 8 + templates/controlmenu.hamlet | 16 + templates/dashboard/main.hamlet | 12 + templates/dashboard/metarefresh.hamlet | 2 + templates/dashboard/transfers.cassius | 2 + templates/dashboard/transfers.hamlet | 45 + templates/documentation/about.hamlet | 33 + templates/documentation/license.hamlet | 2 + templates/documentation/repogroup.hamlet | 60 + templates/error.cassius | 3 + templates/error.hamlet | 26 + templates/notifications/longpolling.julius | 11 + templates/page.cassius | 5 + templates/page.hamlet | 23 + templates/page.julius | 22 + templates/repolist.hamlet | 64 + templates/repolist.julius | 28 + templates/sidebar/alert.hamlet | 26 + templates/sidebar/main.hamlet | 3 + 6383 files changed, 204042 insertions(+) create mode 100644 .ghci create mode 100644 Annex.hs create mode 100644 Annex/Branch.hs create mode 100644 Annex/Branch/Transitions.hs create mode 100644 Annex/BranchState.hs create mode 100644 Annex/CatFile.hs create mode 100644 Annex/CheckAttr.hs create mode 100644 Annex/CheckIgnore.hs create mode 100644 Annex/Content.hs create mode 100644 Annex/Content/Direct.hs create mode 100644 Annex/Direct.hs create mode 100644 Annex/Direct/Fixup.hs create mode 100644 Annex/Environment.hs create mode 100644 Annex/Exception.hs create mode 100644 Annex/FileMatcher.hs create mode 100644 Annex/Hook.hs create mode 100644 Annex/Journal.hs create mode 100644 Annex/Link.hs create mode 100644 Annex/LockPool.hs create mode 100644 Annex/Path.hs create mode 100644 Annex/Perms.hs create mode 100644 Annex/Queue.hs create mode 100644 Annex/Quvi.hs create mode 100644 Annex/ReplaceFile.hs create mode 100644 Annex/Ssh.hs create mode 100644 Annex/TaggedPush.hs create mode 100644 Annex/UUID.hs create mode 100644 Annex/Url.hs create mode 100644 Annex/Version.hs create mode 100644 Annex/Wanted.hs create mode 100644 Assistant.hs create mode 100644 Assistant/Alert.hs create mode 100644 Assistant/Alert/Utility.hs create mode 100644 Assistant/BranchChange.hs create mode 100644 Assistant/Changes.hs create mode 100644 Assistant/Commits.hs create mode 100644 Assistant/Common.hs create mode 100644 Assistant/DaemonStatus.hs create mode 100644 Assistant/DeleteRemote.hs create mode 100644 Assistant/Drop.hs create mode 100644 Assistant/Fsck.hs create mode 100644 Assistant/Gpg.hs create mode 100644 Assistant/Install.hs create mode 100644 Assistant/Install/AutoStart.hs create mode 100644 Assistant/Install/Menu.hs create mode 100644 Assistant/MakeRemote.hs create mode 100644 Assistant/Monad.hs create mode 100644 Assistant/NamedThread.hs create mode 100644 Assistant/NetMessager.hs create mode 100644 Assistant/Pairing.hs create mode 100644 Assistant/Pairing/MakeRemote.hs create mode 100644 Assistant/Pairing/Network.hs create mode 100644 Assistant/Pushes.hs create mode 100644 Assistant/Repair.hs create mode 100644 Assistant/RepoProblem.hs create mode 100644 Assistant/Restart.hs create mode 100644 Assistant/ScanRemotes.hs create mode 100644 Assistant/Ssh.hs create mode 100644 Assistant/Sync.hs create mode 100644 Assistant/Threads/Committer.hs create mode 100644 Assistant/Threads/ConfigMonitor.hs create mode 100644 Assistant/Threads/Cronner.hs create mode 100644 Assistant/Threads/DaemonStatus.hs create mode 100644 Assistant/Threads/Glacier.hs create mode 100644 Assistant/Threads/Merger.hs create mode 100644 Assistant/Threads/MountWatcher.hs create mode 100644 Assistant/Threads/NetWatcher.hs create mode 100644 Assistant/Threads/PairListener.hs create mode 100644 Assistant/Threads/ProblemFixer.hs create mode 100644 Assistant/Threads/Pusher.hs create mode 100644 Assistant/Threads/SanityChecker.hs create mode 100644 Assistant/Threads/TransferPoller.hs create mode 100644 Assistant/Threads/TransferScanner.hs create mode 100644 Assistant/Threads/TransferWatcher.hs create mode 100644 Assistant/Threads/Transferrer.hs create mode 100644 Assistant/Threads/UpgradeWatcher.hs create mode 100644 Assistant/Threads/Upgrader.hs create mode 100644 Assistant/Threads/Watcher.hs create mode 100644 Assistant/Threads/WebApp.hs create mode 100644 Assistant/Threads/XMPPClient.hs create mode 100644 Assistant/Threads/XMPPPusher.hs create mode 100644 Assistant/TransferQueue.hs create mode 100644 Assistant/TransferSlots.hs create mode 100644 Assistant/TransferrerPool.hs create mode 100644 Assistant/Types/Alert.hs create mode 100644 Assistant/Types/BranchChange.hs create mode 100644 Assistant/Types/Buddies.hs create mode 100644 Assistant/Types/Changes.hs create mode 100644 Assistant/Types/Commits.hs create mode 100644 Assistant/Types/DaemonStatus.hs create mode 100644 Assistant/Types/NamedThread.hs create mode 100644 Assistant/Types/NetMessager.hs create mode 100644 Assistant/Types/Pushes.hs create mode 100644 Assistant/Types/RepoProblem.hs create mode 100644 Assistant/Types/ScanRemotes.hs create mode 100644 Assistant/Types/ThreadName.hs create mode 100644 Assistant/Types/ThreadedMonad.hs create mode 100644 Assistant/Types/TransferQueue.hs create mode 100644 Assistant/Types/TransferSlots.hs create mode 100644 Assistant/Types/TransferrerPool.hs create mode 100644 Assistant/Types/UrlRenderer.hs create mode 100644 Assistant/Upgrade.hs create mode 100644 Assistant/WebApp.hs create mode 100644 Assistant/WebApp/Common.hs create mode 100644 Assistant/WebApp/Configurators.hs create mode 100644 Assistant/WebApp/Configurators/AWS.hs create mode 100644 Assistant/WebApp/Configurators/Delete.hs create mode 100644 Assistant/WebApp/Configurators/Edit.hs create mode 100644 Assistant/WebApp/Configurators/Fsck.hs create mode 100644 Assistant/WebApp/Configurators/IA.hs create mode 100644 Assistant/WebApp/Configurators/Local.hs create mode 100644 Assistant/WebApp/Configurators/Pairing.hs create mode 100644 Assistant/WebApp/Configurators/Preferences.hs create mode 100644 Assistant/WebApp/Configurators/Ssh.hs create mode 100644 Assistant/WebApp/Configurators/Upgrade.hs create mode 100644 Assistant/WebApp/Configurators/WebDAV.hs create mode 100644 Assistant/WebApp/Configurators/XMPP.hs create mode 100644 Assistant/WebApp/Control.hs create mode 100644 Assistant/WebApp/DashBoard.hs create mode 100644 Assistant/WebApp/Documentation.hs create mode 100644 Assistant/WebApp/Form.hs create mode 100644 Assistant/WebApp/Gpg.hs create mode 100644 Assistant/WebApp/MakeRemote.hs create mode 100644 Assistant/WebApp/Notifications.hs create mode 100644 Assistant/WebApp/OtherRepos.hs create mode 100644 Assistant/WebApp/Page.hs create mode 100644 Assistant/WebApp/Repair.hs create mode 100644 Assistant/WebApp/RepoId.hs create mode 100644 Assistant/WebApp/RepoList.hs create mode 100644 Assistant/WebApp/SideBar.hs create mode 100644 Assistant/WebApp/Types.hs create mode 100644 Assistant/WebApp/routes create mode 100644 Assistant/XMPP.hs create mode 100644 Assistant/XMPP/Buddies.hs create mode 100644 Assistant/XMPP/Client.hs create mode 100644 Assistant/XMPP/Git.hs create mode 100644 Backend.hs create mode 100644 Backend/Hash.hs create mode 100644 Backend/URL.hs create mode 100644 Backend/Utilities.hs create mode 100644 Backend/WORM.hs create mode 100644 Build/BundledPrograms.hs create mode 100644 Build/Configure.hs create mode 100644 Build/DesktopFile.hs create mode 100644 Build/DistributionUpdate.hs create mode 100644 Build/EvilSplicer.hs create mode 100644 Build/InstallDesktopFile.hs create mode 100644 Build/NullSoftInstaller.hs create mode 100644 Build/OSXMkLibs.hs create mode 100644 Build/Standalone.hs create mode 100644 Build/TestConfig.hs create mode 100644 Build/Version.hs create mode 100755 Build/make-sdist.sh create mode 100755 Build/mdwn2man create mode 100644 BuildFlags.hs create mode 120000 CHANGELOG create mode 120000 COPYRIGHT create mode 100644 Checks.hs create mode 100644 CmdLine.hs create mode 100644 Command.hs create mode 100644 Command/Add.hs create mode 100644 Command/AddUnused.hs create mode 100644 Command/AddUrl.hs create mode 100644 Command/Assistant.hs create mode 100644 Command/Commit.hs create mode 100644 Command/ConfigList.hs create mode 100644 Command/Copy.hs create mode 100644 Command/Dead.hs create mode 100644 Command/Describe.hs create mode 100644 Command/Direct.hs create mode 100644 Command/Drop.hs create mode 100644 Command/DropKey.hs create mode 100644 Command/DropUnused.hs create mode 100644 Command/EnableRemote.hs create mode 100644 Command/Find.hs create mode 100644 Command/Fix.hs create mode 100644 Command/Forget.hs create mode 100644 Command/FromKey.hs create mode 100644 Command/Fsck.hs create mode 100644 Command/FuzzTest.hs create mode 100644 Command/GCryptSetup.hs create mode 100644 Command/Get.hs create mode 100644 Command/Group.hs create mode 100644 Command/Help.hs create mode 100644 Command/Import.hs create mode 100644 Command/ImportFeed.hs create mode 100644 Command/InAnnex.hs create mode 100644 Command/Indirect.hs create mode 100644 Command/Info.hs create mode 100644 Command/Init.hs create mode 100644 Command/InitRemote.hs create mode 100644 Command/List.hs create mode 100644 Command/Lock.hs create mode 100644 Command/Log.hs create mode 100644 Command/Map.hs create mode 100644 Command/Merge.hs create mode 100644 Command/Migrate.hs create mode 100644 Command/Mirror.hs create mode 100644 Command/Move.hs create mode 100644 Command/PreCommit.hs create mode 100644 Command/ReKey.hs create mode 100644 Command/RecvKey.hs create mode 100644 Command/Reinject.hs create mode 100644 Command/Repair.hs create mode 100644 Command/RmUrl.hs create mode 100644 Command/Schedule.hs create mode 100644 Command/Semitrust.hs create mode 100644 Command/SendKey.hs create mode 100644 Command/Status.hs create mode 100644 Command/Sync.hs create mode 100644 Command/Test.hs create mode 100644 Command/TransferInfo.hs create mode 100644 Command/TransferKey.hs create mode 100644 Command/TransferKeys.hs create mode 100644 Command/Trust.hs create mode 100644 Command/Unannex.hs create mode 100644 Command/Ungroup.hs create mode 100644 Command/Uninit.hs create mode 100644 Command/Unlock.hs create mode 100644 Command/Untrust.hs create mode 100644 Command/Unused.hs create mode 100644 Command/Upgrade.hs create mode 100644 Command/Version.hs create mode 100644 Command/Vicfg.hs create mode 100644 Command/Wanted.hs create mode 100644 Command/Watch.hs create mode 100644 Command/WebApp.hs create mode 100644 Command/Whereis.hs create mode 100644 Command/XMPPGit.hs create mode 100644 Common.hs create mode 100644 Common/Annex.hs create mode 100644 Config.hs create mode 100644 Config/Cost.hs create mode 100644 Config/Files.hs create mode 100644 Creds.hs create mode 100644 Crypto.hs create mode 100644 Fields.hs create mode 100644 Git.hs create mode 100644 Git/AutoCorrect.hs create mode 100644 Git/Branch.hs create mode 100644 Git/BuildVersion.hs create mode 100644 Git/CatFile.hs create mode 100644 Git/CheckAttr.hs create mode 100644 Git/CheckIgnore.hs create mode 100644 Git/Command.hs create mode 100644 Git/Config.hs create mode 100644 Git/Construct.hs create mode 100644 Git/CurrentRepo.hs create mode 100644 Git/DiffTree.hs create mode 100644 Git/FileMode.hs create mode 100644 Git/FilePath.hs create mode 100644 Git/Filename.hs create mode 100644 Git/Fsck.hs create mode 100644 Git/GCrypt.hs create mode 100644 Git/HashObject.hs create mode 100644 Git/Hook.hs create mode 100644 Git/Index.hs create mode 100644 Git/LsFiles.hs create mode 100644 Git/LsTree.hs create mode 100644 Git/Merge.hs create mode 100644 Git/Objects.hs create mode 100644 Git/Queue.hs create mode 100644 Git/Ref.hs create mode 100644 Git/RefLog.hs create mode 100644 Git/Remote.hs create mode 100644 Git/Repair.hs create mode 100644 Git/Sha.hs create mode 100644 Git/SharedRepository.hs create mode 100644 Git/Types.hs create mode 100644 Git/UnionMerge.hs create mode 100644 Git/UpdateIndex.hs create mode 100644 Git/Url.hs create mode 100644 Git/Version.hs create mode 100644 GitAnnex.hs create mode 100644 GitAnnex/Options.hs create mode 100644 GitAnnexShell.hs create mode 120000 INSTALL create mode 100644 Init.hs create mode 100644 Limit.hs create mode 100644 Limit/Wanted.hs create mode 100644 Locations.hs create mode 100644 Logs.hs create mode 100644 Logs/FsckResults.hs create mode 100644 Logs/Group.hs create mode 100644 Logs/Location.hs create mode 100644 Logs/PreferredContent.hs create mode 100644 Logs/Presence.hs create mode 100644 Logs/Presence/Pure.hs create mode 100644 Logs/Remote.hs create mode 100644 Logs/Schedule.hs create mode 100644 Logs/Transfer.hs create mode 100644 Logs/Transitions.hs create mode 100644 Logs/Trust.hs create mode 100644 Logs/Trust/Pure.hs create mode 100644 Logs/UUID.hs create mode 100644 Logs/UUIDBased.hs create mode 100644 Logs/Unused.hs create mode 100644 Logs/Web.hs create mode 100644 Makefile create mode 100644 Messages.hs create mode 100644 Messages/JSON.hs create mode 120000 NEWS create mode 100644 Option.hs create mode 100644 README create mode 100644 Remote.hs create mode 100644 Remote/Bup.hs create mode 100644 Remote/Directory.hs create mode 100644 Remote/GCrypt.hs create mode 100644 Remote/Git.hs create mode 100644 Remote/Glacier.hs create mode 100644 Remote/Helper/AWS.hs create mode 100644 Remote/Helper/Chunked.hs create mode 100644 Remote/Helper/Encryptable.hs create mode 100644 Remote/Helper/Git.hs create mode 100644 Remote/Helper/Hooks.hs create mode 100644 Remote/Helper/Messages.hs create mode 100644 Remote/Helper/Special.hs create mode 100644 Remote/Helper/Ssh.hs create mode 100644 Remote/Hook.hs create mode 100644 Remote/List.hs create mode 100644 Remote/Rsync.hs create mode 100644 Remote/S3.hs create mode 100644 Remote/Web.hs create mode 100644 Remote/WebDAV.hs create mode 100644 Seek.hs create mode 100644 Setup.hs create mode 100644 Test.hs create mode 100644 Types.hs create mode 100644 Types/Backend.hs create mode 100644 Types/BranchState.hs create mode 100644 Types/Command.hs create mode 100644 Types/Crypto.hs create mode 100644 Types/Distribution.hs create mode 100644 Types/FileMatcher.hs create mode 100644 Types/GitConfig.hs create mode 100644 Types/Group.hs create mode 100644 Types/Key.hs create mode 100644 Types/KeySource.hs create mode 100644 Types/Limit.hs create mode 100644 Types/Messages.hs create mode 100644 Types/Option.hs create mode 100644 Types/Remote.hs create mode 100644 Types/ScheduledActivity.hs create mode 100644 Types/StandardGroups.hs create mode 100644 Types/TrustLevel.hs create mode 100644 Types/UUID.hs create mode 100644 Upgrade.hs create mode 100644 Upgrade/V0.hs create mode 100644 Upgrade/V1.hs create mode 100644 Upgrade/V2.hs create mode 100644 Upgrade/V4.hs create mode 100644 Usage.hs create mode 100644 Utility/Applicative.hs create mode 100644 Utility/Base64.hs create mode 100644 Utility/Batch.hs create mode 100644 Utility/CoProcess.hs create mode 100644 Utility/CopyFile.hs create mode 100644 Utility/DBus.hs create mode 100644 Utility/Daemon.hs create mode 100644 Utility/Data.hs create mode 100644 Utility/DataUnits.hs create mode 100644 Utility/DirWatcher.hs create mode 100644 Utility/DirWatcher/Types.hs create mode 100644 Utility/Directory.hs create mode 100644 Utility/DiskFree.hs create mode 100644 Utility/Dot.hs create mode 100644 Utility/Env.hs create mode 100644 Utility/Exception.hs create mode 100644 Utility/ExternalSHA.hs create mode 100644 Utility/FSEvents.hs create mode 100644 Utility/FileMode.hs create mode 100644 Utility/FileSystemEncoding.hs create mode 100644 Utility/Format.hs create mode 100644 Utility/FreeDesktop.hs create mode 100644 Utility/Gpg.hs create mode 100644 Utility/Hash.hs create mode 100644 Utility/HumanNumber.hs create mode 100644 Utility/HumanTime.hs create mode 100644 Utility/INotify.hs create mode 100644 Utility/InodeCache.hs create mode 100644 Utility/JSONStream.hs create mode 100644 Utility/Kqueue.hs create mode 100644 Utility/LogFile.hs create mode 100644 Utility/Lsof.hs create mode 100644 Utility/Matcher.hs create mode 100644 Utility/Metered.hs create mode 100644 Utility/Misc.hs create mode 100644 Utility/Monad.hs create mode 100644 Utility/Mounts.hsc create mode 100644 Utility/Network.hs create mode 100644 Utility/NotificationBroadcaster.hs create mode 100644 Utility/OSX.hs create mode 100644 Utility/Parallel.hs create mode 100644 Utility/PartialPrelude.hs create mode 100644 Utility/Path.hs create mode 100644 Utility/Percentage.hs create mode 100644 Utility/Process.hs create mode 100644 Utility/QuickCheck.hs create mode 100644 Utility/Quvi.hs create mode 100644 Utility/Rsync.hs create mode 100644 Utility/SRV.hs create mode 100644 Utility/SafeCommand.hs create mode 100644 Utility/Scheduled.hs create mode 100644 Utility/Shell.hs create mode 100644 Utility/TList.hs create mode 100644 Utility/Tense.hs create mode 100644 Utility/ThreadLock.hs create mode 100644 Utility/ThreadScheduler.hs create mode 100644 Utility/Tmp.hs create mode 100644 Utility/Touch.hsc create mode 100644 Utility/Url.hs create mode 100644 Utility/UserInfo.hs create mode 100644 Utility/Verifiable.hs create mode 100644 Utility/WebApp.hs create mode 100644 Utility/Win32Notify.hs create mode 100644 Utility/Yesod.hs create mode 100644 Utility/libdiskfree.c create mode 100644 Utility/libdiskfree.h create mode 100644 Utility/libkqueue.c create mode 100644 Utility/libkqueue.h create mode 100644 Utility/libmounts.c create mode 100644 Utility/libmounts.h create mode 100644 configure.hs create mode 100644 debian/NEWS create mode 100644 debian/changelog create mode 100644 debian/compat create mode 100644 debian/control create mode 100644 debian/copyright create mode 100644 debian/doc-base create mode 100644 debian/menu create mode 100755 debian/rules create mode 100644 debian/tests/basics create mode 100644 debian/tests/control create mode 100644 doc/Android.mdwn create mode 100644 doc/Android/comment_15_77bafc01b47d4cf8f96bde2b6704ed71._comment create mode 100644 doc/Android/comment_19_dc7b428f525a082834cb87221fc627ff._comment create mode 100644 doc/Android/comment_20_81940ea56ace3dcd5fa84dfccd88ad96._comment create mode 100644 doc/Android/comment_29_37aa87a451d4390ed367402eec740855._comment create mode 100644 doc/Android/comment_5_ba11b81c671d9bcd6f496fbd6f562b0f._comment create mode 100644 doc/Android/oldcomments.mdwn create mode 100644 doc/Android/oldcomments/comment_10_20e3d513b8b97496d76aca4619026cd6._comment create mode 100644 doc/Android/oldcomments/comment_11_c96b8f1cc1583a74eb2483f48357f023._comment create mode 100644 doc/Android/oldcomments/comment_12_6551f5fa081494b079c10a33c9b0d8ad._comment create mode 100644 doc/Android/oldcomments/comment_13_7c633d245651ec08f63194fe1fc194ae._comment create mode 100644 doc/Android/oldcomments/comment_14_60c2403140085f9caf48a33b59a36ab4._comment create mode 100644 doc/Android/oldcomments/comment_16_9af73451be09f03cfff81fdf9481ffc4._comment create mode 100644 doc/Android/oldcomments/comment_17_f76561a654b534df3a807b1c045710b2._comment create mode 100644 doc/Android/oldcomments/comment_18_1b46cdf154ddadfe17e4b6e4054dc619._comment create mode 100644 doc/Android/oldcomments/comment_1_cc9caa5dd22dd67e5c1d22d697096dd2._comment create mode 100644 doc/Android/oldcomments/comment_21_5903f6a4a81a6534fa8cfafb3b6c37bb._comment create mode 100644 doc/Android/oldcomments/comment_22_36afd354f9669a154d7b6b2c4d43ded9._comment create mode 100644 doc/Android/oldcomments/comment_23_de98154792e8611a134429f06d82bcb1._comment create mode 100644 doc/Android/oldcomments/comment_24_7ab509c25243009bfbffd796ec64e77b._comment create mode 100644 doc/Android/oldcomments/comment_25_026d1a01d5753d71ac3dfc002f2a5eec._comment create mode 100644 doc/Android/oldcomments/comment_26_f0a044fb649d43e32c96b08edbc336c3._comment create mode 100644 doc/Android/oldcomments/comment_27_6b9ae35b1ceeba14cd7a74e142870705._comment create mode 100644 doc/Android/oldcomments/comment_28_c91db1215f529aa68bfb0576c3c5eddc._comment create mode 100644 doc/Android/oldcomments/comment_2_c2422b7dd9d526b3616e49f48cf178c2._comment create mode 100644 doc/Android/oldcomments/comment_3_0e4980c27b13dbc28477c02a82898248._comment create mode 100644 doc/Android/oldcomments/comment_4_86f7b5444e2eaea7f8f7b9160f671a1d._comment create mode 100644 doc/Android/oldcomments/comment_5_9d78009435736a178d5a3f5a9bc0ed6a._comment create mode 100644 doc/Android/oldcomments/comment_6_7b9523ddb20dc4a929e556c3ed0c7406._comment create mode 100644 doc/Android/oldcomments/comment_7_a56628a622da752806c42c5b8b54ceef._comment create mode 100644 doc/Android/oldcomments/comment_8_19656ec99b8f6aa64c1d01a3c9ae9bd0._comment create mode 100644 doc/Android/oldcomments/comment_9_55e703ae105d0c0ee9ac50df8cc59dfb._comment create mode 100644 doc/android/DCIM.png create mode 100644 doc/android/appinstalled.png create mode 100644 doc/android/apps.png create mode 100644 doc/android/install.png create mode 100644 doc/android/newwindow.png create mode 100644 doc/android/terminal.png create mode 100644 doc/android/webapp.png create mode 100644 doc/assistant.mdwn create mode 100644 doc/assistant/addsshserver.png create mode 100644 doc/assistant/archival_walkthrough.mdwn create mode 100644 doc/assistant/brokenrepositoryalert.png create mode 100644 doc/assistant/buddylist.png create mode 100644 doc/assistant/cloudnudge.png create mode 100644 doc/assistant/combinerepos.png create mode 100644 doc/assistant/comment_1_f2c4857b7b000e005f0c19279db14eaf._comment create mode 100644 doc/assistant/comment_2_befa1f48e5a43a7965060491430a6bc4._comment create mode 100644 doc/assistant/controlmenu.png create mode 100644 doc/assistant/crashrecovery.png create mode 100644 doc/assistant/dashboard.png create mode 100644 doc/assistant/deleterepository.png create mode 100644 doc/assistant/downloadupgrade.png create mode 100644 doc/assistant/encryptdrive.png create mode 100644 doc/assistant/example.png create mode 100644 doc/assistant/fsckconfig.png create mode 100644 doc/assistant/genkey.png create mode 100644 doc/assistant/iaitem.png create mode 100644 doc/assistant/inotify_max_limit_alert.png create mode 100644 doc/assistant/local_pairing_walkthrough.mdwn create mode 100644 doc/assistant/local_pairing_walkthrough/addrepository.png create mode 100644 doc/assistant/local_pairing_walkthrough/comment_1_b33deed054d3aa8cfa6c9e3958643f16._comment create mode 100644 doc/assistant/local_pairing_walkthrough/comment_2_39f1162b4d43b61e957e7497df4b9e2b._comment create mode 100644 doc/assistant/local_pairing_walkthrough/comment_3_588869692b290483f58f3a7aa2bfb55f._comment create mode 100644 doc/assistant/local_pairing_walkthrough/comment_4_f6bf82c263fefe38701709d9dbd974cc._comment create mode 100644 doc/assistant/local_pairing_walkthrough/comment_5_bada601ea4b7104f162a3e00def4be2b._comment create mode 100644 doc/assistant/local_pairing_walkthrough/comment_6_01ba0f9bfa0ed066c4b73d2d6028eecc._comment create mode 100644 doc/assistant/local_pairing_walkthrough/comment_7_17d44229e4fa46c50815672b96a9735a._comment create mode 100644 doc/assistant/local_pairing_walkthrough/comment_8_b9d4c29cf2cca0427808df6af08fb789._comment create mode 100644 doc/assistant/local_pairing_walkthrough/pairing.png create mode 100644 doc/assistant/local_pairing_walkthrough/pairrequest.png create mode 100644 doc/assistant/local_pairing_walkthrough/secret.png create mode 100644 doc/assistant/local_pairing_walkthrough/secretempty.png create mode 100644 doc/assistant/logs.png create mode 100644 doc/assistant/makerepo.png create mode 100644 doc/assistant/menu.png create mode 100644 doc/assistant/osx-app.png create mode 100644 doc/assistant/preferences.png create mode 100644 doc/assistant/quickstart.mdwn create mode 100644 doc/assistant/release_notes.mdwn create mode 100644 doc/assistant/release_notes/comment_1_bd8f376c9d0c1d5ed07fb013907a60ee._comment create mode 100644 doc/assistant/release_notes/comment_2_75e0774ad042717fbd059a8a9ec2db1e._comment create mode 100644 doc/assistant/release_notes/comment_3_b3bfd8e547e20c51f7c32c6c9424e936._comment create mode 100644 doc/assistant/release_notes/comment_4_c6caa2b521b456bb4ce594d64919cffe._comment create mode 100644 doc/assistant/remote_sharing_walkthrough.mdwn create mode 100644 doc/assistant/remote_sharing_walkthrough/comment_1_e0187b0a926904b363065ab0f850f0b2._comment create mode 100644 doc/assistant/remote_sharing_walkthrough/comment_2_dabcbc9aaf0bdb82716f5a5d55807a21._comment create mode 100644 doc/assistant/remote_sharing_walkthrough/comment_4_978fab3cd165b4ca245e32fc48cf0970._comment create mode 100644 doc/assistant/remote_sharing_walkthrough/comment_4_d7e879f7b098964040df2e27a18eda72._comment create mode 100644 doc/assistant/remote_sharing_walkthrough/comment_5_00852736d47c05772b15c5ff54ae7da7._comment create mode 100644 doc/assistant/repairrepository.png create mode 100644 doc/assistant/repogroups.png create mode 100644 doc/assistant/repoinfo.png create mode 100644 doc/assistant/repositories.png create mode 100644 doc/assistant/rsync.net.encryption.png create mode 100644 doc/assistant/rsync.net.png create mode 100644 doc/assistant/running.png create mode 100644 doc/assistant/share_with_a_friend_walkthrough.mdwn create mode 100644 doc/assistant/share_with_a_friend_walkthrough/buddylist.png create mode 100644 doc/assistant/share_with_a_friend_walkthrough/pairing.png create mode 100644 doc/assistant/share_with_a_friend_walkthrough/repolist.png create mode 100644 doc/assistant/share_with_a_friend_walkthrough/xmppalert.png create mode 100644 doc/assistant/thanks.mdwn create mode 100644 doc/assistant/thumbnail.png create mode 100644 doc/assistant/upgradecomplete.png create mode 100644 doc/assistant/xmpp.png create mode 100644 doc/assistant/xmppnudge.png create mode 100644 doc/assistant/xmpppairingend.png create mode 100644 doc/automatic_conflict_resolution.mdwn create mode 100644 doc/backends.mdwn create mode 100644 doc/backends/comment_1_375bb1fb5973e8fa67b763f2dd6e404b._comment create mode 100644 doc/backends/comment_2_1f2626eca9004b31a0b7fc1a0df8027b._comment create mode 100644 doc/backends/comment_3_fdcbf8727fdefb9942a54689234b9698._comment create mode 100644 doc/backends/comment_4_46591a3ba888fb686b1b319b80ca2c22._comment create mode 100644 doc/backends/comment_5_2210c7ff2d5812fb3b778ac172291656._comment create mode 100644 doc/backends/comment_6_82f239b58680a2681bd8074c7ef9584d._comment create mode 100644 doc/bare_repositories.mdwn create mode 100644 doc/bare_repositories/comment_1_148e1da70d37d311634a0309a4ff8dcd._comment create mode 100644 doc/bugs.mdwn create mode 100644 doc/bugs/127.0.0.1_references_on_remote_assistant_access.mdwn create mode 100644 doc/bugs/3.20121112:_build_error_in_assistant.mdwn create mode 100644 doc/bugs/3.20121112:_build_error_in_assistant/comment_1_b42f40ffd83321ab5cc0ef24ced15e98._comment create mode 100644 doc/bugs/3.20121112:_build_error_in_assistant/comment_2_b1d2aa10ea84c5c370b3e76507fc8761._comment create mode 100644 doc/bugs/3.20121112:_build_error_in_assistant/comment_3_b38e40d36bba95b16afbce68e7f25a80._comment create mode 100644 doc/bugs/3.20121112_build_fails_on_Ubuntu_12.04.mdwn create mode 100644 doc/bugs/3.20121112_build_fails_on_Ubuntu_12.04/comment_1_ce2efd2196e7682f4cdbabdb0616d449._comment create mode 100644 doc/bugs/3.20121112_build_fails_on_Ubuntu_12.04/comment_2_2a6faf662ebb85a8f1c89adcdfb9adb6._comment create mode 100644 doc/bugs/3.20121112_build_fails_on_Ubuntu_12.04/comment_3_37f34baa34068def1adf794d0942e462._comment create mode 100644 doc/bugs/3.20121112_build_fails_on_Ubuntu_12.04/comment_4_2f8a859fef9edc8eb93bf1cc74296702._comment create mode 100644 doc/bugs/3.20121113_build_error___39__not_in_scope_getAddBoxComR__39__.mdwn create mode 100644 doc/bugs/4.20130227_won__39__t_build_on_OS_X_Lion__44___because_testpack_won__39__t_build.mdwn create mode 100644 doc/bugs/4.20130227_won__39__t_build_on_OS_X_Lion__44___because_testpack_won__39__t_build/comment_1_b7140e2bf1ea9c73ecc9e214095968e7._comment create mode 100644 doc/bugs/4.20130227_won__39__t_build_on_OS_X_Lion__44___because_testpack_won__39__t_build/comment_2_6be87b2fb2ed828e7b4bf785729e910e._comment create mode 100644 doc/bugs/4.20130601_xmpp_sync_error.mdwn create mode 100644 doc/bugs/4.20130601_xmpp_sync_error/comment_1_5b50d97e44cbd5b31ff24537ec3f8603._comment create mode 100644 doc/bugs/400_mode_leakage.mdwn create mode 100644 doc/bugs/Add_another_repository_on_USB_drive_causes_sync_loop.mdwn create mode 100644 doc/bugs/Add_another_repository_on_USB_drive_causes_sync_loop/comment_1_81839a6de7450734ee75b51e47a0898e._comment create mode 100644 doc/bugs/Add_another_repository_on_USB_drive_causes_sync_loop/comment_2_907ce31a31df94984c2bd7aaafe5b10b._comment create mode 100644 doc/bugs/Add_another_repository_on_USB_drive_causes_sync_loop/comment_3_d8a86ae0ae5fa1f91e0b40b8b2ba0406._comment create mode 100644 doc/bugs/Add_another_repository_on_USB_drive_causes_sync_loop/comment_4_1f08fd5dd4f5d8723c2b5391cc3b60f9._comment create mode 100644 doc/bugs/Adding_a_repository_as_a___34__remote_server__34___creates_a_bare_repository_next_to_the_existing_one.mdwn create mode 100644 doc/bugs/Adding_a_repository_as_a___34__remote_server__34___creates_a_bare_repository_next_to_the_existing_one/comment_1_cb781d34889d583663e855c4074f8e0e._comment create mode 100644 doc/bugs/Adding_a_repository_as_a___34__remote_server__34___creates_a_bare_repository_next_to_the_existing_one/comment_2_c0c87957d7c7a09664e60571a2ca0e8c._comment create mode 100644 doc/bugs/Adding_box.com_remote_on_Android_fails_for_me.mdwn create mode 100644 doc/bugs/Adding_box.com_remote_on_Android_fails_for_me/comment_1_0303ce880415d7e043533551c2b24694._comment create mode 100644 doc/bugs/Adding_git_ssh_remote_fails.mdwn create mode 100644 doc/bugs/Adding_git_ssh_remote_fails/comment_1_05c0bd9ac7c6f0045217fd72fc1f0a1b._comment create mode 100644 doc/bugs/Adding_git_ssh_remote_fails/comment_2_df05456cafdd89e8ceea830199f42d45._comment create mode 100644 doc/bugs/Adding_second_remote_repository_over_ssh_fails.mdwn create mode 100644 doc/bugs/Adding_second_remote_repository_over_ssh_fails/comment_1_308d5f517bf00c8edc53db438de52355._comment create mode 100644 doc/bugs/Adding_unencrypted_repo_on_drive_in_webapp_gives_internal_server_error__.mdwn create mode 100644 doc/bugs/Addurl_downloads_but_does_not_checkout_files.mdwn create mode 100644 doc/bugs/Allow_syncing_to_a_specific_directory_on_a_USB_remote.mdwn create mode 100644 doc/bugs/Allow_syncing_to_a_specific_directory_on_a_USB_remote/comment_1_13ecedfbb34c3564af3a790b8bf0f591._comment create mode 100644 doc/bugs/Android:_Clocking_on___34__Files__34___in_the_Dashboard_seems_to_do_nothing.mdwn create mode 100644 doc/bugs/Android:_Clocking_on___34__Files__34___in_the_Dashboard_seems_to_do_nothing/comment_1_a9b03d4f4760fea2754a4dc93547f0a3._comment create mode 100644 doc/bugs/Android:_Clocking_on___34__Files__34___in_the_Dashboard_seems_to_do_nothing/comment_2_015e859a16b1ce4c0c7601df0594d555._comment create mode 100644 doc/bugs/Android___34__This_build_of_git-annex_does_not_support_XMPP_pairing__34__.mdwn create mode 100644 doc/bugs/Android___34__This_build_of_git-annex_does_not_support_XMPP_pairing__34__/comment_1_c034bb84e58b2dda1038ba205ec78c56._comment create mode 100644 doc/bugs/Android___34__This_build_of_git-annex_does_not_support_XMPP_pairing__34__/comment_2_99a754f41d59fdd401ba6d169945e7c9._comment create mode 100644 doc/bugs/Android_app_permission_denial_on_startup.mdwn create mode 100644 doc/bugs/Android_app_permission_denial_on_startup/comment_10_dc06737997c8883ef0a12dbecd9ac30f._comment create mode 100644 doc/bugs/Android_app_permission_denial_on_startup/comment_11_b444cd6717658116533745c51481dd3d._comment create mode 100644 doc/bugs/Android_app_permission_denial_on_startup/comment_12_66181f34ed7496d1f6601b39e5ae3c65._comment create mode 100644 doc/bugs/Android_app_permission_denial_on_startup/comment_1_ddf5761bf14de30ac97030ad338601ae._comment create mode 100644 doc/bugs/Android_app_permission_denial_on_startup/comment_2_8b9fafa73ebf5f803c7da9531cfb5b34._comment create mode 100644 doc/bugs/Android_app_permission_denial_on_startup/comment_3_58501bb043b4c5836d7472ffd6baa72c._comment create mode 100644 doc/bugs/Android_app_permission_denial_on_startup/comment_4_d3a04dc7bbc1816cccc8d85c73ffb689._comment create mode 100644 doc/bugs/Android_app_permission_denial_on_startup/comment_5_eeabbc0cc434ed84c36a3f4e03fcef36._comment create mode 100644 doc/bugs/Android_app_permission_denial_on_startup/comment_6_4203b496bee1bdd424466ed63b5d31cf._comment create mode 100644 doc/bugs/Android_app_permission_denial_on_startup/comment_7_74373eb2cc46b76659e3c463d6682d15._comment create mode 100644 doc/bugs/Android_app_permission_denial_on_startup/comment_8_0923d2a09df01d152ec4784c92689c96._comment create mode 100644 doc/bugs/Android_app_permission_denial_on_startup/comment_9_b60928e54a5b620899cf29820b9b8e70._comment create mode 100644 doc/bugs/Android_daily_build_missing_webapp.mdwn create mode 100644 doc/bugs/Annex_thinks_file_exists_afer_being_dropped.mdwn create mode 100644 doc/bugs/Annex_thinks_file_exists_afer_being_dropped/comment_1_1d100441fd1ef529eb854b350fece9ee._comment create mode 100644 doc/bugs/Annex_thinks_file_exists_afer_being_dropped/comment_2_166c459c2b27859cf457e17da685fe75._comment create mode 100644 doc/bugs/Annex_thinks_file_exists_afer_being_dropped/comment_3_9d985b6e7973bfaaf8b4f5349d8c13ee._comment create mode 100644 doc/bugs/Annex_thinks_file_exists_afer_being_dropped/comment_4_3e084cff454b95c7170c0225a53f0c30._comment create mode 100644 doc/bugs/Assistant_does_not_actually_check_newly_annex-added_files_into_git_until_daily_sanity_check.mdwn create mode 100644 doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default.mdwn create mode 100644 doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_1_8577fdaa4d49e6241c4372b159694c9c._comment create mode 100644 doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_2_027521e48283c68b39315bb8213f6e45._comment create mode 100644 doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_3_fd8f6938596aace60b04fb35c4069e37._comment create mode 100644 doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_4_ca908021ab5a2a50fd0d4a7e8d12498f._comment create mode 100644 doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_5_73532556cfc354ad5f37a3f3a048fb32._comment create mode 100644 doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_6_ced397b9e6119a0798a282ee07e885df._comment create mode 100644 doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_7_8acb66850e5db8337cf3f2b2dd236ccc._comment create mode 100644 doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_8_7eb530851ae6fa1a69813725c4e8fcec._comment create mode 100644 doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_9_c7d51a26e1febc3894d02546940d64e5._comment create mode 100644 doc/bugs/Assistant_dropping_files_it_has_just_transferred_elsewhere_again.mdwn create mode 100644 doc/bugs/Assistant_dropping_from_backup_repo.mdwn create mode 100644 doc/bugs/Assistant_dropping_from_backup_repo/comment_1_c13d86fb2541676ee4ca1446b99e0e68._comment create mode 100644 doc/bugs/Assistant_enters_eternal_loop_and_eats_up_all_of_RAM_after_X_restart.mdwn create mode 100644 doc/bugs/Assistant_has_created_155_semitrusted_repositories.mdwn create mode 100644 doc/bugs/Assistant_has_created_155_semitrusted_repositories/comment_1_169b24b34cce3f5c8446c2150beb6827._comment create mode 100644 doc/bugs/Assistant_has_created_155_semitrusted_repositories/comment_2_6acd6f38297772a07d8d5fb999bd2eaa._comment create mode 100644 doc/bugs/Assistant_has_created_155_semitrusted_repositories/comment_3_6a4118e5c5fbe5e84d27094ac72b741b._comment create mode 100644 doc/bugs/Assistant_has_created_155_semitrusted_repositories/comment_4_04daa20d5d7c74bb34ec48e752ed9fe8._comment create mode 100644 doc/bugs/Assistant_has_created_155_semitrusted_repositories/comment_5_11af8ab2587e6eeb671051ba8191995b._comment create mode 100644 doc/bugs/Assistant_has_created_155_semitrusted_repositories/comment_6_26236cdc2bce532017854791bcd727d1._comment create mode 100644 doc/bugs/Assistant_has_created_155_semitrusted_repositories/comment_7_3c532dd5b8a01ecdeda1300b49aba675._comment create mode 100644 doc/bugs/Assistant_has_created_155_semitrusted_repositories/comment_8_119142c5ebc499f0ee0926dbca265308._comment create mode 100644 doc/bugs/Assistant_redirects_to_127.0.0.1_in_some_cases__44___although_used_remotely.mdwn create mode 100644 doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux.mdwn create mode 100644 doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_10_ec4a7388ea7106a953f599b664b37f1d._comment create mode 100644 doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_1_6a60c23850a5e2a7bba355e1317abc69._comment create mode 100644 doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_2_90b6ed232b2917b9fe041532284e1212._comment create mode 100644 doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_3_5a89d79395d96c43d7d8a6fd9dc275f1._comment create mode 100644 doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_4_cdd26c71875428dbe3c100944a443d3f._comment create mode 100644 doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_5_76242f5d6c815acd5bd58213bd8bb0fe._comment create mode 100644 doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_6_10852171c0207ca61ea6df1082107353._comment create mode 100644 doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_7_73e8a5696709f8154e63693ba5e569c3._comment create mode 100644 doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_8_392fc344e5833b0eb665fcd38f956b7a._comment create mode 100644 doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_9_9f0fc19a7fcaf7a5827e59e1495cf8c9._comment create mode 100644 doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor.mdwn create mode 100644 doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_10_0e1db417a5815ea903c1f7ccd07308c4._comment create mode 100644 doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_1_28b0cfcba8902c9c16dbe6c4b07984c4._comment create mode 100644 doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_2_952b3f78da756ff5f89235db94bec67f._comment create mode 100644 doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_3_d86aba42d014c4b4f708dcb5fe86e055._comment create mode 100644 doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_4_9aaf296ef53da317d6dc6728705d5c56._comment create mode 100644 doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_5_0d5f8a05a1505660f7ff1bc4ac6ff271._comment create mode 100644 doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_6_3dfdfd49597c85575cb689adb70d2de6._comment create mode 100644 doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_7_943a446c60ed9d7d4f240ba7f00fe925._comment create mode 100644 doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_8_9563859850fb40b1cc2c20c516c12960._comment create mode 100644 doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_9_cf6221c585ee3dbf039bdaea71842d9b._comment create mode 100644 doc/bugs/Browser_fails_to_launch_on_Android___39__git_annex_webapp__39__.mdwn create mode 100644 doc/bugs/Browser_fails_to_launch_on_Android___39__git_annex_webapp__39__/comment_1_173393b0b3d2d8c622c0d8a2eaace421._comment create mode 100644 doc/bugs/Build-depends_needs___39__hxt__39___added_-_3.20121127.mdwn create mode 100644 doc/bugs/Build_error_on_Linux.mdwn create mode 100644 doc/bugs/Build_error_on_Mac_OSX_10.6.mdwn create mode 100644 doc/bugs/Build_failure_at_commit_1efe4f3.mdwn create mode 100644 doc/bugs/Building_fails:_Could_not_find_module___96__Text.Blaze__39__.mdwn create mode 100644 doc/bugs/Building_fails:_Not_in_scope:___96__myHomeDir__39___.mdwn create mode 100644 doc/bugs/Building_fails:__Could_not_find_module___96__Data.XML.Types__39__.mdwn create mode 100644 doc/bugs/Building_fails:___Not_in_scope:_type_constructor_or_class___96__Html__39__.mdwn create mode 100644 doc/bugs/Building_in_cabal_using_--bindir___126____47__bin_breaks_the_desktop_link.mdwn create mode 100644 doc/bugs/Building_in_cabal_using_--bindir___126____47__bin_breaks_the_desktop_link/comment_1_c0f0a2878070ed86900815c6b6a5fa5e._comment create mode 100644 doc/bugs/Building_in_cabal_using_--bindir___126____47__bin_breaks_the_desktop_link/comment_2_53f2de3d3993821d8502fd08a0fcce12._comment create mode 100644 doc/bugs/Cabal_cannot_solve_dependencies.mdwn create mode 100644 doc/bugs/Cabal_cannot_solve_dependencies/comment_1_1d41ac79867226dcb71f1c7b38da062d._comment create mode 100644 doc/bugs/Cabal_cannot_solve_dependencies/comment_2_50e72633a4462f6f6eb33d57b137fdcc._comment create mode 100644 doc/bugs/Cabal_cannot_solve_dependencies/comment_3_886f2d1f7c47a3973b8dc7d7c412289a._comment create mode 100644 doc/bugs/Cabal_dependency_monadIO_missing.mdwn create mode 100644 doc/bugs/Cabal_dependency_monadIO_missing/comment_1_14be660aa57fadec0d81b32a8b52c66f._comment create mode 100644 doc/bugs/Cabal_dependency_monadIO_missing/comment_2_4f4d8e1e00a2a4f7e8a8ab082e16adac._comment create mode 100644 doc/bugs/Calls_to_rsync_don__39__t_always_use__annex-rsync-options.mdwn create mode 100644 doc/bugs/Can__39__t___34__git-annex_get__34___with_3.20111203.mdwn create mode 100644 doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client.mdwn create mode 100644 doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_1_25eb2d7d0a9cdd1c55df0cec68472723._comment create mode 100644 doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_2_9e9b96e5113a50533251e946c2560d81._comment create mode 100644 doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_3_6b091198ddd6ed709b076df1296aeb77._comment create mode 100644 doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_4_118b588685b535cca4c02eb6ef297c67._comment create mode 100644 doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_5_5cead277493e1c020e16be6f9245fe33._comment create mode 100644 doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_6_0f135f97c2808dce094628dc6608e617._comment create mode 100644 doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_7_1d6f47f9e6cf935f19d68af6d5aa92fa._comment create mode 100644 doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_8_c5758fdb32348b9cd804ff17d27864e1._comment create mode 100644 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 create mode 100644 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_1_7f54e24c8e721d69bdb1e5a4181641b8._comment create mode 100644 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_2_6e91bc254f79ccf80d385ba7d35ffa9c._comment create mode 100644 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_3_4cf34da6050dd96f94ffc3652aa39715._comment create mode 100644 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_4_cafcc24e98a89f10adaed5e09f75b659._comment create mode 100644 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_5_118d61dea9ef0faa2960da6f2f62ec8b._comment create mode 100644 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_6_3978557c6e85608243e5b4eb698ac5a5._comment create mode 100644 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_7_e6dfc41d2042402b40efb6f6139d5662._comment create mode 100644 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_8_33a84937c87dd2406bc090a0d2969683._comment create mode 100644 doc/bugs/Can__39__t_clone_on_Windows_because_some_filenames_have_a_colon_in_them.mdwn create mode 100644 doc/bugs/Can__39__t_clone_on_Windows_because_some_filenames_have_a_colon_in_them/comment_1_5fc1347f4bcc13c9f8dbc5ecd4847fc7._comment create mode 100644 doc/bugs/Can__39__t_clone_on_Windows_because_some_filenames_have_a_colon_in_them/comment_2_38696178e658d1d32deec37dbea66a3d._comment create mode 100644 doc/bugs/Can__39__t_clone_on_Windows_because_some_filenames_have_a_colon_in_them/comment_3_f34d996827f5e7662bec409cbcce961b._comment create mode 100644 doc/bugs/Can__39__t_rename___34__here__34___repository.mdwn create mode 100644 doc/bugs/Can__39__t_set_repositories_directory.mdwn create mode 100644 doc/bugs/Can__39__t_set_repositories_directory/comment_1_beb5d5b66a8d0fab12be44a7d877e9b0._comment create mode 100644 doc/bugs/Can__39__t_set_repositories_directory/comment_2_366aa798a5e55350d32b63b31c19112b._comment create mode 100644 doc/bugs/Can__39__t_set_repositories_directory/comment_3_812554d58ad9274a50b2a33d5f4d2ec3._comment create mode 100644 doc/bugs/Can__39__t_set_repositories_directory/comment_4_bec5f147441ad18c97845b44c90c728b._comment create mode 100644 doc/bugs/Can__39__t_start_on_Cyanogenmod_10.2_nightly.mdwn create mode 100644 doc/bugs/Can__39__t_transfer_files_to_rsync_remote_with_encryption__61__shared.mdwn create mode 100644 doc/bugs/Can__39__t_transfer_files_to_rsync_remote_with_encryption__61__shared/comment_1_ca7ec2041bbec330476fb040b1e66a92._comment create mode 100644 doc/bugs/Can__39__t_transfer_files_to_rsync_remote_with_encryption__61__shared/comment_2_c476847665a5320214721497d8fad15b._comment create mode 100644 doc/bugs/Cannot_build_the_latest_with_GHC_7.6.1.mdwn create mode 100644 doc/bugs/Cannot_build_the_latest_with_GHC_7.6.1/comment_1_b25859c159d62f2e92b92f505535131b._comment create mode 100644 doc/bugs/Cannot_build_the_latest_with_GHC_7.6.1/comment_2_4c9eab9120718457fdc1ae9051e44bca._comment create mode 100644 doc/bugs/Cannot_build_the_latest_with_GHC_7.6.1/comment_3_61aec9801e1f76db4a286536ffacc3ed._comment create mode 100644 doc/bugs/Cannot_build_the_latest_with_GHC_7.6.1/comment_4_6381ff0ea419831d9bbed27511cad1e9._comment create mode 100644 doc/bugs/Cannot_clone_an_annex.mdwn create mode 100644 doc/bugs/Cannot_clone_an_annex/comment_1_b40a2652361a79c6c6eab0fc21be8e46._comment create mode 100644 doc/bugs/Cannot_copy_to_a_git-annex_remote.mdwn create mode 100644 doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_10_258a376cff4c62bc4be919322bb1bd88._comment create mode 100644 doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_10_d9b830a1fdea8760cb7da1d36b3cd34d._comment create mode 100644 doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_1_09d76e5f9480b9a35644a8f08790cd97._comment create mode 100644 doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_2_7b586c705a937d09a1b44bd6af2d4686._comment create mode 100644 doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_3_07dbd8f64982f1921077e23f468122cf._comment create mode 100644 doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_4_926fd494f0b27103a99083cd5d0702d5._comment create mode 100644 doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_5_80444a509cc340f5eb3cd08b193fd389._comment create mode 100644 doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_6_4c6b99cd67b4aa742da5101fb1b379f7._comment create mode 100644 doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_8_f45cdd2b6acc5f458b67539fced0e529._comment create mode 100644 doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_9_5a455dd14fb9d3ff408bb3f81e366c38._comment create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 doc/bugs/Committer_crashed.mdwn create mode 100644 doc/bugs/Compile_needs_more_than_1.5gb_of_memory.mdwn create mode 100644 doc/bugs/Compile_needs_more_than_1.5gb_of_memory/comment_1_0806b5132c55d7a5a17fbdad7e3f2291._comment create mode 100644 doc/bugs/Complete_failure_trying_to_unannex_a_large_annex.mdwn create mode 100644 doc/bugs/Complete_failure_trying_to_unannex_a_large_annex/comment_1_1c202695ab7fe62cdc8770e1fb428d0c._comment create mode 100644 doc/bugs/Conflicting_archive_descriptions.mdwn create mode 100644 doc/bugs/ControlPath_too_long_for_Unix_domain_socket.mdwn create mode 100644 doc/bugs/ControlPath_too_long_for_Unix_domain_socket/comment_1_60f58e205604eebe668b1e05dcfbf9a7._comment create mode 100644 doc/bugs/Corrupted_drive:_Assistant_seems_consider_files_deleted_and_deletes_them_elsewhere_too.mdwn create mode 100644 doc/bugs/Corrupted_drive:_Assistant_seems_consider_files_deleted_and_deletes_them_elsewhere_too/comment_1_80ca50f5305eda71fe32f2b0bc922c34._comment create mode 100644 doc/bugs/Corrupted_drive:_Assistant_seems_consider_files_deleted_and_deletes_them_elsewhere_too/comment_2_e6bc6d1c0eb8c469e9e00b37bbcc9b86._comment create mode 100644 doc/bugs/Corrupted_drive:_Assistant_seems_consider_files_deleted_and_deletes_them_elsewhere_too/comment_5_0d0f6b6b46d0153433fead2bbd1bbe64._comment create mode 100644 doc/bugs/Corrupted_drive:_Assistant_seems_consider_files_deleted_and_deletes_them_elsewhere_too/comment_5_6058a22b733cb02126286af950074ed4._comment create mode 100644 doc/bugs/Corrupted_drive:_Assistant_seems_consider_files_deleted_and_deletes_them_elsewhere_too/comment_6_593a49669e2fadfb91773f8c84fbb031._comment create mode 100644 doc/bugs/Corrupted_drive:_Assistant_seems_consider_files_deleted_and_deletes_them_elsewhere_too/comment_6_5a348c5f327f16e1192ef6bd7f2880bb._comment create mode 100644 doc/bugs/Could_not_find_module_Data.Default.mdwn create mode 100644 doc/bugs/Could_not_read_from_remote_repository.mdwn create mode 100644 doc/bugs/Could_not_read_from_remote_repository/comment_1_da842a9d146bcd5c7773b58364c25597._comment create mode 100644 doc/bugs/Could_not_read_from_remote_repository/comment_2_82746a0cf989d884cd0fd796db092b3c._comment create mode 100644 doc/bugs/Could_not_resolve_dependencies.mdwn create mode 100644 doc/bugs/Crash_trying_to_sync_with_a_repo_over_ssh.mdwn create mode 100644 doc/bugs/Crash_trying_to_sync_with_a_repo_over_ssh/comment_1_9705f295ad8101f3f0ede18e590b56ef._comment create mode 100644 doc/bugs/Crash_trying_to_sync_with_a_repo_over_ssh/comment_2_0d751d81ac618f8d7e3f1dd20c830542._comment create mode 100644 doc/bugs/Crash_when_adding_jabber_account_.mdwn create mode 100644 doc/bugs/Crash_when_adding_jabber_account_/comment_1_2dc61ebcfa8919fb839656999c155c52._comment create mode 100644 doc/bugs/Crash_when_adding_jabber_account_/comment_2_e49af3b8a937d82eda1509b6f67b21d4._comment create mode 100644 doc/bugs/Crash_when_adding_jabber_account_/comment_3_e59f8813bf1a7c4e3c8c120fe82348b9._comment create mode 100644 doc/bugs/Crash_when_adding_jabber_account_/comment_4_716ac138cb69eecd0fb586699b4aeb2a._comment create mode 100644 doc/bugs/Creating_an_S3_repository_with_an_invalid_name_throws_an_exception.mdwn create mode 100644 doc/bugs/Creating_an_encrypted_S3_does_not_check_for_presence_of_GPG.mdwn create mode 100644 doc/bugs/Creating_second_repository_leads_to_wrong_ip___40__using_git-annex_webapp_--listen__41__.mdwn create mode 100644 doc/bugs/DS__95__Store_not_gitignored.mdwn create mode 100644 doc/bugs/DS__95__Store_not_gitignored/comment_1_b93ac0ea3be82c361ceb4352e742ba39._comment create mode 100644 doc/bugs/DS__95__Store_not_gitignored/comment_2_4136e1f4aba7aa7562dafcf6a213e10c._comment create mode 100644 doc/bugs/Deasn__39__t_clean_up_ssh_keys_after_removing_remote_repo.mdwn create mode 100644 doc/bugs/Deasn__39__t_clean_up_ssh_keys_after_removing_remote_repo/comment_1_88fbf70eae48484988dbb433a437c717._comment create mode 100644 doc/bugs/Detection_assumes_that_shell_is_bash.mdwn create mode 100644 doc/bugs/Difficult_to_troubleshoot_XMPP_login_failures.mdwn create mode 100644 doc/bugs/Difficult_to_troubleshoot_XMPP_login_failures/comment_1_4205bccf515169031e4a9ed8e905262c._comment create mode 100644 doc/bugs/Direct_mode_keeps_re-checksuming_duplicated_files.mdwn create mode 100644 doc/bugs/Direct_mode_keeps_re-checksuming_duplicated_files/comment_1_cb10385a4f046bfe676720ded3409379._comment create mode 100644 doc/bugs/Direct_mode_keeps_re-checksuming_duplicated_files/comment_2_4bcf1a897181e40c9c8969d597a844f0._comment create mode 100644 doc/bugs/Direct_mode_keeps_re-checksuming_duplicated_files/comment_3_6a6d22d218f036c9977072973ed99aa8._comment create mode 100644 doc/bugs/Direct_mode_keeps_re-checksuming_duplicated_files/comment_4_eaa7ffb3a1d9ffd6d89de301bd2cd5b2._comment create mode 100644 doc/bugs/Direct_mode_repositories_end_up_with_unstaged_changes.mdwn create mode 100644 doc/bugs/Direct_mode_repositories_end_up_with_unstaged_changes/comment_1_300a2b246182be3079db20a7e3322261._comment create mode 100644 doc/bugs/Direct_mode_repositories_still_use_symlinks_sometimes.mdwn create mode 100644 doc/bugs/Disconcerting_warning_from_git-annex.mdwn create mode 100644 doc/bugs/Disconcerting_warning_from_git-annex/comment_1_58cebd377bfdf247b6c4fee27a3ba461._comment create mode 100644 doc/bugs/Disconcerting_warning_from_git-annex/comment_2_dc7407044d4c739d05248300c58d8ef2._comment create mode 100644 doc/bugs/Discrepancy_between_git_annex_add_and_git_annex_watch.mdwn create mode 100644 doc/bugs/Displayed_copy_speed_is_wrong.mdwn create mode 100644 doc/bugs/Displayed_copy_speed_is_wrong/comment_1_74de3091e8bfd7acd6795e61f39f07c6._comment create mode 100644 doc/bugs/Displayed_copy_speed_is_wrong/comment_2_8b240de1d5ae9229fa2d77d1cc15a552._comment create mode 100644 doc/bugs/During_synchronisation_top-level_folder_suddenly_appear_in_sub-sub-folder.mdwn create mode 100644 doc/bugs/During_synchronisation_top-level_folder_suddenly_appear_in_sub-sub-folder/comment_1_ae4a13ff121d27f78904eee9bf5e716b._comment create mode 100644 doc/bugs/During_synchronisation_top-level_folder_suddenly_appear_in_sub-sub-folder/comment_2_32e360cd7b100ddb9a526e7833fc55e1._comment create mode 100644 doc/bugs/During_synchronisation_top-level_folder_suddenly_appear_in_sub-sub-folder/comment_3_650dc9ede4e16ef668d96840f63dad47._comment create mode 100644 doc/bugs/During_synchronisation_top-level_folder_suddenly_appear_in_sub-sub-folder/comment_4_721cf184fb5a5244ec5c15de3302ebf7._comment create mode 100644 doc/bugs/Enable__47__paus_syncing_to_remote_ssh_server_with_multiple_directories.mdwn create mode 100644 doc/bugs/Enable__47__paus_syncing_to_remote_ssh_server_with_multiple_directories/comment_1_e8affeca873c2ef73255f8f77e0ac16f._comment create mode 100644 doc/bugs/Endless_SSH_password_prompts.mdwn create mode 100644 doc/bugs/Endless_SSH_password_prompts/comment_1_b3a32d7a53c30478f409a47f856282ab._comment create mode 100644 doc/bugs/Endless_SSH_password_prompts/comment_2_0a1fc4b4580d8be4c37064e0a16de99b._comment create mode 100644 doc/bugs/Endless_SSH_password_prompts/comment_3_46210f7745b8c7c237fc8b08309390fe._comment create mode 100644 doc/bugs/Error___39__get__39__ting_files_from_rsync_remote__44___versions_3.20120315_and_3.20120430.mdwn create mode 100644 doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__.mdwn create mode 100644 doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_1_9be1b577fa4d5fe9754845073fdf5d32._comment create mode 100644 doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_2_0da0d68b646f2b38be6ecf7c0fe13743._comment create mode 100644 doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_3_09c56f5574931f2ebe903069f0731160._comment create mode 100644 doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_4_0c127396e682ca6ced43aec7deeb0335._comment create mode 100644 doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_5_6bc3eadefde4750eec67a55de6651b2d._comment create mode 100644 doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_6_263ab9c1483438b1717c8061ac81a2fa._comment create mode 100644 doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_7_eccc10990dff37584f8e60cd481a7140._comment create mode 100644 doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_8_f897d20cbe5e0f3f58ce1a0bacad3d71._comment create mode 100644 doc/bugs/Error_creating_remote_repository_using_ssh_on_OSX.mdwn create mode 100644 doc/bugs/Error_creating_remote_repository_using_ssh_on_OSX/comment_1_559555934d79ae6be383063abcaae22e._comment create mode 100644 doc/bugs/Error_creating_remote_repository_using_ssh_on_OSX/comment_2_a9f4f9db042ab6f6c15d6954651971b2._comment create mode 100644 doc/bugs/Error_creating_remote_repository_using_ssh_on_OSX/comment_3_55a496d0a0be80ba723b17bf9faa3bc0._comment create mode 100644 doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__.mdwn create mode 100644 doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_10_8742f7ac27b5f4ad6261d04a174a691c._comment create mode 100644 doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_11_b8e720340000537de6713c49b7733b2f._comment create mode 100644 doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_1_489fa3a717519cd5d8b4c1a9d143d8c6._comment create mode 100644 doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_2_b0796d3b1913e1b6f7b34d75a591be42._comment create mode 100644 doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_3_d8ca17ccaa5ee48d590736af8e77d88a._comment create mode 100644 doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_4_aa7a690aaf75d21f52051a31d7fce70e._comment create mode 100644 doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_5_dc235dc2d024b7f340721bb578630e00._comment create mode 100644 doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_6_5d1e6ea5b5725c773acc6e288add812c._comment create mode 100644 doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_7_6389b4f03ebc916358bc6674398d70c4._comment create mode 100644 doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_8_bcacc9fb3751042968118ebe33802e27._comment create mode 100644 doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_9_6d4c9f0e133ebd94fc11346df446402e._comment create mode 100644 doc/bugs/Error_when_moving_annexed_file_to_a_.gitignored_location.mdwn create mode 100644 doc/bugs/Error_when_moving_annexed_file_to_a_.gitignored_location/comment_1_b524e70156e8bc1219d5c6741974ad99._comment create mode 100644 doc/bugs/Error_when_moving_annexed_file_to_a_.gitignored_location/comment_2_ff7349c396d1249204d621e71f6a7a52._comment create mode 100644 doc/bugs/Error_when_moving_annexed_file_to_a_.gitignored_location/comment_4_4bc7d4c51faea3fdafc977cb66b7f73a._comment create mode 100644 doc/bugs/Error_while_adding_a_file___34__createSymbolicLink:_already_exists__34__.mdwn create mode 100644 doc/bugs/Every_new_file_gets_symlinked_to_a_git_object.mdwn create mode 100644 doc/bugs/Every_new_file_gets_symlinked_to_a_git_object/comment_1_d4e7ed56b16494a95e6c904c746cc91f._comment create mode 100644 doc/bugs/Every_new_file_gets_symlinked_to_a_git_object/comment_2_656b2a2cc44e9102c86bdd57045549d5._comment create mode 100644 doc/bugs/Failed_to_make_repository___40__calling_nonexistant_shell__41__.mdwn create mode 100644 doc/bugs/Failed_to_make_repository___40__calling_nonexistant_shell__41__/comment_1_fb8a379ed7f4b88bd55245ce5b18042c._comment create mode 100644 doc/bugs/Fails_to_create_remote_repo_if_no_global_email_set.mdwn create mode 100644 doc/bugs/Feature_request:___34__quvi__34___flag.mdwn create mode 100644 doc/bugs/Feature_request:___34__quvi__34___flag/comment_1_908c38024fd252328566034608c2dec3._comment create mode 100644 doc/bugs/Feature_request:___34__quvi__34___flag/comment_2_4b6822fe91aa865f2ac1297a3daa3fca._comment create mode 100644 doc/bugs/Feature_request:___34__quvi__34___flag/comment_3_c72ef77e76b1c99b5e0c78d0742080e7._comment create mode 100644 doc/bugs/Feature_request:___34__quvi__34___flag/comment_4_6092695d6afb1608447afe6f86e6fb83._comment create mode 100644 doc/bugs/Files_disappear_from_locally_paired_annexes_when_edited.mdwn create mode 100644 doc/bugs/Files_disappear_from_locally_paired_annexes_when_edited/comment_1_bdc97db9dc9954331e4c400baf9e5541._comment create mode 100644 doc/bugs/Finding_an_Unused_file.mdwn create mode 100644 doc/bugs/Fix_for_opening_a_browser_on_a_mac___40__or_xdg-open_on_linux__47__bsd__63____41__.mdwn create mode 100644 doc/bugs/Freshly_initialized_repo_has_staged_change___34__deleted:_uuid.log__34__.mdwn create mode 100644 doc/bugs/Freshly_initialized_repo_has_staged_change___34__deleted:_uuid.log__34__/comment_1_6441dd04adc158df22589c81746108a9._comment create mode 100644 doc/bugs/Freshly_initialized_repo_has_staged_change___34__deleted:_uuid.log__34__/comment_2_d1c5d7642284a375f9c455dbf76efa5c._comment create mode 100644 doc/bugs/Freshly_initialized_repo_has_staged_change___34__deleted:_uuid.log__34__/comment_3_4b863da1c8ba73ad54da20f7d2ec6e5c._comment create mode 100644 doc/bugs/Freshly_initialized_repo_has_staged_change___34__deleted:_uuid.log__34__/comment_4_8e0f489305ce30ad578b9f8526e86416._comment create mode 100644 doc/bugs/Freshly_initialized_repo_has_staged_change___34__deleted:_uuid.log__34__/comment_5_c699034c8e02b2354516414d0ab73aab._comment create mode 100644 doc/bugs/Freshly_initialized_repo_has_staged_change___34__deleted:_uuid.log__34__/comment_6_786cb7e643811dfd2496ceeff8f34f44._comment create mode 100644 doc/bugs/GIT_DIR_support_incomplete.mdwn create mode 100644 doc/bugs/GPG_can__39__t_handle_some_files.mdwn create mode 100644 doc/bugs/GPG_can__39__t_handle_some_files/comment_1_4388c971e991dbc0326e69c49994df1e._comment create mode 100644 doc/bugs/GPG_passphrase_repeated_prompt.mdwn create mode 100644 doc/bugs/GPG_passphrase_repeated_prompt/comment_1_6ef1c9725befc84ad57bce196ef630ef._comment create mode 100644 doc/bugs/GPG_problem_on_Mac.mdwn create mode 100644 doc/bugs/GPG_problem_on_Mac/comment_1_9ccfa12e7a9569a7ae9a3b819917c275._comment create mode 100644 doc/bugs/GPG_problem_on_Mac/comment_2_a5e07131e2bc1a646c8439fc2506128b._comment create mode 100644 doc/bugs/GPG_problem_on_Mac/comment_3_388238360f2423f84881e904443efb86._comment create mode 100644 doc/bugs/Git_annex_add_fails_on_read-only_files.mdwn create mode 100644 doc/bugs/Git_annex_add_fails_on_read-only_files/comment_1_d31018e8bf31d729ee9fee43a0a07934._comment create mode 100644 doc/bugs/Git_annex_add_fails_on_read-only_files/comment_2_e38e7048749f890169cd0be602be6ee7._comment create mode 100644 doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android.mdwn create mode 100644 doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android/comment_1_2fc435d1c741f9fc422401f682e7c8b7._comment create mode 100644 doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android/comment_2_b73fb99a75aef912f8286626c5bde66d._comment create mode 100644 doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android/comment_3_b7115f2c658439ff59a029f500697fc1._comment create mode 100644 doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android/comment_4_67de7a56ddb06fc0e31cc011d281c633._comment create mode 100644 doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android/comment_5_58fdb2a00f1737746cdbc804f831a0e7._comment create mode 100644 doc/bugs/Git_annexed_files_symlink_are_wrong_when_submodule_is_not_in_the_same_path.mdwn create mode 100644 doc/bugs/Git_annexed_files_symlink_are_wrong_when_submodule_is_not_in_the_same_path/comment_1_b3197993dbdfaf2db5e4651ac54a896e._comment create mode 100644 doc/bugs/Git_annexed_files_symlink_are_wrong_when_submodule_is_not_in_the_same_path/comment_2_1fbbd02e61ef524597dafd69460b00b4._comment create mode 100644 doc/bugs/Glacier_remote_uploads_duplicates.mdwn create mode 100644 doc/bugs/Glacier_remote_uploads_duplicates/comment_1_8aef582a0f0d0c7f764b425fc45de3b4._comment create mode 100644 doc/bugs/Glacier_remote_uploads_duplicates/comment_2_150ce8b7c4424a83c4b1760da5a89d27._comment create mode 100644 doc/bugs/Glacier_remote_uploads_duplicates/comment_3_718af5048c5f894eee134547a2e0a644._comment create mode 100644 doc/bugs/Glacier_remote_uploads_duplicates/comment_4_184ad0f8c2847309632f8c18b918cd42._comment create mode 100644 doc/bugs/Glacier_remote_uploads_duplicates/comment_5_6980a912d3582c2f2511e4827e9e76b3._comment create mode 100644 doc/bugs/Glacier_remote_uploads_duplicates/comment_6_feea067d6856af2840604782b29af86a._comment create mode 100644 doc/bugs/Glacier_remote_uploads_duplicates/comment_7_e96187bad3dae2f5f95118f6df87a1ec._comment create mode 100644 doc/bugs/Glacier_remote_uploads_duplicates/comment_8_34216b514a6fca788cfacb8579ce5311._comment create mode 100644 doc/bugs/Handling_of_files_inside_and_outside_archive_directory_at_the_same_time.mdwn create mode 100644 doc/bugs/Handling_of_files_inside_and_outside_archive_directory_at_the_same_time/comment_1_e8bb3d6a2318402b985caed08282d473._comment create mode 100644 doc/bugs/Handling_of_files_inside_and_outside_archive_directory_at_the_same_time/comment_2_ead9fa75a12ef36be9a92637b144e74f._comment create mode 100644 doc/bugs/Hanging_on_install_on_Mountain_lion.mdwn create mode 100644 doc/bugs/Hanging_on_install_on_Mountain_lion/comment_10_f57ff027b19ca16e2ecf1fc6aee9ef4a._comment create mode 100644 doc/bugs/Hanging_on_install_on_Mountain_lion/comment_11_2ff78d2090d0fd3418ab50b27c6028ce._comment create mode 100644 doc/bugs/Hanging_on_install_on_Mountain_lion/comment_1_523d3c0c71f80536850a001b90fd0e9e._comment create mode 100644 doc/bugs/Hanging_on_install_on_Mountain_lion/comment_2_6c360c64093b016c2150206dc3ad1709._comment create mode 100644 doc/bugs/Hanging_on_install_on_Mountain_lion/comment_3_7b77fd9b7dc236c345f2f6149c8138ee._comment create mode 100644 doc/bugs/Hanging_on_install_on_Mountain_lion/comment_5_08289596445d7588e43d35490fbfe5f4._comment create mode 100644 doc/bugs/Hanging_on_install_on_Mountain_lion/comment_5_2a336fe7b8aed07cbdaa868bd34078f9._comment create mode 100644 doc/bugs/Hanging_on_install_on_Mountain_lion/comment_6_ea7a40c3b6748738421aed00a6f7ca10._comment create mode 100644 doc/bugs/Hanging_on_install_on_Mountain_lion/comment_7_00962da9288976f8a48d0cbc08e1d9e2._comment create mode 100644 doc/bugs/Hanging_on_install_on_Mountain_lion/comment_8_5d53d23e529f33f6e7deb10643831613._comment create mode 100644 doc/bugs/Hanging_on_install_on_Mountain_lion/comment_9_f00c8761e3184975b6645c0c3e241365._comment create mode 100644 doc/bugs/Hangs_on_creating_repository_when_using_--listen.mdwn create mode 100644 doc/bugs/Hangs_on_creating_repository_when_using_--listen/comment_1_8cbe786de8cf8b407418149b9c811aab._comment create mode 100644 doc/bugs/Hangs_on_creating_repository_when_using_--listen/comment_2_dc128eeddeaaf3f84e71aca0fb7d341f._comment create mode 100644 doc/bugs/Hard_links_not_synced_in_direct_mode.mdwn create mode 100644 doc/bugs/Hard_links_not_synced_in_direct_mode/comment_1_aaa781664ae0c62c4f6530cb075ed367._comment create mode 100644 doc/bugs/Hard_links_not_synced_in_direct_mode/comment_2_213aa10909d1fd0f20ed078a7ed93e79._comment create mode 100644 doc/bugs/Hard_links_not_synced_in_direct_mode/comment_3_e6b783d9aaae20c0d35e9888d878716a._comment create mode 100644 doc/bugs/Hard_links_not_synced_in_direct_mode/comment_4_b008ae7b1cf8685d92c9a87a7609de1e._comment create mode 100644 doc/bugs/Hard_links_not_synced_in_direct_mode/comment_5_949c891209713a2c0a5e66af11ed4c79._comment create mode 100644 doc/bugs/How_can_I_solve_a_non-fast-forward_push_without_using_the_assistant__63__.mdwn create mode 100644 doc/bugs/How_can_I_solve_a_non-fast-forward_push_without_using_the_assistant__63__/comment_1_0ddcbe0ccecdec1012964dfa436a3eee._comment create mode 100644 doc/bugs/How_can_I_solve_a_non-fast-forward_push_without_using_the_assistant__63__/comment_2_5765b849bcf045ead9f007bd50b2cfbd._comment create mode 100644 doc/bugs/Huge_annex_out_of_memory_on_switch_to_indirect_mode_and_status.mdwn create mode 100644 doc/bugs/Huge_annex_out_of_memory_on_switch_to_indirect_mode_and_status/comment_1_94c678e1348280a96f11d7456c240d3a._comment create mode 100644 doc/bugs/Huge_annex_out_of_memory_on_switch_to_indirect_mode_and_status/comment_2_09450d58df2373174a1f0d90b08e9eb3._comment create mode 100644 doc/bugs/Huge_annex_out_of_memory_on_switch_to_indirect_mode_and_status/comment_3_a07105226ef3488b97731db004651976._comment create mode 100644 doc/bugs/Impossible_to_enable_an_existing_gcrypt_repo_in_the_webapp.mdwn create mode 100644 doc/bugs/Impossible_to_enable_an_existing_gcrypt_repo_in_the_webapp/comment_1_17814787e333d15da3ab4e57c7d31d4b._comment create mode 100644 doc/bugs/Incorrect_merge__44___direct_repos___40__2__41__.mdwn create mode 100644 doc/bugs/Incorrect_merge__44___direct_repos___40__2__41__/comment_1_15c354c4841d364e78882d2b46a0a764._comment create mode 100644 doc/bugs/Incorrect_merge__44___direct_repos___40__2__41__/comment_2_8bc496226a977dbeeb1ce3f06122f1c2._comment create mode 100644 doc/bugs/Incorrect_merge___40__a_special_case__41__.mdwn create mode 100644 doc/bugs/Incorrect_merge___40__a_special_case__41__/comment_1_c80418d76b501c688e3a9fb4831520fd._comment create mode 100644 doc/bugs/Incorrect_merge___40__a_special_case__41__/comment_2_8b2a188696f46819f6e3f0e9660362d2._comment create mode 100644 doc/bugs/Incorrect_merge___40__a_special_case__41__/comment_3_8cdbb1fda506b9e53a0e9ab88b2569c1._comment create mode 100644 doc/bugs/Incorrect_merge___40__a_special_case__41__/comment_4_9d74e2854a5d77f0f793f56fa0cff9e2._comment create mode 100644 doc/bugs/Incorrect_version_of_Git_Annex___40__1.0.52__41___as_seen_by_Android.mdwn create mode 100644 doc/bugs/Incorrect_version_on_64_Standalone_Build.mdwn create mode 100644 doc/bugs/Incorrect_version_on_64_Standalone_Build/comment_1_1964e4cad33a9f98b2eedbf095e899ff._comment create mode 100644 doc/bugs/Install_of_git-annex-3.20121112_fails.mdwn create mode 100644 doc/bugs/Install_of_git-annex-3.20121112_fails/comment_1_80fc80151d4390bd8a4332f30723962e._comment create mode 100644 doc/bugs/Install_of_git-annex-3.20121112_fails/comment_2_2613320a41a74dc757a3277c8c328bd0._comment create mode 100644 doc/bugs/Install_of_git-annex-3.20121112_fails/comment_3_c364764d0c56e8dc3cac276905d99841._comment create mode 100644 doc/bugs/Install_of_git-annex-3.20121112_fails/comment_4_f1057340dfa978071d3bbc9e2af1e612._comment create mode 100644 doc/bugs/Install_of_git-annex-3.20121112_fails/comment_5_9007b1a3abd647945604968db19cb841._comment create mode 100644 doc/bugs/Install_of_git-annex-3.20121112_fails/comment_6_0bb3ac5375f29ce9d3d0be93879267e3._comment create mode 100644 doc/bugs/Install_of_git-annex-3.20121112_fails/comment_7_ae4443b8cd069080d1f77fca16aa8b04._comment create mode 100644 doc/bugs/Internal_Server_Error:_Unknown_UUID.mdwn create mode 100644 doc/bugs/Internal_Server_Error:_Unknown_UUID/comment_1_f42f703a5d267557abf5e932f0890d4a._comment create mode 100644 doc/bugs/Internal_Server_Error:_Unknown_UUID/comment_2_eb1999f99c5babf3fcb1ff5d72ea6db6._comment create mode 100644 doc/bugs/Internal_Server_Error:_Unknown_UUID/comment_3_bda72b0d615843d18d6ef21f833432a8._comment create mode 100644 doc/bugs/Internal_Server_Error:_Unknown_UUID/comment_4_651440cda405ad40a04479f5d87d581e._comment create mode 100644 doc/bugs/Internal_Server_Error:_Unknown_UUID/comment_5_21fa189b631c246ac5df16a49c3c0178._comment create mode 100644 doc/bugs/Internal_Server_Error:_Unknown_UUID/comment_6_1f712693d2ded5abceb869fdb7f47ef3._comment create mode 100644 doc/bugs/Internal_Server_Error:_Unknown_UUID/comment_7_7a5ead0ce5c9429d4723ccce4f6a6d6c._comment create mode 100644 doc/bugs/Internal_Server_Error:_Unknown_UUID/comment_8_a4683fd73ae452a9cd7f61d9930f6266._comment create mode 100644 doc/bugs/Internal_Server_Error:_Unknown_UUID/comment_9_ced3516c3e7161e4d7e599232f62a511._comment create mode 100644 doc/bugs/Internal_Server_Error_unknown_UUID__59___cannot_modify.mdwn create mode 100644 doc/bugs/Internal_Server_Error_when_adding_an_uncrypted_box.com_repo_after_deleted_an_encrypted_one..mdwn create mode 100644 doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X.mdwn create mode 100644 doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X/comment_1_b2ef077d87a9da624f20649c21401b5b._comment create mode 100644 doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X/comment_2_ef849e25b0264808bff800d9d3836119._comment create mode 100644 doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X/comment_3_ae3cbd0eb69cbeb9b349e0060d056d43._comment create mode 100644 doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X/comment_4_0ff2897805928b14829b7b369a3aed91._comment create mode 100644 doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X/comment_5_414a45573aeb5201f4d80433955669d5._comment create mode 100644 doc/bugs/Interrupted_switch_to_direct_mode_can_cause_all_following_switches_to_fail.mdwn create mode 100644 doc/bugs/Is_there_any_way_to_rate_limit_uploads_to_an_S3_backend__63__.mdwn create mode 100644 doc/bugs/Is_there_any_way_to_rate_limit_uploads_to_an_S3_backend__63__/comment_1_ef97e735ce308f7bcc03f5d9fda588bf._comment create mode 100644 doc/bugs/Is_there_any_way_to_rate_limit_uploads_to_an_S3_backend__63__/comment_2_539b89de8743e435386b86119d1e982f._comment create mode 100644 doc/bugs/Issue_on_OSX_with_some_system_limits.mdwn create mode 100644 doc/bugs/Issue_on_OSX_with_some_system_limits/comment_1_5fc1eedb5231edc37c87a2d9b91313b9._comment create mode 100644 doc/bugs/Issue_on_OSX_with_some_system_limits/comment_2_b14e697c211843163285aaa8de5bf4c6._comment create mode 100644 doc/bugs/Issue_on_OSX_with_some_system_limits/comment_3_18ddf8b5934dd6fb1676cd6adc7d103b._comment create mode 100644 doc/bugs/Issue_on_OSX_with_some_system_limits/comment_4_c25a8eb369e546f65e1a72d89f43066f._comment create mode 100644 doc/bugs/Issue_on_OSX_with_some_system_limits/comment_5_6407a3e7aa0316cba2994bfef0e3c633._comment create mode 100644 doc/bugs/Issue_on_OSX_with_some_system_limits/comment_6_f01887695e8b8386e125464c6d401565._comment create mode 100644 doc/bugs/Issue_on_OSX_with_some_system_limits/comment_7_c7776d5b2d073e0d2ae36515185c25aa._comment create mode 100644 doc/bugs/It_is_very_easy_to_turn_git-annex_into_a_zombie.mdwn create mode 100644 doc/bugs/It_is_very_easy_to_turn_git-annex_into_a_zombie/comment_1_d5fba6c061fb21795021ea83070dbfa2._comment create mode 100644 doc/bugs/It_is_very_easy_to_turn_git-annex_into_a_zombie/comment_2_12cba707239018989e8d5b6f456fa754._comment create mode 100644 doc/bugs/JSON_output_broken_with___34__git_annex_sync__34__.mdwn create mode 100644 doc/bugs/JSON_output_broken_with___34__git_annex_sync__34__/comment_1_380a49b3c132f9f529729a1cb5a69621._comment create mode 100644 doc/bugs/JSON_output_broken_with___34__git_annex_sync__34__/comment_2_282f5f89fb4a46e1fad0980e0b2994a0._comment create mode 100644 doc/bugs/JSON_output_broken_with___34__git_annex_sync__34__/comment_3_7ff98958146b7f6396226bdd878ec86e._comment create mode 100644 doc/bugs/JSON_output_broken_with___34__git_annex_sync__34__/comment_4_f9e460a09e7e5f53c16c20ded2649201._comment create mode 100644 doc/bugs/Killing_the_assistant_daemon_leaves_ssh_mux_sessions_behind.mdwn create mode 100644 doc/bugs/Killing_the_assistant_daemon_leaves_ssh_mux_sessions_behind/comment_1_17879b98a5e79ace03b543064751e46e._comment create mode 100644 doc/bugs/Killing_the_assistant_daemon_leaves_ssh_mux_sessions_behind/comment_2_2dc877e281750004b16619ea7b931160._comment create mode 100644 doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss.mdwn create mode 100644 doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_10_52364dc5b1b43b51748453d1896e35c6._comment create mode 100644 doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_11_99b4db1841f8630a9c5efd08910e87a3._comment create mode 100644 doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_1_fbb410a54bb0bd82d0953ef58a88600e._comment create mode 100644 doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_2_8007c9ba42a951a4426255ec3c37d961._comment create mode 100644 doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_3_73ecd4cb8ee58a8dfe7cab0e893dbe5b._comment create mode 100644 doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_4_e8a10886a564f35414c30a04335d9d32._comment create mode 100644 doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_5_6a318edfe45c80343d017dc7b4837acb._comment create mode 100644 doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_6_f7a1d9f9d40aff531d873a95d2196edd._comment create mode 100644 doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_7_1724ffdf986301bf37ef7a6d16b6ea8a._comment create mode 100644 doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_8_5470e2f50e6506139ecb1b342371c509._comment create mode 100644 doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_9_e53148a9efa061a825f668a9492182f7._comment create mode 100644 doc/bugs/Last_two_versions_didn__39__t_show_up_on_hackage.mdwn create mode 100644 doc/bugs/Last_two_versions_didn__39__t_show_up_on_hackage/comment_1_74b56dea2100450e322e726bb55bb310._comment create mode 100644 doc/bugs/Linux_stand_alone_build_20130723_breaks_support_for_glibc_2.13_debian_stable.txt create mode 100644 doc/bugs/Linux_stand_alone_build_20130723_breaks_support_for_glibc_2.13_debian_stable/comment_1_dc7f726a0b60f64392cbbd1b4317bab5._comment create mode 100644 doc/bugs/Linux_stand_alone_build_20130723_breaks_support_for_glibc_2.13_debian_stable/comment_2_4a0198d714bd3b52ba9baa68dc45f535._comment create mode 100644 doc/bugs/Local_files_not_found.mdwn create mode 100644 doc/bugs/Local_files_not_found/comment_1_5e1fcc0597594fa493ffa28aa32e1df8._comment create mode 100644 doc/bugs/Local_network___40__ssh__41___fails_to_pair__47__sync.mdwn create mode 100644 doc/bugs/Local_network___40__ssh__41___fails_to_pair__47__sync/comment_1_bab9cd5bdcffec3c48b9e8657cd9bbf7._comment create mode 100644 doc/bugs/Local_network___40__ssh__41___fails_to_pair__47__sync/comment_2_104898dce3c67c082a9f2b36e2f45ff8._comment create mode 100644 doc/bugs/Local_pairing_fails:_PairListener_crashed.mdwn create mode 100644 doc/bugs/Local_pairing_fails:_PairListener_crashed/comment_1_d9c5d2147cf6d8d8477eb13b72081d46._comment create mode 100644 doc/bugs/Local_pairing_fails:_PairListener_crashed/comment_2_60a21105145ac228f486bc4beb2ea54d._comment create mode 100644 doc/bugs/Local_pairing_fails:_received_PairMsg_loop.mdwn create mode 100644 doc/bugs/Local_pairing_fails:_received_PairMsg_loop/comment_1_b8c485bafd98be8c21595597af361255._comment create mode 100644 doc/bugs/Local_pairing_fails:_received_PairMsg_loop/comment_2_bc63489334f44a423645021415ffe196._comment create mode 100644 doc/bugs/Local_pairing_fails:_received_PairMsg_loop/comment_3_6345b174d04b6613c2c55a6ec9e50c21._comment create mode 100644 doc/bugs/Local_pairing_fails:_received_PairMsg_loop/comment_4_f39ec6c3d5a016b3c5260162c0b42177._comment create mode 100644 doc/bugs/Local_pairing_fails:_received_PairMsg_loop/comment_5_ca0c5ef6e6a6d2c4b64430ac68370b6a._comment create mode 100644 doc/bugs/Lost_S3_Remote.mdwn create mode 100644 doc/bugs/Lost_S3_Remote/comment_1_6e80e6db6671581d471fc9a54181c04c._comment create mode 100644 doc/bugs/Lost_S3_Remote/comment_2_c99c65882a3924f4890e500f9492b442._comment create mode 100644 doc/bugs/Lost_S3_Remote/comment_3_1e434d5a20a692cd9dc7f6f8f20f30dd._comment create mode 100644 doc/bugs/Mac_OS_10.9_GPG_erro_when_creating_USB_repo___40__solved__41__.mdwn create mode 100644 doc/bugs/Mac_OS_10.9_GPG_erro_when_creating_USB_repo___40__solved__41__/comment_1_0b4dcedc58e5071733e1239490aed2ea._comment create mode 100644 doc/bugs/Mac_OS_10.9_GPG_erro_when_creating_USB_repo___40__solved__41__/comment_2_1cb1ef0292a3357874b461a77c13373e._comment create mode 100644 doc/bugs/Mac_OS_10.9_GPG_erro_when_creating_USB_repo___40__solved__41__/comment_3_e5ec1e3ab304d738e3b0847287a47af4._comment create mode 100644 doc/bugs/Mac_OS_10.9_GPG_error_adding_S3_repo___40__solved__41__.mdwn create mode 100644 doc/bugs/Mac_OS_10.9_GPG_error_adding_S3_repo___40__solved__41__/comment_1_d95accb43bd18cc9acbbf1d4069f86b3._comment create mode 100644 doc/bugs/Mac_OS_10.9_GPG_error_adding_S3_repo___40__solved__41__/comment_2_452a3c524974832f0742efb00df4d576._comment create mode 100644 doc/bugs/Mac_OS_10.9_GPG_error_adding_S3_repo___40__solved__41__/comment_3_f8f6d1e0065e5ba56cd405b1c021ca09._comment create mode 100644 doc/bugs/Mac_OS_10.9_GPG_error_adding_S3_repo___40__solved__41__/comment_4_b524649cee751532d20a4894d71c5cf3._comment create mode 100644 doc/bugs/Mac_OS_10.9_GPG_error_adding_S3_repo___40__solved__41__/comment_5_8312ba868ef616ec00563446c9c3464f._comment create mode 100644 doc/bugs/Mac_OS_10.9_GPG_error_adding_S3_repo___40__solved__41__/comment_6_1af75c691d27c97397f1901f7c2483b0._comment create mode 100644 doc/bugs/Mac_OS_10.9_GPG_error_adding_S3_repo___40__solved__41__/comment_7_e519df252875de87c4ef5b727f033bdf._comment create mode 100644 doc/bugs/Mac_OS_10.9_GPG_error_adding_S3_repo___40__solved__41__/comment_8_4bb959e2659991cd392853e8beacf708._comment create mode 100644 doc/bugs/Makefile_is_missing_dependancies.mdwn create mode 100644 doc/bugs/Makefile_is_missing_dependancies/comment_1_5a3da5f79c8563c7a450aa29728abe7c._comment create mode 100644 doc/bugs/Makefile_is_missing_dependancies/comment_2_416f12dbd0c2b841fac8164645b81df5._comment create mode 100644 doc/bugs/Makefile_is_missing_dependancies/comment_3_c38b6f4abc9b9ad413c3b83ca04386c3._comment create mode 100644 doc/bugs/Makefile_is_missing_dependancies/comment_4_cc13873175edf191047282700315beee._comment create mode 100644 doc/bugs/Makefile_is_missing_dependancies/comment_5_0a1c52e2c96d19b9c3eb7e99b8c2434f._comment create mode 100644 doc/bugs/Makefile_is_missing_dependancies/comment_6_24119fc5d5963ce9dd669f7dcf006859._comment create mode 100644 doc/bugs/Makefile_is_missing_dependancies/comment_7_96fd4725df4b54e670077a18d3ac4943._comment create mode 100644 doc/bugs/Makefile_is_missing_dependancies/comment_8_a3555e3286cdc2bfeb9cde0ff727ba74._comment create mode 100644 doc/bugs/Manual_content_mode_isn__39__t_manual.mdwn create mode 100644 doc/bugs/Manual_mode_weirdness.mdwn create mode 100644 doc/bugs/Manual_mode_weirdness/comment_1_f8ab3bac9e9a6768e5fd5a052f0d920f._comment create mode 100644 doc/bugs/Manual_mode_weirdness/comment_2_e810daa488fad32ca8bdaae620051da8._comment create mode 100644 doc/bugs/Missing_dependancy_in_commit_6cecc26206c4a539999b04664136c6f785211a41.mdwn create mode 100644 doc/bugs/Missing_repo_uuid_after_local_pairing_with_older_annex.mdwn create mode 100644 doc/bugs/Missing_repo_uuid_after_local_pairing_with_older_annex/comment_1_8229df64a872bee7590f75eb78f78c4a._comment create mode 100644 doc/bugs/Missing_repo_uuid_after_local_pairing_with_older_annex/comment_2_f37be896396915b1c85cff8811dceb4a._comment create mode 100644 doc/bugs/Missing_repo_uuid_after_local_pairing_with_older_annex/comment_3_df7fc1078059538a76f384a40541e91f._comment create mode 100644 doc/bugs/Missing_repo_uuid_after_local_pairing_with_older_annex/comment_4_70c444c61f41df2f59294c10f94f0c09._comment create mode 100644 doc/bugs/More_sync__39__ing_weirdness_with_the_assistant_branch_on_OSX.mdwn create mode 100644 doc/bugs/More_sync__39__ing_weirdness_with_the_assistant_branch_on_OSX/comment_1_377525e70640751e1ead445aeed15efa._comment create mode 100644 doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana.mdwn create mode 100644 doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana/comment_1_f3c336ecfee51e074ea3a9fc95301de5._comment create mode 100644 doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana/comment_2_102c0e998934e84deca92fd1c90145fa._comment create mode 100644 doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana/comment_3_1449dd796ce9f2209f085d4b017a5f33._comment create mode 100644 doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana/comment_4_c4aa8a4379b2c056ca9b7afcff412bbc._comment create mode 100644 doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana/comment_5_6ca4dd2ad51182edf7198f38b336b9b6._comment create mode 100644 doc/bugs/Name_scheme_does_not_follow_git__39__s_rules.mdwn create mode 100644 doc/bugs/Need_to_manually_install_c2hs_-_3.20121127_and_previous.mdwn create mode 100644 doc/bugs/No_easy_way_to_re-inject_a_file_into_an_annex.mdwn create mode 100644 doc/bugs/No_easy_way_to_re-inject_a_file_into_an_annex/comment_1_c871605e187f539f3bfe7478433e7fb5._comment create mode 100644 doc/bugs/No_easy_way_to_re-inject_a_file_into_an_annex/comment_2_e6f1e9eee8b8dfb60ca10c8cfd807ac9._comment create mode 100644 doc/bugs/No_easy_way_to_re-inject_a_file_into_an_annex/comment_3_be62be5fe819acc0cb8b878802decd46._comment create mode 100644 doc/bugs/No_easy_way_to_re-inject_a_file_into_an_annex/comment_4_480a4f72445a636eab1b1c0f816d365c._comment create mode 100644 doc/bugs/No_progress_bars_with_S3.mdwn create mode 100644 doc/bugs/No_progress_bars_with_S3/comment_1_33a601201a9fdd2357f1c03e32fa6b9c._comment create mode 100644 doc/bugs/No_progress_bars_with_S3/comment_2_52361805ced99c22d663b3b1e8a5b221._comment create mode 100644 doc/bugs/No_progress_bars_with_S3/comment_3_5903c1c40c4562f4fbaccd1640fedb18._comment create mode 100644 doc/bugs/No_progress_bars_with_S3/comment_4_80799c33e513384894b390fe34ab312a._comment create mode 100644 doc/bugs/No_version_information_from_cli.mdwn create mode 100644 doc/bugs/OSX_.dmg_unnecessarily_large_and_not_inherently_compressed.mdwn create mode 100644 doc/bugs/OSX_alias_permissions_and_versions_problem.mdwn create mode 100644 doc/bugs/OSX_alias_permissions_and_versions_problem/comment_1_4fabe32e7e626e6ca23aa0b6f449c4c6._comment create mode 100644 doc/bugs/OSX_alias_permissions_and_versions_problem/comment_2_064d60fcc8366a70958540bc145e611a._comment create mode 100644 doc/bugs/OSX_alias_permissions_and_versions_problem/comment_3_6c72d4f40ea0a9566a1185901beff5ba._comment create mode 100644 doc/bugs/OSX_alias_permissions_and_versions_problem/comment_4_8a11f404bb72a1aeb2290744cce2d00d._comment create mode 100644 doc/bugs/OSX_alias_permissions_and_versions_problem/comment_5_30888607199d6a48b76d0c48f5aa4f64._comment create mode 100644 doc/bugs/OSX_app_issues.mdwn create mode 100644 doc/bugs/OSX_app_issues/comment_10_54d8f3e429df9a9958370635c890abf0._comment create mode 100644 doc/bugs/OSX_app_issues/comment_10_6d23232fbb15d0ee3ab532a4884f81ed._comment create mode 100644 doc/bugs/OSX_app_issues/comment_11_5db2baa771fd01a284eac8a16c1c8c67._comment create mode 100644 doc/bugs/OSX_app_issues/comment_11_bb2ceb95a844449795addee6986d0763._comment create mode 100644 doc/bugs/OSX_app_issues/comment_12_62170597c7f441d84d48986857998858._comment create mode 100644 doc/bugs/OSX_app_issues/comment_12_f3bc5a4e4895ac9351786f0bdd8005ba._comment create mode 100644 doc/bugs/OSX_app_issues/comment_13_cb12d419459e5cac766022ee0697fedc._comment create mode 100644 doc/bugs/OSX_app_issues/comment_14_c966fa549bc73c52034ac9abc49de52a._comment create mode 100644 doc/bugs/OSX_app_issues/comment_15_10f1df95266f1a8c9ef933183190f6e2._comment create mode 100644 doc/bugs/OSX_app_issues/comment_16_064e151da121f9c2ef13c19ecb4e7458._comment create mode 100644 doc/bugs/OSX_app_issues/comment_17_0e6ac5e0a54ce78bdc56c62e6fb92846._comment create mode 100644 doc/bugs/OSX_app_issues/comment_2_fd560811c57df5cbc3976639642b8b19._comment create mode 100644 doc/bugs/OSX_app_issues/comment_7_93e0bb53ac2d7daef53426fbdc5f92d9._comment create mode 100644 doc/bugs/OSX_app_issues/comment_8_141eac2f3fb25fe18b4268786f00ad6a._comment create mode 100644 doc/bugs/OSX_app_issues/comment_8_f4d5b2645d7f29b80925159efb94a998._comment create mode 100644 doc/bugs/OSX_app_issues/comment_9_2e6dfca0fd8df04066769653724eae28._comment create mode 100644 doc/bugs/OSX_app_issues/comment_9_e1bbe83a1b9a7385ed6d443d0cc22bc7._comment create mode 100644 doc/bugs/OSX_app_issues/old.mdwn create mode 100644 doc/bugs/OSX_app_issues/old/comment_10_bb823dc3cd6dc914ed14c176afa0b2f3._comment create mode 100644 doc/bugs/OSX_app_issues/old/comment_11_a30e69fed14b0809184ffe05358ab871._comment create mode 100644 doc/bugs/OSX_app_issues/old/comment_12_23d47b3696e537d60df1d383f33f19e4._comment create mode 100644 doc/bugs/OSX_app_issues/old/comment_13_be5738b42b13ec8cd828c5fa66f030e8._comment create mode 100644 doc/bugs/OSX_app_issues/old/comment_14_5783a4716cd104e1f1c276aa0b9cb153._comment create mode 100644 doc/bugs/OSX_app_issues/old/comment_14_e126d87a263f3aa6261f72ee7ff086fc._comment create mode 100644 doc/bugs/OSX_app_issues/old/comment_15_56c7fcafc7dca8be28ebf9e37a8f6b71._comment create mode 100644 doc/bugs/OSX_app_issues/old/comment_15_e58bd3d66f0f43c159d2b37172f152de._comment create mode 100644 doc/bugs/OSX_app_issues/old/comment_16_01f2c968bad66b0ff0c09eb468325deb._comment create mode 100644 doc/bugs/OSX_app_issues/old/comment_16_0b7cd3d5952c5abf36a89a68a4afc1e7._comment create mode 100644 doc/bugs/OSX_app_issues/old/comment_17_82d9963e1fbf17644ce697e5a43943f5._comment create mode 100644 doc/bugs/OSX_app_issues/old/comment_17_c2de94a48e7958b9efffd89dda9144ff._comment create mode 100644 doc/bugs/OSX_app_issues/old/comment_18_29af9df9ea295d114574e76e15b8e737._comment create mode 100644 doc/bugs/OSX_app_issues/old/comment_18_88ddc846eb4e4a2d54028a3412ba28d6._comment create mode 100644 doc/bugs/OSX_app_issues/old/comment_19_6d6341b05123cd317c4eac96353c8662._comment create mode 100644 doc/bugs/OSX_app_issues/old/comment_19_aff4ab761c4d196732baa046af45fe24._comment create mode 100644 doc/bugs/OSX_app_issues/old/comment_20_43bd5985d8a3a5e7f826a34e5dd9216e._comment create mode 100644 doc/bugs/OSX_app_issues/old/comment_3_08613b2e2318680508483d204a43da76._comment create mode 100644 doc/bugs/OSX_app_issues/old/comment_4_4cda124b57ddc87645d5822f14ed5c59._comment create mode 100644 doc/bugs/OSX_app_issues/old/comment_5_0d1df34f83a8dac9c438d93806236818._comment create mode 100644 doc/bugs/OSX_app_issues/old/comment_6_12bd83e7e2327c992448e87bdb85d17e._comment create mode 100644 doc/bugs/OSX_app_issues/old/comment_6_bc44d5aea5f77e331a32913ada293730._comment create mode 100644 doc/bugs/OSX_app_issues/old/comment_6_cea97dbbfb566a9fe463365ca4511119._comment create mode 100644 doc/bugs/OSX_app_issues/old/comment_7_911f187d46890093a54859032ada2442._comment create mode 100644 doc/bugs/OSX_app_issues/old/comment_7_acd73cc5c4caa88099e2d2f19947aadf._comment create mode 100644 doc/bugs/OSX_app_issues/old/comment_8_08b091a58106ca6050ac669579ed9ff4._comment create mode 100644 doc/bugs/OSX_app_issues/old/comment_9_8464c839cb169a4c6e72bebdc2065e9a._comment create mode 100644 doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__.mdwn create mode 100644 doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__/comment_1_0dfa839f1ba689b23f811787515b8cff._comment create mode 100644 doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__/comment_2_612b947eb5474f6d792a833e33105665._comment create mode 100644 doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__/comment_3_549b8bcae6f1f8b21932b734e32fbdd1._comment create mode 100644 doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__/comment_4_23078dfea127fa3ef20696eb10ce964c._comment create mode 100644 doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__/comment_5_7da5ef8325b8787bbf1c6e2c17b1142e._comment create mode 100644 doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp.mdwn create mode 100644 doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_1_2653fe701a1bb20254f3d6b90f10a43b._comment create mode 100644 doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_2_d9ce701d077e40f39b142ce2cc570a3b._comment create mode 100644 doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_3_14964ab68253dc1a8903d14a821b8b40._comment create mode 100644 doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_4_4a579e9a13305ab4157f4b3eba46b92d._comment create mode 100644 doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_5_2a710960dc3a177ce62ef92f8546c496._comment create mode 100644 doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_6_a4ad73530cd0f6621bcc6394d5f39af7._comment create mode 100644 doc/bugs/Of_identical_files__44___all_but_the_first_copy_are_lost_on_unannex.mdwn create mode 100644 doc/bugs/Of_identical_files__44___all_but_the_first_copy_are_lost_on_unannex/comment_2_f7149b684a97070cff051b780c73be48._comment create mode 100644 doc/bugs/Old_repository_stuck.mdwn create mode 100644 doc/bugs/Older_version_of_git_causes_Internal_Server_Error_when_push.default___61___simple.mdwn create mode 100644 doc/bugs/Older_version_of_git_causes_Internal_Server_Error_when_push.default___61___simple/comment_1_971224d2c0c0ce8d4530b1991508f849._comment create mode 100644 doc/bugs/Older_version_of_git_causes_Internal_Server_Error_when_push.default___61___simple/comment_2_6866f96277dbe83a8aadcdeb426b6750._comment create mode 100644 doc/bugs/Older_version_of_git_causes_Internal_Server_Error_when_push.default___61___simple/comment_3_eaed9b5532e30e401f50193a72b98310._comment create mode 100644 doc/bugs/Older_version_of_git_causes_Internal_Server_Error_when_push.default___61___simple/comment_4_1fab407f3823ce8cec87f5df55e49f8c._comment create mode 100644 doc/bugs/On_Windows__44___annex_get_fails_with_HTTP_Remote__44___but_believes_it_has_succeeded..mdwn create mode 100644 doc/bugs/On_Windows__44___annex_get_over_HTTP_sends_URLs_with_incorrect_separator.mdwn create mode 100644 doc/bugs/On_Windows__44___can__39__t_use_a_USB_disk_annex_created_on_Linux.mdwn create mode 100644 doc/bugs/On_Windows__44___can__39__t_use_a_USB_disk_annex_created_on_Linux/comment_1_f224f4155d857a59595658357f97dac1._comment create mode 100644 doc/bugs/On_Windows__44___can__39__t_use_repository_that_has_a_unix-style_local_remote_configured.mdwn create mode 100644 doc/bugs/On_Windows__44___can__39__t_use_repository_that_has_a_unix-style_local_remote_configured/comment_1_95655915ff6ba9fb5d873358ff047496._comment create mode 100644 doc/bugs/On_Windows__44___wget_is_not_used__44___even_if_available.mdwn create mode 100644 doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone..mdwn create mode 100644 doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_1_3a3891c9d7ee808f6a71780cb628f23d._comment create mode 100644 doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_2_2bc6efb1d9e872cc5d4fbfbaaf5cc10e._comment create mode 100644 doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_3_fff1e778a6334258c173a96e6bf7ef6a._comment create mode 100644 doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_4_2a86da97a89e28f0a0f5e160d4932ae6._comment create mode 100644 doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_5_41b8e8e58025cc8c8f12efb9a51acd29._comment create mode 100644 doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_6_38afcd8e7fb278ca0ee2e9e0c9f6883e._comment create mode 100644 doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_7_06de36dcde4c52ab74c8134f3242ac02._comment create mode 100644 doc/bugs/Open_webapp_ask_to_create_new_repo___40__on_first_start__41___even_if_repo_exists_on_Android.mdwn create mode 100644 doc/bugs/Open_webapp_ask_to_create_new_repo___40__on_first_start__41___even_if_repo_exists_on_Android/comment_1_9f10bf273b15e93f1eea029f091f26cb._comment create mode 100644 doc/bugs/Out_of_memory_error_in_fsck_whereis_find_and_status_cmds.mdwn create mode 100644 doc/bugs/Out_of_memory_error_in_fsck_whereis_find_and_status_cmds/comment_1_3aef6ca929fad198f2dda0868f2d49cb._comment create mode 100644 doc/bugs/Out_of_memory_error_in_fsck_whereis_find_and_status_cmds/comment_2_f2c1aa84a0d04e840cb34ae15eb1cb03._comment create mode 100644 doc/bugs/Out_of_memory_error_in_fsck_whereis_find_and_status_cmds/comment_3_480c39648e3ca6fc58c30377bdb25a8c._comment create mode 100644 doc/bugs/Out_of_memory_error_in_fsck_whereis_find_and_status_cmds/comment_4_b31496b37046a9886f632ba4f11c56e3._comment create mode 100644 doc/bugs/Out_of_memory_error_in_fsck_whereis_find_and_status_cmds/comment_5_d25ff424dda1f6021c1ba20f79d71ffc._comment create mode 100644 doc/bugs/Out_of_memory_error_in_fsck_whereis_find_and_status_cmds/comment_6_9e3300b223dd54a3f07c650f5cf70ae0._comment create mode 100644 doc/bugs/Out_of_memory_error_in_fsck_whereis_find_and_status_cmds/comment_7_b91f4a87b6d29ae6b4262922fd65a79d._comment create mode 100644 doc/bugs/Pairing_locally_shows:___34__bad_comment_in_ssh_public_key_ssh-rsa__34__.mdwn create mode 100644 doc/bugs/Partial_direct__47__indirect_repo.mdwn create mode 100644 doc/bugs/Partial_direct__47__indirect_repo/comment_1_42344fce051d759f95215c985e9d1135._comment create mode 100644 doc/bugs/Partial_direct__47__indirect_repo/comment_2_8ba64f2750d0ef4adf595674c723bc65._comment create mode 100644 doc/bugs/Partial_direct__47__indirect_repo/comment_3_bd4985864b7dcd70a609ca7bc2617e4a._comment create mode 100644 doc/bugs/Possible_data_loss_-_git_status___39__typechange__39___and_direct_mode.mdwn create mode 100644 doc/bugs/Possible_data_loss_-_git_status___39__typechange__39___and_direct_mode/comment_1_84cb8c651584ec2887f6e1b7dc107190._comment create mode 100644 doc/bugs/Possible_issues_with_git_1.7.10_and_newer___40__merge_command_now_asks_for_a_commit_message__34__.mdwn create mode 100644 doc/bugs/Prevent_accidental_merges.mdwn create mode 100644 doc/bugs/Prevent_accidental_merges/comment_1_4c46a193915eab8f308a04175cb2e40a._comment create mode 100644 doc/bugs/Problem_when_dropping_unused_files.mdwn create mode 100644 doc/bugs/Problem_when_dropping_unused_files/comment_10_d4f6bfe8e04560fc661a47b09ed8a5f4._comment create mode 100644 doc/bugs/Problem_when_dropping_unused_files/comment_1_e1a99bd3eb8b3186653b52a52b1836de._comment create mode 100644 doc/bugs/Problem_when_dropping_unused_files/comment_2_dec3e5ffe5cfdc439f418ee00d7d9810._comment create mode 100644 doc/bugs/Problem_when_dropping_unused_files/comment_3_d106a87101db52f957da84d90dafcdbb._comment create mode 100644 doc/bugs/Problem_when_dropping_unused_files/comment_4_f28ed0635612693e437e64d872af5c37._comment create mode 100644 doc/bugs/Problem_when_dropping_unused_files/comment_5_f0237075653768c84deb702442645f28._comment create mode 100644 doc/bugs/Problem_when_dropping_unused_files/comment_6_b509006e1590480a104627369bc910f2._comment create mode 100644 doc/bugs/Problem_when_dropping_unused_files/comment_7_fe261c074211ccb94bbcb32cfd8ee654._comment create mode 100644 doc/bugs/Problem_when_dropping_unused_files/comment_8_bc8e4dc7e0d6577ba5fcc98f56627b1f._comment create mode 100644 doc/bugs/Problem_when_dropping_unused_files/comment_9_e9a22aa2ebcde5f6595b49dba9375761._comment create mode 100644 doc/bugs/Problem_with_bup:_cannot_lock_refs.mdwn create mode 100644 doc/bugs/Problems_building_on_Mac_OS_X.mdwn create mode 100644 doc/bugs/Problems_building_on_Mac_OS_X/comment_1_1c199b826fdd84b5184b1466ad03a9a4._comment create mode 100644 doc/bugs/Problems_running_make_on_osx.mdwn create mode 100644 doc/bugs/Problems_running_make_on_osx/comment_10_94e4ac430140042a2d0fb5a16d86b4e5._comment create mode 100644 doc/bugs/Problems_running_make_on_osx/comment_11_56f1143fa191361d63b441741699e17f._comment create mode 100644 doc/bugs/Problems_running_make_on_osx/comment_12_ec5131624d0d2285d3b6880e47033f97._comment create mode 100644 doc/bugs/Problems_running_make_on_osx/comment_13_88ed095a448096bf8a69015a04e64df1._comment create mode 100644 doc/bugs/Problems_running_make_on_osx/comment_14_89a960b6706ed703b390a81a8bc4e311._comment create mode 100644 doc/bugs/Problems_running_make_on_osx/comment_15_6b8867b8e48bf807c955779c9f8f0909._comment create mode 100644 doc/bugs/Problems_running_make_on_osx/comment_16_5c2dd6002aadaab30841b77a5f5aed34._comment create mode 100644 doc/bugs/Problems_running_make_on_osx/comment_17_62fccb04b0e4b695312f7a3f32fb96ee._comment create mode 100644 doc/bugs/Problems_running_make_on_osx/comment_18_64fab50d95de619eb2e8f08f90237de1._comment create mode 100644 doc/bugs/Problems_running_make_on_osx/comment_19_4253988ed178054c8b6400beeed68a29._comment create mode 100644 doc/bugs/Problems_running_make_on_osx/comment_1_34120e82331ace01a6a4960862d38f2d._comment create mode 100644 doc/bugs/Problems_running_make_on_osx/comment_20_7db27d1a22666c831848bc6c06d66a84._comment create mode 100644 doc/bugs/Problems_running_make_on_osx/comment_2_cc53d1681d576186dbc868dd9801d551._comment create mode 100644 doc/bugs/Problems_running_make_on_osx/comment_3_68f0f8ae953589ae26d57310b40c878d._comment create mode 100644 doc/bugs/Problems_running_make_on_osx/comment_4_c52be386f79f14c8570a8f1397c68581._comment create mode 100644 doc/bugs/Problems_running_make_on_osx/comment_5_7f1330a1e541b0f3e2192e596d7f7bee._comment create mode 100644 doc/bugs/Problems_running_make_on_osx/comment_6_0c46f5165ceb5a7b9ea9689c33b3a4f8._comment create mode 100644 doc/bugs/Problems_running_make_on_osx/comment_7_237a137cce58a28abcc736cbf2c420b0._comment create mode 100644 doc/bugs/Problems_running_make_on_osx/comment_8_efafa203addf8fa79e33e21a87fb5a2b._comment create mode 100644 doc/bugs/Problems_running_make_on_osx/comment_9_cc283b485b3c95ba7eebc8f0c96969b3._comment create mode 100644 doc/bugs/Problems_with_syncing_gnucash.mdwn create mode 100644 doc/bugs/Problems_with_syncing_gnucash/comment_1_ca195af3ba4a286eb5ab687634192fa4._comment create mode 100644 doc/bugs/Problems_with_syncing_gnucash/comment_2_754fb430381ad88e6248ecb902b32118._comment create mode 100644 doc/bugs/Problems_with_syncing_gnucash/comment_4_25881998c6f149c70b1358f37b7c66ba._comment create mode 100644 doc/bugs/Provide_64-bit_standalone_build.mdwn create mode 100644 doc/bugs/Provide_64-bit_standalone_build/comment_1_1850bb3eb464f1d3c122cfeb4ccaf265._comment create mode 100644 doc/bugs/Proxy_support.mdwn create mode 100644 doc/bugs/Remote_repo_and_set_operation_with_find.mdwn create mode 100644 doc/bugs/Remote_repositories_have_to_be_setup_encrypted.mdwn create mode 100644 doc/bugs/Remote_repositories_have_to_be_setup_encrypted/comment_1_95f73315657bc35a8d3ff9b4ba207af0._comment create mode 100644 doc/bugs/Remotes_only_start_showing_changes_after_both_sides_have_written_to_the_repository.mdwn create mode 100644 doc/bugs/Remotes_only_start_showing_changes_after_both_sides_have_written_to_the_repository/comment_1_92211091daf9827a4ec7e5b5a6769d59._comment create mode 100644 doc/bugs/Remotes_only_start_showing_changes_after_both_sides_have_written_to_the_repository/comment_2_f0fa97a9eba1c624f6f8720ba8a160b7._comment create mode 100644 doc/bugs/Remotes_only_start_showing_changes_after_both_sides_have_written_to_the_repository/comment_3_e3d677ea4170c07cd31efe6dc85fa5f3._comment create mode 100644 doc/bugs/Renamed_special_remote_cannot_be_reactivated_by_the_webapp.mdwn create mode 100644 doc/bugs/Repository_deletion_error.mdwn create mode 100644 doc/bugs/Repository_deletion_error/comment_1_31673d0300986b6098d1af2cc4b180c6._comment create mode 100644 doc/bugs/Resource_exhausted.mdwn create mode 100644 doc/bugs/Resource_exhausted/comment_10_bccf9528ffe963154c92ce49762e7ea6._comment create mode 100644 doc/bugs/Resource_exhausted/comment_1_a5ef7a62d4ed9365f9448520bb17e3b5._comment create mode 100644 doc/bugs/Resource_exhausted/comment_2_cdba2015e603f3c21f3e1697dd6fafcd._comment create mode 100644 doc/bugs/Resource_exhausted/comment_3_747d16d050fdcf69dd3d2bc5ca469a2e._comment create mode 100644 doc/bugs/Resource_exhausted/comment_4_1e9b74e60da57c3d5f08c1eb3801c1d2._comment create mode 100644 doc/bugs/Resource_exhausted/comment_5_f55d933bce77fd2185ebd0cc46fe57ec._comment create mode 100644 doc/bugs/Resource_exhausted/comment_6_26c98fca45b029a527f9684873db4be5._comment create mode 100644 doc/bugs/Resource_exhausted/comment_7_8bab413b472f900e04977db2bc3951b6._comment create mode 100644 doc/bugs/Resource_exhausted/comment_8_e9bec0b80179b1229b6af0979a21c727._comment create mode 100644 doc/bugs/Resource_exhausted/comment_9_419e24e0b91f569294ece28c42daa246._comment create mode 100644 doc/bugs/Resource_leak_somewhere_in_the___39__get__39___code.mdwn create mode 100644 doc/bugs/Resource_leak_somewhere_in_the___39__get__39___code/comment_1_66b21720cd1b2a4f66ef24252d3e6305._comment create mode 100644 doc/bugs/Resource_leak_somewhere_in_the___39__get__39___code/comment_2_18c9f55c5af1f4f690a7727df71ab561._comment create mode 100644 doc/bugs/Rsync_encrypted_remote_asks_for_ssh_key_password_for_each_file.mdwn create mode 100644 doc/bugs/Rsync_encrypted_remote_asks_for_ssh_key_password_for_each_file/comment_1_fd95e0bb61e80a72b4ac1304ef6c2e77._comment create mode 100644 doc/bugs/Rsync_remote_created_via_webapp_remains_empty.mdwn create mode 100644 doc/bugs/Rsync_remote_created_via_webapp_remains_empty/comment_1_cccf9d58c0ebb8d31cacdd029ea8e23a._comment create mode 100644 doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing.mdwn create mode 100644 doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_1_dc5ae7af499203cfd903e866595b8fea._comment create mode 100644 doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_2_c62daf5b3bfcd2f684262c96ef6628c1._comment create mode 100644 doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_3_e1f39c4af5bdb0daabf000da80858cd9._comment create mode 100644 doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_4_bb6b814ab961818d514f6553455d2bf3._comment create mode 100644 doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_5_5bb128f6d2ca4b5e4d881fae297fa1f8._comment create mode 100644 doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_6_63fb74da342751fc35e1850409c506f6._comment create mode 100644 doc/bugs/S3_buckets_with_capital_letters_breaks_authentication.mdwn create mode 100644 doc/bugs/S3_memory_leaks.mdwn create mode 100644 doc/bugs/S3_memory_leaks/comment_1_a7268213b090bce6b1f1858a8e23d90e._comment create mode 100644 doc/bugs/S3_upload_not_using_multipart.mdwn create mode 100644 doc/bugs/SSH:_command-line:_line_0:_Bad_configuration_option:_ControlPersist___40__SSH_too_old_on_OS_X_10.6.8__63____41__.mdwn create mode 100644 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 create mode 100644 doc/bugs/Segfaults_on_Fedora_18_with_SELinux_enabled.mdwn create mode 100644 doc/bugs/Segfaults_on_Fedora_18_with_SELinux_enabled/comment_1_f708d87aa65cd38c20087859d3ab2dc7._comment create mode 100644 doc/bugs/Segfaults_on_Fedora_18_with_SELinux_enabled/comment_2_fb7188db031147992f3c906783ebbee0._comment create mode 100644 doc/bugs/Selfsigned_certificates_with_jabber_fail_miserably..mdwn create mode 100644 doc/bugs/Selfsigned_certificates_with_jabber_fail_miserably./comment_1_13d27ba41d9ef78c8db534b6bc26314e._comment create mode 100644 doc/bugs/Selfsigned_certificates_with_jabber_fail_miserably./comment_2_018eed99e71680be9e7c0844020419bb._comment create mode 100644 doc/bugs/Selfsigned_certificates_with_jabber_fail_miserably./comment_3_1e7578dd1321f399b12197056495b0b6._comment create mode 100644 doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__.txt create mode 100644 doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/comment_1_00b52dba3bc30516e06c44cbfd3a05a2._comment create mode 100644 doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/comment_2_8f5fa659c2ab91b1757bac31cd3b15eb._comment create mode 100644 doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/comment_3_ccf9623d60c58d036d8bf24757e50de3._comment create mode 100644 doc/bugs/Should_ignore_.thumbnails__47___on_android.mdwn create mode 100644 doc/bugs/Should_try_again_when_network_fails___40__esp._DNS__41__.mdwn create mode 100644 doc/bugs/Should_try_again_when_network_fails___40__esp._DNS__41__/comment_1_dd792bd98a48554a65150c06401ed3e5._comment create mode 100644 doc/bugs/Small_archive_behaving_like_archive.mdwn create mode 100644 doc/bugs/Small_archive_behaving_like_archive/comment_1_718dc246cbbbeae04436fa033011ab12._comment create mode 100644 doc/bugs/Specifying_a_filename_starting_with___34__-c__34___instead_applies_it_to_all_files.mdwn create mode 100644 doc/bugs/Specifying_a_filename_starting_with___34__-c__34___instead_applies_it_to_all_files/comment_1_2fe6d735bc075275a6b8890fac48ee58._comment create mode 100644 doc/bugs/Stale_lock_files_on_Android.mdwn create mode 100644 doc/bugs/Stress_test.mdwn create mode 100644 doc/bugs/Stress_test/comment_10_1694e990eab6592159309c231c6dcc16._comment create mode 100644 doc/bugs/Stress_test/comment_11_ab4cb6eefd279e6c1f229e089f703581._comment create mode 100644 doc/bugs/Stress_test/comment_1_c4c764488ac082f5c48d3a6b4b5fba42._comment create mode 100644 doc/bugs/Stress_test/comment_2_42125bba09a0ea9821cda7183e458100._comment create mode 100644 doc/bugs/Stress_test/comment_3_8240e61106b494d3600ad91f16eb5b1c._comment create mode 100644 doc/bugs/Stress_test/comment_4_c38d84e0dcc834931804c44bce7f7b7a._comment create mode 100644 doc/bugs/Stress_test/comment_5_60ce20ee255451c4ea809ba475561adb._comment create mode 100644 doc/bugs/Stress_test/comment_6_1371562e201393986cd41597f6f288cb._comment create mode 100644 doc/bugs/Stress_test/comment_7_a14be7699da224a8f6c9b34f1b911219._comment create mode 100644 doc/bugs/Stress_test/comment_8_a01995bdca7ade7dde9842b53fbc4e0c._comment create mode 100644 doc/bugs/Stress_test/comment_9_9f7efe81b7e40aaa04a865394c53e20f._comment create mode 100644 doc/bugs/Switching_between_direct_and_indirect_stomps_on___39__regular__39___git_files.mdwn create mode 100644 doc/bugs/Switching_between_direct_and_indirect_stomps_on___39__regular__39___git_files/comment_1_0d2cb3b8509cd0eba50aafa14afefc02._comment create mode 100644 doc/bugs/Switching_from_indirect_mode_to_direct_mode_breaks_duplicates.mdwn create mode 100644 doc/bugs/Switching_repositories_in_webapp_on_a_remote_server_is_not_honoring_--listen_parameter.mdwn create mode 100644 doc/bugs/Switching_repositories_in_webapp_on_a_remote_server_is_not_honoring_--listen_parameter/comment_1_4dd773372979dd95538bfba6516a11eb._comment create mode 100644 doc/bugs/Syncing_creates_broken_links_instead_of_proper_files.mdwn create mode 100644 doc/bugs/Syncing_creates_broken_links_instead_of_proper_files/comment_1_a2bedb2e77451b02fc66fc9ef5c4405c._comment create mode 100644 doc/bugs/Test_failure_on_debian_dropunused.mdwn create mode 100644 doc/bugs/The_assistant_hangs_forever.mdwn create mode 100644 doc/bugs/The_assistant_hangs_forever/comment_1_b0291e32860e0da0b66837d14ed5aab6._comment create mode 100644 doc/bugs/The_assistant_hangs_forever/comment_2_a2950cf91b8a4e4f2951f5522ef0e9c4._comment create mode 100644 doc/bugs/The_assistant_hangs_forever/comment_3_db95f78519d5ffbad793906028730dab._comment create mode 100644 doc/bugs/The_assistant_hangs_forever/comment_4_28b13fd3165b38a2fbc9e1a461c38921._comment create mode 100644 doc/bugs/The_assistant_hangs_forever/comment_5_81a79c8840ff26307a9c6edad5b850f9._comment create mode 100644 doc/bugs/The_assistant_hangs_forever/comment_6_b739719b14705f4d7e1d412b3cab090c._comment create mode 100644 doc/bugs/The_assistant_hangs_forever/comment_7_2b300d960697c5b967c1f109dfd6dfbf._comment create mode 100644 doc/bugs/The_assistant_hangs_forever/comment_8_8623220d08b1a72ed8b669a2d9cc0f75._comment create mode 100644 doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible.mdwn create mode 100644 doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_10_8305becdc6e70abdaf17e42f263173fc._comment create mode 100644 doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_11_d75896a6e204d1abdda04923aa668d04._comment create mode 100644 doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_12_a36a4a64a04c01c2db467b09300e6ebd._comment create mode 100644 doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_13_c9d6631c304acb289e485fb901e1f274._comment create mode 100644 doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_14_10282c4352075c8d148b8674973b7b16._comment create mode 100644 doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_15_ceb68da01d9e2fe9a70fab6244116da0._comment create mode 100644 doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_16_cca4abde86a8be5e2919c4738f5bdd0c._comment create mode 100644 doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_17_2fa5d7d9110c91b0a3a833cb3d9f53fd._comment create mode 100644 doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_18_bf21d28142e4c304aa0bc740955ddea0._comment create mode 100644 doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_19_45537758fa937f16fc82120bf8b234e8._comment create mode 100644 doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_1_a38497772834a4b12137390b461ce70b._comment create mode 100644 doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_20_b685050ee6fbb1a685e33f9656a10e84._comment create mode 100644 doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_3_17bc0220c20553c848875475c5fd4ae6._comment create mode 100644 doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_4_76472bc58bb790f773c46ec2c39fcf88._comment create mode 100644 doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_4_dcd9286e314779c25764484beff40561._comment create mode 100644 doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_5_2146eec77b87b615100d0d003e8dce75._comment create mode 100644 doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_6_2bd6f4e04903ee251d43d0a97bd40b6e._comment create mode 100644 doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_7_7db8ed002eb6313b07f09bd1a34019e3._comment create mode 100644 doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_8_1bcb2a238006044bc78849e56cb21a01._comment create mode 100644 doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_9_26c6937cf78e7141e0e3b20f25ed8f7a._comment create mode 100644 doc/bugs/The_tests_are_failing_to_build_now_on_commit_e0fdfb2e706da2cb1451193c658dc676b0530968.mdwn create mode 100644 doc/bugs/The_webapp_doesn__39__t_allow_deleting_repositories.mdwn create mode 100644 doc/bugs/The_webapp_doesn__39__t_allow_deleting_repositories/comment_1_1b80f9cfedd25e34997fa07e08d15012._comment create mode 100644 doc/bugs/The_webapp_doesn__39__t_allow_deleting_repositories/comment_2_53499da1185c56d8fd25f86ba41d96ce._comment create mode 100644 doc/bugs/The_webapp_doesn__39__t_allow_deleting_repositories/comment_3_3e07b8386d2c7afce2a78d24b9c260b9._comment create mode 100644 doc/bugs/Too_many_open_files.mdwn create mode 100644 doc/bugs/Too_many_open_files/comment_1_d5d509b9b431d2ea6000ebc0aed62857._comment create mode 100644 doc/bugs/Too_much_system_load_on_startup.mdwn create mode 100644 doc/bugs/Too_much_system_load_on_startup/comment_1_4470cddc0965062588acff1bc77285e9._comment create mode 100644 doc/bugs/TransferScanner_crash_on_Android.mdwn create mode 100644 doc/bugs/TransferScanner_crash_on_Android/comment_1_6c3584ade1ee6cccddddeaa8e1697945._comment create mode 100644 doc/bugs/TransferScanner_crash_on_Android/comment_2_06574e05149a677d666a722061586658._comment create mode 100644 doc/bugs/TransferScanner_crash_on_Android/comment_3_54ae097d30bb7a49fe151f38c9bac033._comment create mode 100644 doc/bugs/Transfers_continue_after_daemon_stopped.mdwn create mode 100644 doc/bugs/Transfers_continue_after_daemon_stopped/comment_1_39eb527d64367e6762281246f1d49b1f._comment create mode 100644 doc/bugs/Tries_to_upload_to_remote_although_remote_is_dead.mdwn create mode 100644 doc/bugs/Tries_to_upload_to_remote_although_remote_is_dead/comment_1_108b3984891f82429430b503cddfb3c1._comment create mode 100644 doc/bugs/Tries_to_upload_to_remote_although_remote_is_dead/comment_2_fa5b1bc26ed3e5bfe48441490c94fe3a._comment create mode 100644 doc/bugs/Tries_to_upload_to_remote_although_remote_is_dead/comment_3_0a785b5dfbf4eef30854d6bedb12b7d1._comment create mode 100644 doc/bugs/Trouble_initializing_git_annex_on_NFS.mdwn create mode 100644 doc/bugs/Trouble_initializing_git_annex_on_NFS/comment_1_e26952373150d63b8a5d3643a2762de1._comment create mode 100644 doc/bugs/Trouble_initializing_git_annex_on_NFS/comment_2_f80b10ed395738e50e345fc22c708ae5._comment create mode 100644 doc/bugs/Trouble_initializing_git_annex_on_NFS/comment_3_f99e0f05950fc2fc80fdecd35e17012c._comment create mode 100644 doc/bugs/Trouble_initializing_git_annex_on_NFS/comment_4_e42146d2dcc4052266dd61d204aeb551._comment create mode 100644 doc/bugs/True_backup_support.mdwn create mode 100644 doc/bugs/True_backup_support/comment_1_50aa0bc1e2502622585682cb703e0b85._comment create mode 100644 doc/bugs/True_backup_support/comment_2_d6030c6c49b227e022f05d590746d4ca._comment create mode 100644 doc/bugs/Truncated_file_transferred_via_S3.mdwn create mode 100644 doc/bugs/Truncated_file_transferred_via_S3/comment_1_5962358e6067448f633cc0eaf42f9ca7._comment create mode 100644 doc/bugs/Truncated_file_transferred_via_S3/comment_2_75a2c272c36fc4fe8f9a79a3fd3ac4e5._comment create mode 100644 doc/bugs/Truncated_file_transferred_via_S3/comment_3_3dae1914c8c90fdad0c21e1fc795f2ca._comment create mode 100644 doc/bugs/Truncated_file_transferred_via_S3/comment_4_3c5fe109f2196cfc196c30da3b62bafd._comment create mode 100644 doc/bugs/Truncated_file_transferred_via_S3/comment_5_f86f83c89300f255e730ddd23f876f61._comment create mode 100644 doc/bugs/Unable_to_add_files_on_Android_due_to_weird_rename_error.mdwn create mode 100644 doc/bugs/Unable_to_add_files_on_Android_due_to_weird_rename_error/comment_1_928289956111d1b22f9d55f15b54f72f._comment create mode 100644 doc/bugs/Unable_to_add_files_on_Android_due_to_weird_rename_error/comment_2_6a0cb836b93ba4cb1e07b11d5d2a7094._comment create mode 100644 doc/bugs/Unable_to_import_feed.mdwn create mode 100644 doc/bugs/Unable_to_import_feed/comment_1_16230fbbb996e165b84787ed4d5f72ea._comment create mode 100644 doc/bugs/Unable_to_switch_back_to_direct_mode.mdwn create mode 100644 doc/bugs/Unable_to_switch_back_to_direct_mode/comment_1_4585b251f011a153c62f377c324cf963._comment create mode 100644 doc/bugs/Unable_to_switch_back_to_direct_mode/comment_2_5848ebbab38d1244347f7e7351b3a30d._comment create mode 100644 doc/bugs/Unable_to_switch_back_to_direct_mode/comment_3_1c5c7b0c7bc336e00f43e257b87a6208._comment create mode 100644 doc/bugs/Unable_to_switch_back_to_direct_mode/comment_4_b0bfd68998bc3e11d8e089646b8292a6._comment create mode 100644 doc/bugs/Unable_to_sync_a_second_machine_through_Box.mdwn create mode 100644 doc/bugs/Unable_to_sync_a_second_machine_through_Box/comment_1_cb43a2bc976e3eb1cfc3ee9d4d34e78e._comment create mode 100644 doc/bugs/Unable_to_sync_a_second_machine_through_Box/comment_2_3375e9bfab3fed271413bd9bb5fa0121._comment create mode 100644 doc/bugs/Unable_to_sync_a_second_machine_through_Box/comment_3_c4420e1a3db321b4135b1626d3582adb._comment create mode 100644 doc/bugs/Unable_to_sync_a_second_machine_through_Box/comment_4_f4b2c88bb5938dacdd04dfe9a68560de._comment create mode 100644 doc/bugs/Unable_to_sync_a_second_machine_through_Box/comment_5_6dcc95ffb3fc7bbbedd6be5df0111c85._comment create mode 100644 doc/bugs/Unable_to_use_remotes_with_space_in_the_path.mdwn create mode 100644 doc/bugs/Unfortunate_interaction_with_Calibre.mdwn create mode 100644 doc/bugs/Unfortunate_interaction_with_Calibre/comment_1_7cb5561f11dfc7726a537ddde2477489._comment create mode 100644 doc/bugs/Unfortunate_interaction_with_Calibre/comment_2_b8ae4bc589c787dacc08ab2ee5491d6e._comment create mode 100644 doc/bugs/Unfortunate_interaction_with_Calibre/comment_3_977c5f6b82f9e18cdd81d57005bb8b89._comment create mode 100644 doc/bugs/Unfortunate_interaction_with_Calibre/comment_4_ff7d2e9a39dfe12b975d04650ac57cc4._comment create mode 100644 doc/bugs/Unfortunate_interaction_with_Calibre/comment_5_fc4d5301797589e92cc9a24697b2155d._comment create mode 100644 doc/bugs/Unknown_command___39__list__39__.mdwn create mode 100644 doc/bugs/Unknown_command___39__list__39__/comment_1_c625d03d1ed2019141ac9202f933466d._comment create mode 100644 doc/bugs/Unknown_command___39__list__39__/comment_2_800e1b6417768bdadda311ebfb5df637._comment create mode 100644 doc/bugs/Unknown_command___39__list__39__/comment_3_35dfc75ce9efffff139f8929dc311e29._comment create mode 100644 doc/bugs/Unknown_remote_type_webdav.mdwn create mode 100644 doc/bugs/Unnecessary_remote_transfers.mdwn create mode 100644 doc/bugs/Unnecessary_remote_transfers/comment_10_b778fbb1386f0f51bf057ffacd590ebb._comment create mode 100644 doc/bugs/Unnecessary_remote_transfers/comment_11_55430eac842d0a192dc7f41d7730e4d5._comment create mode 100644 doc/bugs/Unnecessary_remote_transfers/comment_1_00c18e07678dc513a02d974fe059df73._comment create mode 100644 doc/bugs/Unnecessary_remote_transfers/comment_2_2e9992dbfceabd6df535a2770626de16._comment create mode 100644 doc/bugs/Unnecessary_remote_transfers/comment_3_a98f3091a6a658919f0562cf396439c2._comment create mode 100644 doc/bugs/Unnecessary_remote_transfers/comment_4_417c1e8e27ee1a1f9ebf9160560605c5._comment create mode 100644 doc/bugs/Unnecessary_remote_transfers/comment_5_eb5a2717a1f0c7bb761d2a7866b23def._comment create mode 100644 doc/bugs/Unnecessary_remote_transfers/comment_6_89f756db1f3f2e60a3bd1f35f55fee43._comment create mode 100644 doc/bugs/Unnecessary_remote_transfers/comment_7_5aaf8766a7ba05c4f92715e5d5175a8f._comment create mode 100644 doc/bugs/Unnecessary_remote_transfers/comment_8_e856b350632cc865d16d1995a6cdf065._comment create mode 100644 doc/bugs/Unnecessary_remote_transfers/comment_9_64f831545b34b78452952cf49b5f5b05._comment create mode 100644 doc/bugs/Update_dependency_on_certificate___62____61___1.3.3.mdwn create mode 100644 doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work.mdwn create mode 100644 doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_1_2143f0540fdcd7efeb25b5a3b54fe0fd._comment create mode 100644 doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_2_bca95245b457631d08b47591da6163ad._comment create mode 100644 doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_3_f54bb003096752dae0442660267a1e37._comment create mode 100644 doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_4_38bb916ed5b90b92ffa91a452ff052a9._comment create mode 100644 doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_5_5b6ef464ab1ad061f27122db40191e26._comment create mode 100644 doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_6_3727bda5082cb1f2b1f746f9f80ced7d._comment create mode 100644 doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_7_a7139f19f0b73c024cd9218eb01e6104._comment create mode 100644 doc/bugs/Using_Github_as_remote_throws_proxy_errors.mdwn create mode 100644 doc/bugs/Using_Github_as_remote_throws_proxy_errors/comment_1_10616b17c3fb8286fdc64c841023f8a1._comment create mode 100644 doc/bugs/Using_Github_as_remote_throws_proxy_errors/comment_2_8a72887d33e492a041f8246d93d0c778._comment create mode 100644 doc/bugs/Using_a_revoked_GPG_key.mdwn create mode 100644 doc/bugs/Using_a_revoked_GPG_key/comment_1_7bb01d081282e5b02b7720b2953fe5be._comment create mode 100644 doc/bugs/Using_a_revoked_GPG_key/comment_2_9c0c40360f0058a4bd346c1362e302b6._comment create mode 100644 doc/bugs/Using_a_revoked_GPG_key/comment_3_8f69f58107246595f5603f35c4aa7395._comment create mode 100644 doc/bugs/Using_a_revoked_GPG_key/comment_4_78b3c52ba85edfa6ee6e273bec3bea5c._comment create mode 100644 doc/bugs/Using_a_revoked_GPG_key/comment_5_a85ccf2f09ebe87147f8761b81a02326._comment create mode 100644 doc/bugs/Using_a_revoked_GPG_key/comment_6_8b89eb5e6386acd0a922310c04f863ac._comment create mode 100644 doc/bugs/Using_a_revoked_GPG_key/comment_7_20dc5a7ce7cb6ca97ccdfb923c3b24bb._comment create mode 100644 doc/bugs/Using_a_revoked_GPG_key/comment_8_9dc921dc6077f828454a4444088b9a43._comment create mode 100644 doc/bugs/Using_a_revoked_GPG_key/comment_9_f50c802d78041fd1522f0e7599ce6a45._comment create mode 100644 doc/bugs/WEBDAV_443.mdwn create mode 100644 doc/bugs/WEBDAV_443/comment_10_9ee2c5ed44295455af890caee7b06f1a._comment create mode 100644 doc/bugs/WEBDAV_443/comment_11_863a7d315212c9a8ab8f6fafa5d1b7f5._comment create mode 100644 doc/bugs/WEBDAV_443/comment_12_c17a4e23011e0a917dbe0ecf7e9f0cb5._comment create mode 100644 doc/bugs/WEBDAV_443/comment_13_3414416ff455d2fd1a7c7e7c4554b54d._comment create mode 100644 doc/bugs/WEBDAV_443/comment_14_e1da141eefb0445c217e5f5c119356da._comment create mode 100644 doc/bugs/WEBDAV_443/comment_15_41c3134bcc222b97bf183559723713d9._comment create mode 100644 doc/bugs/WEBDAV_443/comment_16_89621b526065b5bef753ce75db1af7b5._comment create mode 100644 doc/bugs/WEBDAV_443/comment_17_131a1b65c8008cf9f02c93d4fb75720b._comment create mode 100644 doc/bugs/WEBDAV_443/comment_18_b4f894a0b9ebb84ab73f6ffcf0778090._comment create mode 100644 doc/bugs/WEBDAV_443/comment_1_c6572ca1eaaf89b01c0ed99a4058412f._comment create mode 100644 doc/bugs/WEBDAV_443/comment_2_a357969cde382a91e13920ee1e9f711c._comment create mode 100644 doc/bugs/WEBDAV_443/comment_3_213815d6b827d467c60f3e8af925813b._comment create mode 100644 doc/bugs/WEBDAV_443/comment_4_b775be4b722fc7124d9fbe2d5d01cc9f._comment create mode 100644 doc/bugs/WEBDAV_443/comment_5_c4ea745da437e56b2426d1c2c00dfcec._comment create mode 100644 doc/bugs/WEBDAV_443/comment_6_ef05c0ae88fee9c626922c6064ffdf1e._comment create mode 100644 doc/bugs/WEBDAV_443/comment_7_eecabe8d5ed564cb540450770ca7d0b6._comment create mode 100644 doc/bugs/WEBDAV_443/comment_8_7f77ba8ebd90186d3b3949ae529ba393._comment create mode 100644 doc/bugs/WEBDAV_443/comment_9_87ebdc92b48d672964fb3f248c53600f._comment create mode 100644 doc/bugs/WORM:_Handle_long_filenames_correctly.mdwn create mode 100644 doc/bugs/WORM:_Handle_long_filenames_correctly/comment_1_77aa9cafbe20367a41377f3edccc9ddb._comment create mode 100644 doc/bugs/WORM:_Handle_long_filenames_correctly/comment_2_fe735d728878d889ccd34ec12b3a7dea._comment create mode 100644 doc/bugs/WORM:_Handle_long_filenames_correctly/comment_3_2bf0f02d27190578e8f4a32ddb195a0a._comment create mode 100644 doc/bugs/WORM:_Handle_long_filenames_correctly/comment_4_8f7ba9372463863dda5aae13205861bf._comment create mode 100644 doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults.mdwn create mode 100644 doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_10_6c872dff4fcc63c16bf69d1e96891c89._comment create mode 100644 doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_1_5cad24007f819e4be193123dab0d511a._comment create mode 100644 doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_2_d449bf656a59d424833f9ab5a7fb4e82._comment create mode 100644 doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_3_ffb1ce41477ad60840abd7a89a133067._comment create mode 100644 doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_4_cebbc138c6861c086bb7937b54f5adbc._comment create mode 100644 doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_5_5e27737a5bb0e9e46c98708700318e67._comment create mode 100644 doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_6_1f92da712232d050e085a4f39063d7a6._comment create mode 100644 doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_7_4153dc8029c545f8e86584a38bd536fb._comment create mode 100644 doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_8_f85b6eb5bfd28ffc6973fb4ab0fe4337._comment create mode 100644 doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_9_c747c488461c98cd285b51d3afc2c3eb._comment create mode 100644 doc/bugs/Watcher_crashed:_addWatch:_does_not_exist.mdwn create mode 100644 doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_1_24f511a8103727894c6e96798a559870._comment create mode 100644 doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_2_e14eddbc09cadbf1e4dbbb0c07e0e5b0._comment create mode 100644 doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_3_513fae4d379008f954a307be8df34976._comment create mode 100644 doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_4_172eaeb3bb8b502379695aba35f96120._comment create mode 100644 doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_5_8adb9de82cc8581422734acc66dd094c._comment create mode 100644 doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_6_02f0beef1188bfa336bf4220eb5c6286._comment create mode 100644 doc/bugs/Watcher_crashed_in_Android_on___47__storage__47__sdcard1_-_bug__63__.mdwn create mode 100644 doc/bugs/Watcher_crashed_in_Android_on___47__storage__47__sdcard1_-_bug__63__/comment_1_71b052be40fbdaca09ca3ede8c59ac7a._comment create mode 100644 doc/bugs/Watcher_crashed_in_Android_on___47__storage__47__sdcard1_-_bug__63__/comment_3_0f7cc02e0193c969c9b6ceb27e71af8a._comment create mode 100644 doc/bugs/Watcher_crashed_in_Android_on___47__storage__47__sdcard1_-_bug__63__/comment_3_1a7542249b9c37507126e97441057c12._comment create mode 100644 doc/bugs/WebDAV_HandshakeFailed_.mdwn create mode 100644 doc/bugs/WebDAV_HandshakeFailed_/comment_1_40499110ea43bc99ad9dd9f642da434c._comment create mode 100644 doc/bugs/WebDAV_HandshakeFailed_/comment_2_506712e8cc5b47b9bd69edf67ae54da7._comment create mode 100644 doc/bugs/WebDAV_HandshakeFailed_/comment_3_5641481d9e9ed2b711b1516f1abc5c30._comment create mode 100644 doc/bugs/WebDAV_HandshakeFailed_/comment_4_1d609de93fa66ce9dc802e67b5922243._comment create mode 100644 doc/bugs/WebDAV_HandshakeFailed_/comment_5_62761882d30c1b02930c938cb8e30ed4._comment create mode 100644 doc/bugs/WebDAV_HandshakeFailed_/comment_6_acda8fae848ec486ce2a0b3dff3bd0a5._comment create mode 100644 doc/bugs/WebDAV_HandshakeFailed_/comment_7_6c51b6c7dd477d8911dd9a7a5c41ea2e._comment create mode 100644 doc/bugs/WebDAV_HandshakeFailed_/comment_8_e834f791d3000669fab25732a7c72ab3._comment create mode 100644 doc/bugs/Webapp_fails_to_resolve_ipv6_hostname.mdwn create mode 100644 doc/bugs/Weird_behaviour_of_direct_and_indirect_annexes.mdwn create mode 100644 doc/bugs/Weird_behaviour_of_direct_and_indirect_annexes/comment_1_56474a69c2f174d83be9137d3c045a47._comment create mode 100644 doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace.mdwn create mode 100644 doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_0._comment create mode 100644 doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_10_037a6dd6e15ef5f789a1f364f7507b53._comment create mode 100644 doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_11_614e4110188fc6474e7da50fc4281e13._comment create mode 100644 doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_12_dcb74fb91e1c2f0db4efd68c8bcbc96c._comment create mode 100644 doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_14_38671ba8d302f4d32460d1478abd2111._comment create mode 100644 doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_14_483244b1ed5744308022465f45c091fd._comment create mode 100644 doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_1_d2c63723fa4bf828873770a42ffaab20._comment create mode 100644 doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_3_52f0db73dc38c3e3a73f6c7a420bf016._comment create mode 100644 doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_4_93596b4d5a48ffcf4bc11ba9c83cf7ca._comment create mode 100644 doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_5_de94e80dde6d12485140bb079d74d775._comment create mode 100644 doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_6_5f34c3d449247b4bce4665b3ea4d054c._comment create mode 100644 doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_7_b43ae8aec23ba3acaf70edc0de058710._comment create mode 100644 doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_8_13b8e0a62f6b6d02960687e206a8b016._comment create mode 100644 doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_9_818b94a74b01a210d1106dd35bc932d8._comment create mode 100644 doc/bugs/Windows_and_Linux_in_direct_mode_confuses_git.mdwn create mode 100644 doc/bugs/Windows_and_Linux_in_direct_mode_confuses_git/comment_1_155e0c4d3aa41eebfe27533ab70a91d3._comment create mode 100644 doc/bugs/Windows_build_test_failures.mdwn create mode 100644 doc/bugs/Windows_build_test_failures/comment_1_ea7523fdbafdc8be2971df52d9038826._comment create mode 100644 doc/bugs/Windows_installer_includes_curl_and_wget__44___but_not_required_DLLs.mdwn create mode 100644 doc/bugs/Windows_installer_includes_curl_and_wget__44___but_not_required_DLLs/comment_1_a7bf0f027f2209e5632e292afd7214d0._comment create mode 100644 doc/bugs/Windows_to_Linux_clone_-_Windows_drive_letters_cause_git_annex_get_to_fail.mdwn create mode 100644 doc/bugs/Windows_to_Linux_clone_-_Windows_drive_letters_cause_git_annex_get_to_fail/comment_1_c87bae87b7902db60a3fef41e1fca85d._comment create mode 100644 doc/bugs/Windows_to_Linux_clone_-_Windows_drive_letters_cause_git_annex_get_to_fail/comment_2_9e3c1f1ba05d8996b5a95829ce32c07e._comment create mode 100644 doc/bugs/Windows_to_Linux_clone_-_Windows_drive_letters_cause_git_annex_get_to_fail/comment_3_3a0787912f4a3a8797b7786f5ce38590._comment create mode 100644 doc/bugs/Windows_to_Linux_clone_-_Windows_drive_letters_cause_git_annex_get_to_fail/comment_4_c4249f32d65594d79ea01145b93ec948._comment create mode 100644 doc/bugs/With_S3__44___GPG_ask_for_a_new_passphrase.mdwn create mode 100644 doc/bugs/With_S3__44___GPG_ask_for_a_new_passphrase/comment_1_a4fc30bf7d39cae337286e9e815e6cba._comment create mode 100644 doc/bugs/With_S3__44___GPG_ask_for_a_new_passphrase/comment_2_e5d42b623017acedf6a3890ce15680a3._comment create mode 100644 doc/bugs/With_S3__44___GPG_ask_for_a_new_passphrase/comment_3_e5150b65b514896e14b9ad3d951963f7._comment create mode 100644 doc/bugs/With_S3__44___GPG_ask_for_a_new_passphrase/comment_4_47c2fc167b0c396edc40468fb7c7bfee._comment create mode 100644 doc/bugs/Won__39__t_drop_files__44___even_though_remote_annexes_have_at_least_numcopies.mdwn create mode 100644 doc/bugs/Wrong_port_while_configuring_ssh_remote.mdwn create mode 100644 doc/bugs/Zombie_processes_and__47__or_stuck_git_processes.mdwn create mode 100644 doc/bugs/Zombie_processes_and__47__or_stuck_git_processes/comment_1_0f8b248025722309e9577d7dad74b76b._comment create mode 100644 doc/bugs/Zombie_processes_and__47__or_stuck_git_processes/comment_2_f5f7db688a2a93ee7453674fb742043b._comment create mode 100644 doc/bugs/Zombie_processes_and__47__or_stuck_git_processes/comment_3_ffcae976aa3dc2426188797c1aaffb82._comment create mode 100644 doc/bugs/Zombie_processes_and__47__or_stuck_git_processes/comment_4_8a7ff6841ad7c27ead06bf12f46b20a0._comment create mode 100644 doc/bugs/Zombie_processes_and__47__or_stuck_git_processes/comment_5_406fdee0728680774a69d28446163f10._comment create mode 100644 doc/bugs/__34__Adding_4923_files__34___is_really_slow.mdwn create mode 100644 doc/bugs/__34__Adding_4923_files__34___is_really_slow/comment_2_5f3b9f00bc31ce71d695c008971ed7fd._comment create mode 100644 doc/bugs/__34__Adding_4923_files__34___is_really_slow/comment_2_708b02dd06a1eed6b5ded9eb7aa9e7a8._comment create mode 100644 doc/bugs/__34__Adding_4923_files__34___is_really_slow/comment_3_6a735b7875d2a0c92df6786dd649985d._comment create mode 100644 doc/bugs/__34__Adding_4923_files__34___is_really_slow/comment_4_7e768908ba6983ea13af27635c4a947f._comment create mode 100644 doc/bugs/__34__Configuring_Jabber_Account__34___fails_with_a___34__Network_unreachable__34___error..mdwn create mode 100644 doc/bugs/__34__Configuring_Jabber_Account__34___fails_with_a___34__Network_unreachable__34___error./comment_1_6d821af99ab3c83a5b0f52d3713ab8e2._comment create mode 100644 doc/bugs/__34__Configuring_Jabber_Account__34___fails_with_a___34__Network_unreachable__34___error./comment_2_206b6c8cce8350fc088f01c42fc4715b._comment create mode 100644 doc/bugs/__34__Configuring_Jabber_Account__34___fails_with_a___34__Network_unreachable__34___error./comment_3_ed36f503f88611382b50687608b9b7e7._comment create mode 100644 doc/bugs/__34__annex_sync__34___gets_confused_when_operating_in_a_symlink__39__ed_directory.mdwn create mode 100644 doc/bugs/__34__drop__34___deletes_all_files_with_identical_content.mdwn create mode 100644 doc/bugs/__34__drop__34___deletes_all_files_with_identical_content/comment_1_2eb20b65582fa7f271b1d0bb5560d08c._comment create mode 100644 doc/bugs/__34__drop__34___deletes_all_files_with_identical_content/comment_2_b14e1d31dd6a8fb930fcc0bec798e194._comment create mode 100644 doc/bugs/__34__drop__34___deletes_all_files_with_identical_content/comment_3_1892bcfbe3c462aa74552a241d65cad9._comment create mode 100644 doc/bugs/__34__drop__34___deletes_all_files_with_identical_content/comment_4_dfa0e31996eaa14e2945c1d11670c4d9._comment create mode 100644 doc/bugs/__34__drop__34___deletes_all_files_with_identical_content/comment_5_e2a9336cf1080c158765d4adfe72f26b._comment create mode 100644 doc/bugs/__34__fatal:_bad_config_file__34__.mdwn create mode 100644 doc/bugs/__34__git_annex_watch__34___adds_map.dot.mdwn create mode 100644 doc/bugs/__34__make_test__34___fails_silently.mdwn create mode 100644 doc/bugs/__34__make_test__34___fails_silently/comment_1_f868e34f41d828d4571968d1ab07820a._comment create mode 100644 doc/bugs/__34__make_test__34___fails_silently/comment_2_fb9e8e2716b0dea15b0d4807ae7cd114._comment create mode 100644 doc/bugs/__39__annex_add__39___fails_to___39__git_add__39___for_parent_relative_path.mdwn create mode 100644 doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content.mdwn create mode 100644 doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_1_56f9cd5cc2e089b32cb076dc2e2a8ca5._comment create mode 100644 doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_2_21c0f7f328cb51080fbd97e086c47a30._comment create mode 100644 doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_3_3287b2f25f3b5ae4c27f4748694563ee._comment create mode 100644 doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_4_e515eca68a70d40c522805d7e0d7c0e6._comment create mode 100644 doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_5_b27f4c103dda050b6e9cf03ea3157abc._comment create mode 100644 doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_6_2cc7083dab944705bf91fc00319b75e6._comment create mode 100644 doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_7_1175f9be789d4c1907f0be98e435bd2f._comment create mode 100644 doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_8_78e6164ef67a9560a3a9ead1f7a72473._comment create mode 100644 doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_9_1d578fd13022dcd6382b415a7f6e097a._comment create mode 100644 doc/bugs/__40__assistant__41___dependency_on_ssh-askpass_-_not_installed_automatically_on_xubuntu.mdwn create mode 100644 doc/bugs/__40__assistant__41___dependency_on_ssh-askpass_-_not_installed_automatically_on_xubuntu/comment_1_f4656f8a0f36535def0772db06098c5f._comment create mode 100644 doc/bugs/__91__Installation__93___There_is_no_available_version_of_quickcheck_that_satisfies___62____61__2.1.mdwn create mode 100644 doc/bugs/__91__webapp__93___pause_syncing_with_specific_repository.mdwn create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 doc/bugs/__96__git_annex_add__96___changes_mtime_if_symlinks_are_fixed_in_the_background.mdwn create mode 100644 doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op.mdwn create mode 100644 doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op/comment_1_9b671e583eec5adf870dccd1e97b5dbc._comment create mode 100644 doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op/comment_2_d11744202213d6f897f4234bc4c70c18._comment create mode 100644 doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op/comment_3_a729deb465ff44f5a9b87c963cd6235a._comment create mode 100644 doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op/comment_4_3f735503df9a08472d42fabd219c2ec5._comment create mode 100644 doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op/comment_5_2c61eabbba7fd2a52ba02d59a0a76a42._comment create mode 100644 doc/bugs/__96__git_annex_import__96___clobbers_mtime.mdwn create mode 100644 doc/bugs/__96__git_annex_import__96___clobbers_mtime/comment_1_d173f2903faf4bff115a0be02c146ce9._comment create mode 100644 doc/bugs/__96__git_annex_import__96___clobbers_mtime/comment_2_3563d9eeb9806f8ca1b9b340925837f5._comment create mode 100644 doc/bugs/__96__git_annex_import__96___clobbers_mtime/comment_3_d5c7488db16b71c4f337662c897278ca._comment create mode 100644 doc/bugs/__96__git_annex_import__96___clobbers_mtime/comment_4_7235130786e764ec3ad5facfecde62da._comment create mode 100644 doc/bugs/__96__git_annex_import__96___does_not_work_on_other_git_annex_repositories.mdwn create mode 100644 doc/bugs/__96__git_annex_import__96___does_not_work_on_other_git_annex_repositories/comment_1_94ccd548c084286163eeb2af1ddc18e3._comment create mode 100644 doc/bugs/__96__git_annex_import__96___does_not_work_on_other_git_annex_repositories/comment_2_befde3ef3d2b171ebb691915ff3af172._comment create mode 100644 doc/bugs/__96__git_annex_sync__96___ignores_remotes.mdwn create mode 100644 doc/bugs/__96__git_annex_sync__96___ignores_remotes/comment_1_39421e6935233cd8f45949ebdef369fe._comment create mode 100644 doc/bugs/__96__git_annex_sync__96___ignores_remotes/comment_2_53fb15d6fbf96d43564ff7c866239d18._comment create mode 100644 doc/bugs/_impossible_to_switch_repositories_on_android__in_webapp.mdwn create mode 100644 doc/bugs/_impossible_to_switch_repositories_on_android__in_webapp/comment_1_d488d71a72eb54d7711d2a867db6172f._comment create mode 100644 doc/bugs/_impossible_to_switch_repositories_on_android__in_webapp/comment_2_85b31db6d0fb2d20018db3d8c8258bf4._comment create mode 100644 doc/bugs/acl_not_honoured_in_rsync_remote.mdwn create mode 100644 doc/bugs/acl_not_honoured_in_rsync_remote/comment_1_aa6fe1d7b029eae7ee71c97e0f0937a6._comment create mode 100644 doc/bugs/acl_not_honoured_in_rsync_remote/comment_2_ffb9424e966ee10a4fe2d446b3042cb2._comment create mode 100644 doc/bugs/add_range_argument_to___34__git_annex_dropunused__34___.mdwn create mode 100644 doc/bugs/add_script-friendly_output_options.mdwn create mode 100644 doc/bugs/added_branches_makes___39__git_annex_unused__39___slow.mdwn create mode 100644 doc/bugs/added_branches_makes___39__git_annex_unused__39___slow/comment_1_d350c39c67031c500e3224e92c0029ea._comment create mode 100644 doc/bugs/added_branches_makes___39__git_annex_unused__39___slow/comment_2_b2d2b1caa51ffec3d87c36b373cb8d4a._comment create mode 100644 doc/bugs/added_branches_makes___39__git_annex_unused__39___slow/comment_3_12b20cbbc2b4cd1ab8af7e3eec9589b4._comment create mode 100644 doc/bugs/added_branches_makes___39__git_annex_unused__39___slow/comment_4_a50b43c15d2650df90f0fa1ced47f532._comment create mode 100644 doc/bugs/added_branches_makes___39__git_annex_unused__39___slow/comment_5_7328bc51bd001f2b732a92a2ae175839._comment create mode 100644 doc/bugs/added_branches_makes___39__git_annex_unused__39___slow/comment_6_880ef2ee797221332dbb629b2d55522f._comment create mode 100644 doc/bugs/added_branches_makes___39__git_annex_unused__39___slow/comment_7_826fd82cdf9b1c79c9b555ca26c2c176._comment create mode 100644 doc/bugs/adding_an_rsync.net_repo_give_an_gpg_error.mdwn create mode 100644 doc/bugs/adding_an_rsync.net_repo_give_an_gpg_error/comment_1_f55cfc133be72ac10cae93c877c487df._comment create mode 100644 doc/bugs/adding_an_rsync.net_repo_give_an_gpg_error/comment_2_24dd024ac4b21a82a781343b8fe3891e._comment create mode 100644 doc/bugs/addurl:___34__rename:_does_not_exist__34___and_reports_fail__44___but_succeeds.mdwn create mode 100644 doc/bugs/addurl:___34__rename:_does_not_exist__34___and_reports_fail__44___but_succeeds/comment_1_1f5e0bc93631baf0f8c1bec2e68493c5._comment create mode 100644 doc/bugs/addurl_--relaxed_with_--file_doesn__39__t_actually_relax.mdwn create mode 100644 doc/bugs/addurl_fails_on_the_internet_archive.mdwn create mode 100644 doc/bugs/addurl_fails_on_the_internet_archive/comment_1_e227aa25eea0b41f1176037a601c5844._comment create mode 100644 doc/bugs/addurl_fails_on_the_internet_archive/comment_2_6d4fd58f0caa1f75ee2dd3f0a909cd91._comment create mode 100644 doc/bugs/addurl_file_doesn__39__t_work_with_spaces_in_filenames_and_--fast.mdwn create mode 100644 doc/bugs/addurl_file_doesn__39__t_work_with_spaces_in_filenames_and_--fast/comment_1_eea9477ea1157cb88c8a07d8da5f0dba._comment create mode 100644 doc/bugs/allows_repository_with_the_same_name_twice.mdwn create mode 100644 doc/bugs/allows_repository_with_the_same_name_twice/comment_1_ba7801403e7138684704a3471c8bc4a6._comment create mode 100644 doc/bugs/allows_repository_with_the_same_name_twice/comment_2_8c19a4ddedbe7ddb8bdcf84acac68cc8._comment create mode 100644 doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit.mdwn create mode 100644 doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_10_1d841ff0b0ffd814efed2449dc1f35f3._comment create mode 100644 doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_10_cd101e0af45d8f463011fb0d04b3b822._comment create mode 100644 doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_11_8595041cfe703d9bea49e792732dc15f._comment create mode 100644 doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_1_8e7bc6965ea967a8d43240791a30c5bc._comment create mode 100644 doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_2_891c1073f908b204651899d41599f944._comment create mode 100644 doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_3_de02b8f1b5928fa1a7078c4aa2124bea._comment create mode 100644 doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_6_506acc4275a81ed9e9b08e8a40fcf96a._comment create mode 100644 doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_7_d38d6f40db4c9437764c7b2ddf36b5a9._comment create mode 100644 doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_8_9bb23e9cbc77ecca4b1209b0f66bc2b0._comment create mode 100644 doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_9_d1ce7fc251db076da61eed5bb9d71b9a._comment create mode 100644 doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_9_feb71c1022ff65d82e66a3958a41dfb2._comment create mode 100644 doc/bugs/android_4.2.1__44___galaxy_nexus_java.lang.SecurityException.mdwn create mode 100644 doc/bugs/annex-rsync-options_shell-split_carelessly.mdwn create mode 100644 doc/bugs/annex-rsync-options_shell-split_carelessly/comment_1_2636e0d224317f2e6db94658d8a094c4._comment create mode 100644 doc/bugs/annex.numcopies_not_overriden_by_--numcopies_option.mdwn create mode 100644 doc/bugs/annex_add_in_annex.mdwn create mode 100644 doc/bugs/annex_get_fails:___34__No_such_file_or_directory__34__.mdwn create mode 100644 doc/bugs/annex_get_over_SSH_is_very_slow.mdwn create mode 100644 doc/bugs/annex_unannex__47__uninit_should_handle_copies.mdwn create mode 100644 doc/bugs/annex_unannex__47__uninit_should_handle_copies/comment_1_c896ff6589f62178b60e606771e4f2bf._comment create mode 100644 doc/bugs/annex_unannex__47__uninit_should_handle_copies/comment_2_9249609f83f8e9c7521cd2f007c1a39e._comment create mode 100644 doc/bugs/another_build_error_in_assistant.mdwn create mode 100644 doc/bugs/archiving_git_repositories.mdwn create mode 100644 doc/bugs/archiving_git_repositories/comment_1_51f546a571303118446a9e0b3e6482c9._comment create mode 100644 doc/bugs/assistant_-_GTalk_collision.mdwn create mode 100644 doc/bugs/assistant_-_GTalk_collision/comment_1_ab2c1f36113d40f27e1893d32f214296._comment create mode 100644 doc/bugs/assistant_-_GTalk_collision/comment_2_91dff34c629a3b3a97a2313ff077e4ae._comment create mode 100644 doc/bugs/assistant_-_GTalk_collision/comment_3_fefb73f6e570f96b4d82779d6622f690._comment create mode 100644 doc/bugs/assistant___40__OS_X_Lion__41___-___34__too_many_open_files__34___error.mdwn create mode 100644 doc/bugs/assistant___40__OS_X_Lion__41___-___34__too_many_open_files__34___error/comment_1_9904c30a4c24a699d71e90ce5e9b89cf._comment create mode 100644 doc/bugs/assistant_always_assumes_port_22__63__.mdwn create mode 100644 doc/bugs/assistant_bails_when_adding_encrypted_usbdrive_repo_on_mac.mdwn create mode 100644 doc/bugs/assistant_bails_when_adding_encrypted_usbdrive_repo_on_mac/comment_1_4ea192e57f86a33087997746722e6acf._comment create mode 100644 doc/bugs/assistant_bails_when_adding_encrypted_usbdrive_repo_on_mac/comment_2_622ad5b34780fc8468c5c515ad9f27fa._comment create mode 100644 doc/bugs/assistant_cannot_set_up_remote_repo_via_an_ssh_alias_or_an_ip_address/comment_1_1650539846521ae11837e4ac73348af6._comment create mode 100644 doc/bugs/assistant_cannot_set_up_remote_repo_via_an_ssh_alias_or_an_ip_address/comment_2_b91415e4ee74eb12bc6e6faddd00af6e._comment create mode 100644 doc/bugs/assistant_does_not_allow_adding_an_existing_repo.mdwn create mode 100644 doc/bugs/assistant_does_not_allow_adding_an_existing_repo/comment_1_87e84d56d56abefe8cac8a52b76c9003._comment create mode 100644 doc/bugs/assistant_does_not_always_use_repo_cost_info_when_queueing_downloads.mdwn create mode 100644 doc/bugs/assistant_does_not_list_remote___39__origin__39__.mdwn create mode 100644 doc/bugs/assistant_does_not_list_remote___39__origin__39__/comment_1_ffa008240c61b50396aa92f467731db6._comment create mode 100644 doc/bugs/assistant_does_not_list_remote___39__origin__39__/comment_2_a53f80090bc2a0f32b8d8307cb24b563._comment create mode 100644 doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add.mdwn create mode 100644 doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_1_13b2f93b7d09c8fd6c22829a0dc6428b._comment create mode 100644 doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_2_94e46bc0044b8a91a9fd51058825aa8f._comment create mode 100644 doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_3_10a38bdbf31dd4071e4bc4ac746d9c56._comment create mode 100644 doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_4_b8fdf502c7e80aece5a9544a2078c85c._comment create mode 100644 doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_5_a2ff7668f2a0d549b362d7de97fac8a1._comment create mode 100644 doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_6_60d72f34a6cfd1c081f74aa610f4305a._comment create mode 100644 doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_7_53a73e662c9356b759fbfa1e5a3bd927._comment create mode 100644 doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_8_10b65168b6a54d960427966d7e3d05f5._comment create mode 100644 doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_9_b640e8fa6aafb041d66bbf8857a8fa3d._comment create mode 100644 doc/bugs/assistant_doesn__39__t_sync_empty_directories.mdwn create mode 100644 doc/bugs/assistant_doesn__39__t_sync_empty_directories/comment_1_78a3bde607f43c0f518bd2d3d7196022._comment create mode 100644 doc/bugs/assistant_doesn__39__t_sync_empty_directories/comment_2_83777384b72732b1d0a19b32686d3d1f._comment create mode 100644 doc/bugs/assistant_doesn__39__t_sync_empty_directories/comment_3_f9b2a700c060707fae1bcb2ec0e4e4dc._comment create mode 100644 doc/bugs/assistant_doesn__39__t_sync_empty_directories/comment_4_014d213a959dd7993bdd247722a8817e._comment create mode 100644 doc/bugs/assistant_doesn__39__t_sync_empty_directories/comment_5_440f349781d7d9ca2d1ed81386f7dd26._comment create mode 100644 doc/bugs/assistant_doesn__39__t_sync_file_permissions.mdwn create mode 100644 doc/bugs/assistant_doesn__39__t_sync_file_permissions/comment_1_fc8d3ea209a2ab39c1aeff52452d4c58._comment create mode 100644 doc/bugs/assistant_doesn__39__t_sync_file_permissions/comment_2_1a364c422e0dd7418f74e1cc3d543a3c._comment create mode 100644 doc/bugs/assistant_doesn__39__t_sync_file_permissions/comment_3_4d5ae51b4c7e6177d934d7c9f21b912c._comment create mode 100644 doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual.mdwn create mode 100644 doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_1_37acb3afafb1b4c4da7c778130cf3035._comment create mode 100644 doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_2_9d58887ee0184663852bde83b8d497c7._comment create mode 100644 doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_3_b70881c8026e30fd3ddc051bd01a888b._comment create mode 100644 doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_4_43f756e2e6ff985c8e050da0e369d486._comment create mode 100644 doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_5_eda947eb7f8c46b9a61d6430b5f9ebfd._comment create mode 100644 doc/bugs/assistant_hangs_during_commit.mdwn create mode 100644 doc/bugs/assistant_hangs_during_commit/comment_1_aacc15c589d2795254387e427b3afe0c._comment create mode 100644 doc/bugs/assistant_hangs_during_commit/comment_2_b9f1bf9fa919603dca28182c80d39a11._comment create mode 100644 doc/bugs/assistant_hangs_during_commit/comment_3_fb5be10fcf5e7c89da5c34f48539612f._comment create mode 100644 doc/bugs/assistant_hangs_during_commit/comment_4_9ba7efe9112578729d02ac4e6557b3cc._comment create mode 100644 doc/bugs/assistant_hangs_during_commit/comment_5_73b24c901c73d41e0e0abe91267d4920._comment create mode 100644 doc/bugs/assistant_hangs_during_commit/comment_6_1a30b8c82e58222f1366aa368c23e6d3._comment create mode 100644 doc/bugs/assistant_hangs_during_commit/comment_7_56868b2a504ad0a60e8a8c1928330175._comment create mode 100644 doc/bugs/assistant_ignore_.gitignore.mdwn create mode 100644 doc/bugs/assistant_ignore_.gitignore/comment_1_3458b1342cb2e3ccc01eeedc7f0e48fc._comment create mode 100644 doc/bugs/assistant_ignore_.gitignore/comment_2_22f75af80c779dcb4d6033b90373f74e._comment create mode 100644 doc/bugs/assistant_ignore_.gitignore/comment_3_8b2a400e1d44a1c9b183e2b7861efbe3._comment create mode 100644 doc/bugs/assistant_ignores___34__manual__34___group__44___tries_to_transfer_files.mdwn create mode 100644 doc/bugs/assistant_ignores___34__manual__34___group__44___tries_to_transfer_files/comment_1_e3f545d9adc27a4e7340bf16177c4fe0._comment create mode 100644 doc/bugs/assistant_ignores___34__manual__34___group__44___tries_to_transfer_files/comment_2_1403076dbc47733607f0c8b2856e2381._comment create mode 100644 doc/bugs/assistant_ignores___34__manual__34___group__44___tries_to_transfer_files/comment_3_af83717bfb260bea6d52ff71c6b34743._comment create mode 100644 doc/bugs/assistant_ignores___34__manual__34___group__44___tries_to_transfer_files/comment_4_b4f811611d14e7392009c539fa6b8574._comment create mode 100644 doc/bugs/assistant_listens_on_127.0.0.1_not_::1_which_breaks_IPv6_enabled_hosts.mdwn create mode 100644 doc/bugs/assistant_listens_on_127.0.0.1_not_::1_which_breaks_IPv6_enabled_hosts/comment_1_91a62a2ce14a1027d2ac8b8e88df5f0c._comment create mode 100644 doc/bugs/assistant_listens_on_127.0.0.1_not_::1_which_breaks_IPv6_enabled_hosts/comment_2_4982cd373eaaeee180be03c6e9fda7b1._comment create mode 100644 doc/bugs/assistant_listens_on_127.0.0.1_not_::1_which_breaks_IPv6_enabled_hosts/comment_3_85d264e311acaa91dac0597ee8deda82._comment create mode 100644 doc/bugs/assistant_not_noticing_file_renames__44___not_fixing_files.mdwn create mode 100644 doc/bugs/assistant_not_noticing_file_renames__44___not_fixing_files/comment_1_e0dafc410ffd617d445bb9403c7bfafe._comment create mode 100644 doc/bugs/assistant_not_noticing_file_renames__44___not_fixing_files/comment_2_2af247c8a1fcbde10795a990ef3303e9._comment create mode 100644 doc/bugs/assistant_syncs_with_remotes_even_when_all_remotes_disabled.mdwn create mode 100644 doc/bugs/assistant_wants_my_gpg_passphrase_when_it_has_nothing_to_drop_or_copy_to_that_remote.mdwn create mode 100644 doc/bugs/assistant_wants_my_gpg_passphrase_when_it_has_nothing_to_drop_or_copy_to_that_remote/comment_1_10a9570a5d762ba2da271b38dc63edb6._comment create mode 100644 doc/bugs/assistant_wants_my_gpg_passphrase_when_it_has_nothing_to_drop_or_copy_to_that_remote/comment_2_57d50955b038c2e2405068536c7e83f3._comment create mode 100644 doc/bugs/assistant_wants_my_gpg_passphrase_when_it_has_nothing_to_drop_or_copy_to_that_remote/comment_3_a66f34daaba421c87eb404ef933e5191._comment create mode 100644 doc/bugs/assistant_wants_my_gpg_passphrase_when_it_has_nothing_to_drop_or_copy_to_that_remote/comment_4_094a3272eca1c6d2b4d264911ffe96e5._comment create mode 100644 doc/bugs/assistant_wants_my_gpg_passphrase_when_it_has_nothing_to_drop_or_copy_to_that_remote/comment_5_0161410d042a3421addd4a1fc7c1cd01._comment create mode 100644 doc/bugs/authentication_to_rsync.net_fails.mdwn create mode 100644 doc/bugs/authentication_to_rsync.net_fails/comment_1_9db65f89415c8d825f268afb75244998._comment create mode 100644 doc/bugs/backend_version_upgrade_leaves_repo_unusable.mdwn create mode 100644 doc/bugs/bad_behaviour_with_file_names_with_newline_in_them.mdwn create mode 100644 doc/bugs/bad_behaviour_with_file_names_with_newline_in_them/comment_1_92dfe6e9089c79eb64e2177fb135ef55._comment create mode 100644 doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa.mdwn create mode 100644 doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_1_15cce6e6f455e83f4362a38c561bc973._comment create mode 100644 doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_2_e9e1f38880a32610b3fbce475bffc3e4._comment create mode 100644 doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_3_51da7f5881f65422328d341e5ab0d250._comment create mode 100644 doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_4_ba384314c1e47ec4b72e1843e0500df9._comment create mode 100644 doc/bugs/bare_git_repos.mdwn create mode 100644 doc/bugs/box.com_never_stops_syncing..mdwn create mode 100644 doc/bugs/box.com_never_stops_syncing./comment_1_124a5edcd89cc6b61e1a41f5b4d640d7._comment create mode 100644 doc/bugs/box.com_never_stops_syncing./comment_2_42574181aa721319ba54eadf0a15ddff._comment create mode 100644 doc/bugs/box.com_never_stops_syncing./comment_3_2ad727849070cfd52d6c719478e9cce3._comment create mode 100644 doc/bugs/box.com_never_stops_syncing./comment_4_83ce23e45f5a5845d4f04519ee14ec65._comment create mode 100644 doc/bugs/box.com_never_stops_syncing./comment_5_ef1c9d87b04db5047ab72167d3269687._comment create mode 100644 doc/bugs/box.com_never_stops_syncing./comment_6_c9cb39eba941678035f9b2888da1085c._comment create mode 100644 doc/bugs/box.com_never_stops_syncing./comment_7_4b0632a4e37c96959a8e6434e9fd86fb._comment create mode 100644 doc/bugs/box.com_never_stops_syncing./comment_8_d9d318b8c958de6031ae323da20af625._comment create mode 100644 doc/bugs/box.com_never_stops_syncing./comment_9_689ac6a4a305197cf5566f98dab47b4b._comment create mode 100644 doc/bugs/bug_in_download_prebuilt_linux_tarball__44___and_constraints_issues_with_3.20121112.mdwn create mode 100644 doc/bugs/build_fails_in_Assistant__47__WebApp__47__Gpg.hs.mdwn create mode 100644 doc/bugs/build_failure_with_kqueue_code__44___first_commit_that_breaks_is_3dce75fb23fca94ad86c3f0ee816bb0ad2ecb27c.mdwn create mode 100644 doc/bugs/build_is_broken_at_commit_cc0e5b7.mdwn create mode 100644 doc/bugs/build_issue_with_8baff14054e65ecbe801eb66786a55fa5245cb30.mdwn create mode 100644 doc/bugs/build_issue_with_latest_release_0.20110522-1-gde817ba.mdwn create mode 100644 doc/bugs/build_problem_on_OSX.mdwn create mode 100644 doc/bugs/building_on_lenny.mdwn create mode 100644 doc/bugs/bup_initremote_failed_with_localhost_+_username.mdwn create mode 100644 doc/bugs/bup_initremote_failed_with_localhost_+_username/comment_1_0e669c3039b089fa8a815d3ec11465d2._comment create mode 100644 doc/bugs/cabal_build:___34__Could_not_find_module___96__Data.AssocList__39____34__.mdwn create mode 100644 doc/bugs/cabal_build:___34__Could_not_find_module___96__Data.AssocList__39____34__/comment_1_0da9fd67c3cc01b316f95a1df4eb62ae._comment create mode 100644 doc/bugs/cabal_configure_is_broken_on_OSX_builds.mdwn create mode 100644 doc/bugs/cabal_install_fails_to_install_manpage.mdwn create mode 100644 doc/bugs/cabal_install_on_Ubuntu_12.04_fails_with_complaint_about_regex-base.mdwn create mode 100644 doc/bugs/call_to_git-annex-shell_when_on_centralised___40__non-git-annex__41___repository.mdwn create mode 100644 doc/bugs/call_to_git-annex-shell_when_on_centralised___40__non-git-annex__41___repository/comment_1_dd202a7764d9df998868d595a86ffb21._comment create mode 100644 doc/bugs/call_to_git-annex-shell_when_on_centralised___40__non-git-annex__41___repository/comment_2_ca065c82ac8e3215b581660f3e44f459._comment create mode 100644 doc/bugs/call_to_git-annex-shell_when_on_centralised___40__non-git-annex__41___repository/comment_3_927a01f9961c71bedb42c519a31b5fe5._comment create mode 100644 doc/bugs/can__39__t_annex_get_from_annex_in_direct_mode.mdwn create mode 100644 doc/bugs/can__39__t_annex_get_from_annex_in_direct_mode/comment_1_20c31a844d8351a99cf69e05d2836e0e._comment create mode 100644 doc/bugs/can__39__t_annex_get_from_annex_in_direct_mode/comment_2_f26e0f763f9027d9dfc08cd840ced153._comment create mode 100644 doc/bugs/can__39__t_run_the_assistant_from_the_command_line_anymore__63__.mdwn create mode 100644 doc/bugs/can_not_add_ssh_remote_to_assistant_with___34__host:port__34___syntax.mdwn create mode 100644 doc/bugs/can_not_add_ssh_remote_to_assistant_with___34__host:port__34___syntax/comment_1_397eb359c3f8ef30460a9556b6f55848._comment create mode 100644 doc/bugs/cannot_add_file__44___get___34__user_error__34__.mdwn create mode 100644 doc/bugs/cannot_add_file__44___get___34__user_error__34__/comment_1_14aa717c1befcbbf526f25ca2f0af825._comment create mode 100644 doc/bugs/cannot_add_file__44___get___34__user_error__34__/comment_2_7f7ac59e7f3dce9d7a7d0c3379c2edcf._comment create mode 100644 doc/bugs/cannot_add_file__44___get___34__user_error__34__/comment_3_5ebf03120b12edb3fbb8954546e7603e._comment create mode 100644 doc/bugs/cannot_add_file__44___get___34__user_error__34__/comment_4_1ba6d2614778949520b47896fd98b598._comment create mode 100644 doc/bugs/cannot_add_file__44___get___34__user_error__34__/comment_5_4a6e55861a63b350a02edb888b4da99b._comment create mode 100644 doc/bugs/cannot_connect_to_xmpp_server.mdwn create mode 100644 doc/bugs/cannot_connect_to_xmpp_server/comment_10_5072de8fcca9fe70bc235ea8c8ee2877._comment create mode 100644 doc/bugs/cannot_connect_to_xmpp_server/comment_11_dabd74bba1f38b326a2d0c86d3027cd9._comment create mode 100644 doc/bugs/cannot_connect_to_xmpp_server/comment_12_0245b426cc0ab64f8c167b8806b03f5d._comment create mode 100644 doc/bugs/cannot_connect_to_xmpp_server/comment_1_307df11b5bcf289d7999e1e7f7c461c9._comment create mode 100644 doc/bugs/cannot_connect_to_xmpp_server/comment_2_f24378cf30a7d32594da90749fabec3c._comment create mode 100644 doc/bugs/cannot_connect_to_xmpp_server/comment_3_4b07093be844ac62b611cee1dfde5aa7._comment create mode 100644 doc/bugs/cannot_connect_to_xmpp_server/comment_4_fe1ed152a485c4aebfa9b9f300101835._comment create mode 100644 doc/bugs/cannot_connect_to_xmpp_server/comment_5_2d311f520aee04287df6bddfd8535734._comment create mode 100644 doc/bugs/cannot_connect_to_xmpp_server/comment_6_d9f916f012184738446c5996ee9d2270._comment create mode 100644 doc/bugs/cannot_connect_to_xmpp_server/comment_7_0b5f9350e2367301241c7668a15815ef._comment create mode 100644 doc/bugs/cannot_connect_to_xmpp_server/comment_8_f00b6ae154004e405f0bd23b7359962e._comment create mode 100644 doc/bugs/cannot_connect_to_xmpp_server/comment_9_41b86468013da15f46be29da520afa10._comment create mode 100644 doc/bugs/cannot_determine_uuid_for_origin.mdwn create mode 100644 doc/bugs/cannot_link_executable_on_android.mdwn create mode 100644 doc/bugs/case-insensitive.mdwn create mode 100644 doc/bugs/case_sensitivity_on_FAT.mdwn create mode 100644 doc/bugs/check_for_curl_in_configure.hs.mdwn create mode 100644 doc/bugs/clicking_back_in_the_web_browser_crashes.mdwn create mode 100644 doc/bugs/clicking_back_in_the_web_browser_crashes/comment_1_c962218657a28494ff837a471d71b43f._comment create mode 100644 doc/bugs/clicking_back_in_the_web_browser_crashes/comment_2_643b2c99ecfe851c576a023ce4385dbb._comment create mode 100644 doc/bugs/clicking_back_in_the_web_browser_crashes/comment_3_6e85c50439da81212f4239c74947b75e._comment create mode 100644 doc/bugs/com.branchable.git-annex.assistant.plist_is_invalid.mdwn create mode 100644 doc/bugs/commitBuffer:_invalid_argument___40__invalid_character__41__.mdwn create mode 100644 doc/bugs/commit_f20a40f_breaks_on_OSX_as_mntent.h_doesn__39__t_exist.mdwn create mode 100644 doc/bugs/concurrent_git-annex_processes_can_lead_to_locking_issues.mdwn create mode 100644 doc/bugs/configurable_path_to_git-annex-shell.mdwn create mode 100644 doc/bugs/configurable_path_to_git-annex-shell/comment_1_fb6771f902b57f2b690e7cc46fdac47e._comment create mode 100644 doc/bugs/configurable_path_to_git-annex-shell/comment_2_2b856f4f0b65c2331be7d565f0e4e8a8._comment create mode 100644 doc/bugs/configurable_path_to_git-annex-shell/comment_3_aea42acc039a82efc6bb3a8f173a632e._comment create mode 100644 doc/bugs/configure_mistakes_hashalot_bins_for_sha__63____63____63__sum_and_builds_a_broken_git-annex_executable.mdwn create mode 100644 doc/bugs/configure_script_should_detect_uuidgen_instead_of_just_uuid.mdwn create mode 100644 doc/bugs/conflicting_haskell_packages.mdwn create mode 100644 doc/bugs/conflicting_haskell_packages/comment_1_e552a6cc6d7d1882e14130edfc2d6b3b._comment create mode 100644 doc/bugs/conq:_invalid_command_syntax.mdwn create mode 100644 doc/bugs/conq:_invalid_command_syntax/comment_1_f33b83025ce974e496f83f248275a66a._comment create mode 100644 doc/bugs/conq:_invalid_command_syntax/comment_2_195106ca8dedad5f4d755f625e38e8af._comment create mode 100644 doc/bugs/conq:_invalid_command_syntax/comment_3_55af43e2f43a4c373f7a0a33678d0b1c._comment create mode 100644 doc/bugs/copy_doesn__39__t_scale.mdwn create mode 100644 doc/bugs/copy_doesn__39__t_scale/comment_1_7c12499c9ac28a9883c029f8c659eb57._comment create mode 100644 doc/bugs/copy_doesn__39__t_scale/comment_2_f85d8023cdbc203bb439644cf7245d4e._comment create mode 100644 doc/bugs/copy_doesn__39__t_scale/comment_3_4592765c3d77bb5664b8d16867e9d79c._comment create mode 100644 doc/bugs/copy_fast_confusing_with_broken_locationlog.mdwn create mode 100644 doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_10_435f87d54052f264096a8f23e99eae06._comment create mode 100644 doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_11_9be0aef403a002c1706d17deee45763c._comment create mode 100644 doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_12_26d60661196f63fd01ee4fbb6e2340e7._comment create mode 100644 doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_13_ead55b915d3b92a62549b2957ad211c8._comment create mode 100644 doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_14_191de89d3988083d9cf001799818ff4a._comment create mode 100644 doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_15_b3e3b338ccfa0a32510c78ba1b1bb617._comment create mode 100644 doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_16_04a9f4468c3246c8eff3dbe21dd90101._comment create mode 100644 doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_1_6a41bf7e2db83db3a01722b516fb6886._comment create mode 100644 doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_2_9f5f1dbffb2dd24f4fcf8c2027bf0384._comment create mode 100644 doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_3_b596b5cfd3377e58dbbb5d509d026b90._comment create mode 100644 doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_4_d7112c315fb016a8a399e24e9b6461d8._comment create mode 100644 doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_5_4ea29a6f8152eddf806c536de33ef162._comment create mode 100644 doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_6_0d85f114a103bd6532a3b3b24466012e._comment create mode 100644 doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_7_d38d5bee6d360b0ea852f39e3a7b1bc6._comment create mode 100644 doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_8_29c3de4bf5fbd990b230c443c0303cbe._comment create mode 100644 doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_9_2cee4f6bd6db7518fd61453c595162c6._comment create mode 100644 doc/bugs/copy_to_webdav_sometimes_doesn__39__t_work.mdwn create mode 100644 doc/bugs/copy_to_webdav_sometimes_doesn__39__t_work/comment_1_77629f620b28ac62364de44b41fa539d._comment create mode 100644 doc/bugs/creating_a_plain_directory_where_a_mountpoint_should_have_been.mdwn create mode 100644 doc/bugs/creating_a_plain_directory_where_a_mountpoint_should_have_been/comment_1_41cfd5e48426a6ef52bef70a06a6f46a._comment create mode 100644 doc/bugs/creating_a_plain_directory_where_a_mountpoint_should_have_been/comment_2_bd584ccbe128427fca99e61d66d301c9._comment create mode 100644 doc/bugs/creating_a_plain_directory_where_a_mountpoint_should_have_been/comment_3_5bb0347215b321444643646f25a35759._comment create mode 100644 doc/bugs/creating_a_plain_directory_where_a_mountpoint_should_have_been/comment_4_73848a9c783ecf3d9fccdd41b20fbe36._comment create mode 100644 doc/bugs/creating_a_remote_server_repository.mdwn create mode 100644 doc/bugs/creating_a_remote_server_repository/comment_1_de1a370347428245bcfca60eaca96779._comment create mode 100644 doc/bugs/creds_directory_not_automatically_created.mdwn create mode 100644 doc/bugs/cross_platform_permissions_woes.mdwn create mode 100644 doc/bugs/cross_platform_permissions_woes/comment_1_7f01104de38a6a319a8f36aa1dc8b4b3._comment create mode 100644 doc/bugs/cross_platform_permissions_woes/comment_2_0a34e11b466fad287325425e76487fa1._comment create mode 100644 doc/bugs/cross_platform_permissions_woes/comment_3_278f91b4bc4c32717ab1c39c2abf9305._comment create mode 100644 doc/bugs/cross_platform_permissions_woes/comment_4_eb6a271cb63c71341469c9ff89dc0eb9._comment create mode 100644 doc/bugs/cyclic_drop.mdwn create mode 100644 doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos.mdwn create mode 100644 doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_1_294c33af08649256908a97894f93c05d._comment create mode 100644 doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_2_02a2b69adbb04b557146e713b70b34d2._comment create mode 100644 doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_3_d296ef26fc90f4e3166bba6d2de0a1ee._comment create mode 100644 doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_4_33ba2c890c962a71ae9fadc417359f8e._comment create mode 100644 doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_5_39eb0bb96fd271bd0de4a3a40814ae1b._comment create mode 100644 doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_6_d80c4b631bdf58901a06f29a2c5682e2._comment create mode 100644 doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_.mdwn create mode 100644 doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_/comment_1_eb6db7f6a156a065e2724c2de5fc4366._comment create mode 100644 doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_/comment_2_59a96cade9e4881767562a139fc7fb4b._comment create mode 100644 doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_/comment_3_bf9d2562d66f0f6a9478ac178606cf4e._comment create mode 100644 doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_/comment_4_ad0dbdc448fff2e126ffec9aac6d7463._comment create mode 100644 doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_/comment_5_e828585e56b10710598143483ce362b6._comment create mode 100644 doc/bugs/direct_mode_assistant_in_subdir_confusion.mdwn create mode 100644 doc/bugs/direct_mode_assistant_in_subdir_confusion/comment_1_351143deec29e712f8718a373ad650d7._comment create mode 100644 doc/bugs/direct_mode_renames.mdwn create mode 100644 doc/bugs/direct_mode_renames/comment_1_f18c335e0d6f4259d2470935ef391cb8._comment create mode 100644 doc/bugs/direct_mode_sync_should_avoid_git_commit.mdwn create mode 100644 doc/bugs/direct_repository_on_FAT32_fails_to_addurl_containing___63__.mdwn create mode 100644 doc/bugs/directory_remote_+_shared_encryption_+_chunk_size___61___lost_files__63__.mdwn create mode 100644 doc/bugs/directory_remote_+_shared_encryption_+_chunk_size___61___lost_files__63__/comment_1_69dfbf566c75396cdaaf5ad70f1a94a8._comment create mode 100644 doc/bugs/directory_remote_+_shared_encryption_+_chunk_size___61___lost_files__63__/comment_2_8d09cc0e06548c4ebde7956edd1b5d85._comment create mode 100644 doc/bugs/directory_remote_and_case_sensitivity_on_FAT/comment_1_bcac9fd7b3f4a2ac28bee59bae674fa0._comment create mode 100644 doc/bugs/directory_remote_and_case_sensitivity_on_FAT/comment_2_c9088060fb9133b66951f1a3075981e8._comment create mode 100644 doc/bugs/directory_remote_and_case_sensitivity_on_FAT/comment_3_5bf34466187cfc9b34bd3ca8c89a07c6._comment create mode 100644 doc/bugs/directory_remote_and_case_sensitivity_on_FAT/comment_4_d6201f2d86d5b44051a7fd7a8c9de583._comment create mode 100644 doc/bugs/directory_remote_and_case_sensitivity_on_FAT/comment_5_61c5f0889f30a68ac3b57c4ea564ee0e._comment create mode 100644 doc/bugs/done.mdwn create mode 100644 doc/bugs/dotdot_problem.mdwn create mode 100644 doc/bugs/drop_fails_to_see_copies_that_whereis_sees.mdwn create mode 100644 doc/bugs/drop_fails_to_see_copies_that_whereis_sees/comment_1_f5a9d99d90daf5eba4773d361fa1807a._comment create mode 100644 doc/bugs/drop_fails_to_see_copies_that_whereis_sees/comment_2_040aa454cd8acd2857ef36884465576f._comment create mode 100644 doc/bugs/drop_fails_to_see_copies_that_whereis_sees/comment_3_f5d8faab325ee26800ecad5aba49b54b._comment create mode 100644 doc/bugs/dropping_and_re-adding_from_web_remotes_doesn__39__t_work.mdwn create mode 100644 doc/bugs/dropping_files_with_a_URL_backend_fails.mdwn create mode 100644 doc/bugs/dropunused_doesn__39__t_handle_double_spaces_in_filename.mdwn create mode 100644 doc/bugs/dropunused_doesn__39__t_work_in_my_case__63__.mdwn create mode 100644 doc/bugs/encfs_accused_of_being_crippled.mdwn create mode 100644 doc/bugs/encfs_accused_of_being_crippled/comment_1_5c5be012e1171ef108f38825d72791b6._comment create mode 100644 doc/bugs/encrpyted_ssh_remote_on_macosx.mdwn create mode 100644 doc/bugs/encrpyted_ssh_remote_on_macosx/comment_1_46c37aacb7ae41864488fb7c7d87d437._comment create mode 100644 doc/bugs/encrypted_S3_stalls.mdwn create mode 100644 doc/bugs/encryption_given_a_gpg_keyid_still_uses_symmetric_encryption.mdwn create mode 100644 doc/bugs/encryption_given_a_gpg_keyid_still_uses_symmetric_encryption/comment_1_2f4ec4b7b92a0f0a0c4c0758da4a05a5._comment create mode 100644 doc/bugs/encryption_given_a_gpg_keyid_still_uses_symmetric_encryption/comment_2_7c0aeae6b1b2b0338735b0231c5db7d4._comment create mode 100644 doc/bugs/encryption_key_is_surprising.mdwn create mode 100644 doc/bugs/encryption_key_is_surprising/comment_1_5b172830ac31d51a1687bc8b1db489f9._comment create mode 100644 doc/bugs/encryption_key_is_surprising/comment_2_5b7e6bb36c3333dfd71808e8b4544746._comment create mode 100644 doc/bugs/encryption_key_is_surprising/comment_4_8ec86b8c35bce15337a143e275961cd5._comment create mode 100644 doc/bugs/encryption_key_is_surprising/comment_4_c5e49b3a0eceabe6d14f5226d7ba4c7a._comment create mode 100644 doc/bugs/encryption_key_is_surprising/comment_5_cd7cbf0c0ee9cafec344dfbf1acd9590._comment create mode 100644 doc/bugs/encryption_key_is_surprising/comment_6_01381524114d885961704acc3f172536._comment create mode 100644 doc/bugs/encryption_key_is_surprising/comment_7_c1eb59e1c5f583dcef7cea17623a2435._comment create mode 100644 doc/bugs/error_building_git-annex_3.20120624_using_cabal.mdwn create mode 100644 doc/bugs/error_on_only_repository_copy_deletion.mdwn create mode 100644 doc/bugs/error_on_only_repository_copy_deletion/comment_1_af394ac0956ab33a77256bcb02ef2a0f._comment create mode 100644 doc/bugs/error_propigation.mdwn create mode 100644 doc/bugs/error_when_using_repositories_with_non-ASCII_characters.mdwn create mode 100644 doc/bugs/error_when_using_repositories_with_non-ASCII_characters/comment_1_38cc2d2ed907649df085de8ad83cb9dd._comment create mode 100644 doc/bugs/error_with_file_names_starting_with_dash.mdwn create mode 100644 doc/bugs/extraneous_shell_escaping_for_rsync_remotes.mdwn create mode 100644 doc/bugs/fails_to_handle_lot_of_files.mdwn create mode 100644 doc/bugs/fails_to_handle_lot_of_files/comment_1_09d8e4e66d8273fab611bd29e82dc7fc._comment create mode 100644 doc/bugs/fails_to_handle_lot_of_files/comment_2_fd2ec05f4b5a7a6ae6bd9f5dbc3156de._comment create mode 100644 doc/bugs/failure_to_find_file_that___34__should__34___exist_in_remote_is_silent.mdwn create mode 100644 doc/bugs/failure_to_find_file_that___34__should__34___exist_in_remote_is_silent/comment_1_c686df2824d3f588c0bfb339c99168b7._comment create mode 100644 doc/bugs/failure_to_find_file_that___34__should__34___exist_in_remote_is_silent/comment_2_22edfac4ce25cd9f4e4c85e0a8a52bc1._comment create mode 100644 doc/bugs/failure_to_find_file_that___34__should__34___exist_in_remote_is_silent/comment_3_74fc0e41a6bd5c4d8c4b2f15e5ed8d2f._comment create mode 100644 doc/bugs/failure_to_find_file_that___34__should__34___exist_in_remote_is_silent/comment_4_7d642fc65040a7b583cdece33db01826._comment create mode 100644 doc/bugs/failure_to_find_file_that___34__should__34___exist_in_remote_is_silent/comment_5_49be366b6af6db595fa538373a61e650._comment create mode 100644 doc/bugs/failure_to_return_to_indirect_mode_on_usb.mdwn create mode 100644 doc/bugs/failure_to_return_to_indirect_mode_on_usb/comment_1_d7822b90c68bf845572b0a04a378d0bb._comment create mode 100644 doc/bugs/fat_support.mdwn create mode 100644 doc/bugs/fat_support/comment_1_04bcc4795d431e8cb32293aab29bbfe2._comment create mode 100644 doc/bugs/fat_support/comment_2_bb4a97ebadb5c53809fc78431eabd7c8._comment create mode 100644 doc/bugs/fat_support/comment_3_df3b943bc1081a8f3f7434ae0c8e061e._comment create mode 100644 doc/bugs/fat_support/comment_4_90a8a15bedd94480945a374f9d706b86._comment create mode 100644 doc/bugs/fat_support/comment_5_64bbf89de0836673224b83fdefa0407b._comment create mode 100644 doc/bugs/fat_support/comment_6_a3b6000330c9c376611c228d746a1d55._comment create mode 100644 doc/bugs/fat_support/comment_7_a0ac7f2c44efc8116940c7b94b35e9d0._comment create mode 100644 doc/bugs/fat_support/comment_8_acc947643a635eb10a1bff92083a3506._comment create mode 100644 doc/bugs/fatal:_empty_ident_name.mdwn create mode 100644 doc/bugs/fatal:_empty_ident_name/comment_1_ceae87308fb75a1f79c7c8d63ec47226._comment create mode 100644 doc/bugs/fatal:_empty_ident_name/comment_2_68832ee3e0e7244ce62bccabe2e52630._comment create mode 100644 doc/bugs/fatal:_empty_ident_name/comment_3_ed31ad316747343d7730e4c2d7dacd24._comment create mode 100644 doc/bugs/fatal:_empty_ident_name/comment_4_b812d6f30e8a866bce7260a9ee3218e3._comment create mode 100644 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 create mode 100644 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__/comment_1_e6f39b2ef55b0daa491f4b6329a906bc._comment create mode 100644 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__/comment_2_b47d6d188f38a8e4ca5ef5f70afadf6a._comment create mode 100644 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__/comment_4_b533b1de535a057b7ebf99afc92691ed._comment create mode 100644 doc/bugs/file_access__47__locking_issues_with_the_assitant.mdwn create mode 100644 doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_10_fadf06f5ab34e36ab130536ec55afc8e._comment create mode 100644 doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_11_4a337f7b1140c45e5dd660b40202f696._comment create mode 100644 doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_1_05e1398e78218ced9c2da6a2510949e8._comment create mode 100644 doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_2_9226f0adf091154c0d8a08b340b71869._comment create mode 100644 doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_3_44d3e2096b7d45a1062222bee83a346d._comment create mode 100644 doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_4_f2e1d188b7b2d2daf0d832c59a68583e._comment create mode 100644 doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_5_998fe58994ecf855310e4b8e6cce9e18._comment create mode 100644 doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_6_4ce243cb0ea8ff810a4949a5320e4afc._comment create mode 100644 doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_7_c713f6316d889c8fc52326f21375c1c4._comment create mode 100644 doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_8_6dd23bab7983b8b1f938dd4f21a16f5a._comment create mode 100644 doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_9_961c8f968eff0b39a85b607ee3f7630d._comment create mode 100644 doc/bugs/file_modification_times.mdwn create mode 100644 doc/bugs/fix_for_makefile_to_check_if_OS_is_linux_or_not___40__relates_to_the_new_inotify_flag__41__.mdwn create mode 100644 doc/bugs/free_space_checking.mdwn create mode 100644 doc/bugs/free_space_checking/comment_1_a868e805be43c5a7c19c41f1af8e41e6._comment create mode 100644 doc/bugs/free_space_checking/comment_2_8a65f6d3dcf5baa3f7f2dbe1346e2615._comment create mode 100644 doc/bugs/free_space_checking/comment_3_0fc6ff79a357b1619d13018ccacc7c10._comment create mode 100644 doc/bugs/fsck__47__fix_should_check__47__fix_the_permissions_of_.git__47__annex.mdwn create mode 100644 doc/bugs/fsck_claims_failed_checksum_when_less_copies_than_required_are_found.mdwn create mode 100644 doc/bugs/fsck_output.mdwn create mode 100644 doc/bugs/fsck_should_double-check_when_a_content-check_fails.mdwn create mode 100644 doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_1_03af24b70adbcd9f4b94d009f6b71d0a._comment create mode 100644 doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_2_41214a7d18c66b694645248d6ebeadbf._comment create mode 100644 doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_3_e7ddd77ea35994f2051f840e9b4c7e0c._comment create mode 100644 doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_4_36a70d5a378983a76fcdbb7fba044044._comment create mode 100644 doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_5_899c4afbc988d81984c5c3397285bb01._comment create mode 100644 doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_6_dbff51d00c5645eb1832aa4644889c5e._comment create mode 100644 doc/bugs/fsck_thinks_file_content_is_bad_when_it_isn__39__t.mdwn create mode 100644 doc/bugs/fsck_thinks_file_content_is_bad_when_it_isn__39__t/comment_1_cafb58eca97a0a66110ac39b169d8de3._comment create mode 100644 doc/bugs/gcrypt_initremote_pushes_git-annex_but_not_master.mdwn create mode 100644 doc/bugs/get_failed__44___but_remote_has_the_file.mdwn create mode 100644 doc/bugs/get_failed__44___but_remote_has_the_file/comment_1_55c8b73ce05dfca11a393bb296b99b9a._comment create mode 100644 doc/bugs/get_failed__44___but_remote_has_the_file/comment_2_474c67a421dca4c245e7bfe495d3f6d3._comment create mode 100644 doc/bugs/get_failed__44___but_remote_has_the_file/comment_3_845e8a23d63fb0b071c63ee736697d26._comment create mode 100644 doc/bugs/get_failed__44___but_remote_has_the_file/comment_4_7dec21cb67e7f4dbdb49da97f2443e8f._comment create mode 100644 doc/bugs/get_fails_for_file:__47____47___web_remotes_if_the_file_is_empty.mdwn create mode 100644 doc/bugs/get_from_bup-remote_with_pubkey_failing.mdwn create mode 100644 doc/bugs/git-annex-shell:_gcryptsetup_permission_denied.mdwn create mode 100644 doc/bugs/git-annex-shell:_gcryptsetup_permission_denied/comment_1_f4584158b35b80ece1060308883e2dc4._comment create mode 100644 doc/bugs/git-annex-shell:_gcryptsetup_permission_denied/comment_2_a4d7aae848340771a9b8e2c87abeea42._comment create mode 100644 doc/bugs/git-annex-shell:_gcryptsetup_permission_denied/comment_3_06bda101ad584b4b882de8b2e202d679._comment create mode 100644 doc/bugs/git-annex-shell:_gcryptsetup_permission_denied/comment_4_4fc6b25401b645cabc04b510bdfa6863._comment create mode 100644 doc/bugs/git-annex-shell:_gcryptsetup_permission_denied/comment_5_4e193306801680bba433e75eb4dcba05._comment create mode 100644 doc/bugs/git-annex-shell:_gcryptsetup_permission_denied/comment_6_76ccdf0542e76e4dbd61f3b3228d40ba._comment create mode 100644 doc/bugs/git-annex-shell:_gcryptsetup_permission_denied/comment_7_cd964d0a375c5cba299bf2bbbbb86acb._comment create mode 100644 doc/bugs/git-annex-shell:_gcryptsetup_permission_denied/comment_8_9bac87c85deb5bb15795df28533d0cde._comment create mode 100644 doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799.mdwn create mode 100644 doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799/comment_1_1c19e716069911f17bbebd196d9e4b61._comment create mode 100644 doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799/comment_2_a4d66f29d257044e548313e014ca3dc3._comment create mode 100644 doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799/comment_3_f5f1081eb18143383b2fb1f57d8640f5._comment create mode 100644 doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799/comment_4_b1f818b85c3540591c48e7ba8560d070._comment create mode 100644 doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799/comment_5_67406dd8d9bd4944202353508468c907._comment create mode 100644 doc/bugs/git-annex-shell:_user_error___40__unrecognized_option___96__--uuid__39__.mdwn create mode 100644 doc/bugs/git-annex-shell:_user_error___40__unrecognized_option___96__--uuid__39__/comment_1_13510e954e36484e196e7395a3a9bf1f._comment create mode 100644 doc/bugs/git-annex-shell:_user_error___40__unrecognized_option___96__--uuid__39__/comment_2_7edc478a76983a3b3c68d01f24dce613._comment create mode 100644 doc/bugs/git-annex-shell_doesn__39__t_honour_Rsync__39__s_bwlimit_option.mdwn create mode 100644 doc/bugs/git-annex-shell_doesn__39__t_honour_Rsync__39__s_bwlimit_option/comment_1_8cda861c11ef2fff3442e5a0df741939._comment create mode 100644 doc/bugs/git-annex-shell_doesn__39__t_honour_Rsync__39__s_bwlimit_option/comment_2_15e06f6db9a14a8217dea25e24ddc23a._comment create mode 100644 doc/bugs/git-annex-shell_doesn__39__t_honour_Rsync__39__s_bwlimit_option/comment_3_d36045e2b466882108c5bf09580755fa._comment create mode 100644 doc/bugs/git-annex:_Argument_list_too_long.mdwn create mode 100644 doc/bugs/git-annex:_Argument_list_too_long/comment_1_3f83ea525436b2379ab29a0f860c4669._comment create mode 100644 doc/bugs/git-annex:_Argument_list_too_long/comment_2_b417c94169378ef7d0d278ebae517fa1._comment create mode 100644 doc/bugs/git-annex:_Argument_list_too_long/comment_3_fa925cca216cb810ad80482b19fc6053._comment create mode 100644 doc/bugs/git-annex:_Argument_list_too_long/comment_4_8bd2996107b2d272c32810658e07e715._comment create mode 100644 doc/bugs/git-annex:_Argument_list_too_long/comment_5_378de7d7503a64611eab62f2f5cffef3._comment create mode 100644 doc/bugs/git-annex:_Argument_list_too_long/comment_6_a94e17151348d02999442dd1219babfb._comment create mode 100644 doc/bugs/git-annex:_Cannot_decode_byte___39____92__xfc__39__.mdwn create mode 100644 doc/bugs/git-annex:_Cannot_decode_byte___39____92__xfc__39__/comment_1_f1a7352b04f395e06e0094c1f51b6fff._comment create mode 100644 doc/bugs/git-annex:_Cannot_decode_byte___39____92__xfc__39__/comment_2_c1890067079cd99667f31cbb4d2e4545._comment create mode 100644 doc/bugs/git-annex:_Cannot_decode_byte___39____92__xfc__39__/comment_3_213c96085c60c8e52cd803df07240158._comment create mode 100644 doc/bugs/git-annex:_Not_in_a_git_repository._.mdwn create mode 100644 doc/bugs/git-annex:_Not_in_a_git_repository._/comment_1_e10363a912953a646b87c824d1c6e5d4._comment create mode 100644 doc/bugs/git-annex:_Not_in_a_git_repository._/comment_2_9e96063a664b2be8a36d7940e7632d3f._comment create mode 100644 doc/bugs/git-annex:_Not_in_a_git_repository._/comment_3_8c9bd76b0e1200723ec13fbef943a2cc._comment create mode 100644 doc/bugs/git-annex:_Not_in_a_git_repository._/comment_4_8c49979b8a815f0d6f9de39ee9a88730._comment create mode 100644 doc/bugs/git-annex:___60__socket:_16__62__:_hPutBuf:_resource_vanished___40__Broken_pipe__41__.mdwn create mode 100644 doc/bugs/git-annex:___60__socket:_16__62__:_hPutBuf:_resource_vanished___40__Broken_pipe__41__/comment_1_e962317a939bf76097ae1a3b53b146e6._comment create mode 100644 doc/bugs/git-annex:___60__socket:_16__62__:_hPutBuf:_resource_vanished___40__Broken_pipe__41__/comment_2_b32472b4c9b61e7a33dca802ecafb05b._comment create mode 100644 doc/bugs/git-annex:___60__socket:_16__62__:_hPutBuf:_resource_vanished___40__Broken_pipe__41__/comment_3_fcfea3216831df9afbd855fbd842c27e._comment create mode 100644 doc/bugs/git-annex:___60__socket:_16__62__:_hPutBuf:_resource_vanished___40__Broken_pipe__41__/comment_4_30d0b40efa59eeecb8a4be6d1baa1520._comment create mode 100644 doc/bugs/git-annex:___60__socket:_16__62__:_hPutBuf:_resource_vanished___40__Broken_pipe__41__/comment_5_4af107f3184bc2abd2c9693167018628._comment create mode 100644 doc/bugs/git-annex:___60__socket:_16__62__:_hPutBuf:_resource_vanished___40__Broken_pipe__41__/comment_6_f96027f1e3c405809fae42ce8533c6d1._comment create mode 100644 doc/bugs/git-annex:___60__socket:_16__62__:_hPutBuf:_resource_vanished___40__Broken_pipe__41__/comment_7_b6fe89deb468a7e4f63f7faab147e3fb._comment create mode 100644 doc/bugs/git-annex:___60__socket:_16__62__:_hPutBuf:_resource_vanished___40__Broken_pipe__41__/comment_8_ebec5d9266604f03959dc16d933ff4a4._comment create mode 100644 doc/bugs/git-annex:_fd:14:_hGetLine:_end_of_file.mdwn create mode 100644 doc/bugs/git-annex:_fd:14:_hGetLine:_end_of_file/comment_1_36756f5d9d591cc52113c5cc0c1eae91._comment create mode 100644 doc/bugs/git-annex:_getUserEntryForID:_failed___40__Success__41__.mdwn create mode 100644 doc/bugs/git-annex:_getUserEntryForID:_failed___40__Success__41__/comment_1_11a1615962325327466895d03e3d2379._comment create mode 100644 doc/bugs/git-annex:_getUserEntryForID:_failed___40__Success__41__/comment_2_eac51c3299e9fc04025675360969d537._comment create mode 100644 doc/bugs/git-annex:_getUserEntryForID:_failed___40__Success__41__/comment_3_c23dc02c7487d63b0905f1b7f3ca59f5._comment create mode 100644 doc/bugs/git-annex:_getUserEntryForID:_failed___40__Success__41__/comment_4_0e8b28de5c173bc60ecc0126fb2209ca._comment create mode 100644 doc/bugs/git-annex:_status:_1_failed.mdwn create mode 100644 doc/bugs/git-annex:_status:_1_failed/comment_10_7cd9de88e55633fc75460f4fe0400f09._comment create mode 100644 doc/bugs/git-annex:_status:_1_failed/comment_11_504a944aab34155046f2fd82c2878f3e._comment create mode 100644 doc/bugs/git-annex:_status:_1_failed/comment_1_c235cc83c75474e6393e08d2d94b119d._comment create mode 100644 doc/bugs/git-annex:_status:_1_failed/comment_2_932f6aaa712298a47868002872e16310._comment create mode 100644 doc/bugs/git-annex:_status:_1_failed/comment_3_4bf55320439de152a65e2f21d4a0604b._comment create mode 100644 doc/bugs/git-annex:_status:_1_failed/comment_4_cb2cfb798c6171f77eb7c4c4061c0f0c._comment create mode 100644 doc/bugs/git-annex:_status:_1_failed/comment_5_05c84dde377298adfd3fc20749b3108f._comment create mode 100644 doc/bugs/git-annex:_status:_1_failed/comment_6_bb5141e29c665bc0bb82611ea27d4be8._comment create mode 100644 doc/bugs/git-annex:_status:_1_failed/comment_7_5fd39168c9e1bf43909ee0ab3c75c40c._comment create mode 100644 doc/bugs/git-annex:_status:_1_failed/comment_8_e493f6bddb0bfcd9478d5f4d9fc170e0._comment create mode 100644 doc/bugs/git-annex:_status:_1_failed/comment_9_573377d444aee0895b231082bc6839a4._comment create mode 100644 doc/bugs/git-annex_3.20130216.1_tests_are_broken.mdwn create mode 100644 doc/bugs/git-annex___38___rsync_can__39__t_copy_files_with___39__:__39___in_their_names.mdwn create mode 100644 doc/bugs/git-annex_add_should_repack_as_it_goes.mdwn create mode 100644 doc/bugs/git-annex_add_should_repack_as_it_goes/comment_1_dbcaa0be4cd764128fb7263a95f73a32._comment create mode 100644 doc/bugs/git-annex_add_should_repack_as_it_goes/comment_2_6a27551c4fb7f62ed9f627134c755d01._comment create mode 100644 doc/bugs/git-annex_add_should_repack_as_it_goes/comment_3_ff8b589fbcf25c98abd1c58830074650._comment create mode 100644 doc/bugs/git-annex_branch_corruption.mdwn create mode 100644 doc/bugs/git-annex_branch_push_race.mdwn create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3.mdwn create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_10_e47c073f1614f7b57f86acedeeb1cadc._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_11_ce34578c45060b7c8b759efd1c1d8df8._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_12_75965395dc33046ce34ac5ba972b7d64._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_13_f07bc76dd3c5580fc0855a33ae835c8d._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_14_637c59becc68a1e4f60069d8873489ff._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_15_d80b87055f72873f5678a01d2630bea4._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_16_57ac84868b223b30f005704eefa01b8d._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_17_a41f4d8a72c07ad770e6479e9b8c7f1d._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_18_7d36637f11cda51de395303d5c1c6a3f._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_19_c8609c3f7f62ae5427fd8c60bc9546ed._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_1_0ffb3833ce2c2e0320468dc9a09866d7._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_20_0886bca6d0c6a9415a7794d256be2e9d._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_21_2b39729f95c9c4bba620ecdd3d1558ed._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_22_8d90d92951919aa70638b31e9248bec5._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_23_6398271f5cd9e94996202ef3bce6f6ed._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_24_c9e399833cc6235077161f490dfa866f._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_25_cf093737eefb2b99f6f0eac9bf3e74b3._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_26_c122ce53175fc9e0e114a8acd2385c0d._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_27_237e41e61781bb058f5fd39362a904e4._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_28_97f423a41ee9d2d74291594fae20dd4e._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_29_7b3fbe7e38f637fcea511441ac243d93._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_2_53e2d095b2501844cadec910de286814._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_30_26c04584c3c6dacf59e1b6c82042c97c._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_3_ddc9cbae1a721400a9acf2153e18f4f0._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_4_593235735e32238094121b1f79355bbd._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_5_f806fd5930e90920db24456297465bae._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_6_5741b6a5997328fdcd5cc99f841b18d3._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_7_3e0d9949dd810069af0b8076807e5924._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_8_f58897eff6b4693f0c73474ccfe6e733._comment create mode 100644 doc/bugs/git-annex_broken_on_Android_4.3/comment_9_ddba87b2f20d8a63f7b8ebdb9bd13515._comment create mode 100644 doc/bugs/git-annex_direct_fails_on_repositories_with_a_partial_set_of_files.mdwn create mode 100644 doc/bugs/git-annex_directory_hashing_problems_on_osx.mdwn create mode 100644 doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_10_f3594de3ba2ab17771a4b116031511bb._comment create mode 100644 doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_11_97de7252bf5d2a4f1381f4b2b4e24ef8._comment create mode 100644 doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_12_f1c53c3058a587185e7a78d84987539d._comment create mode 100644 doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_13_4f56aea35effe5c10ef37d7ad7adb48c._comment create mode 100644 doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_14_cc2a53c31332fe4b828ef1e72c2a4d49._comment create mode 100644 doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_15_37f1d669c1fa53ee371f781c7bb820ae._comment create mode 100644 doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_16_8a4ab1af59098f4950726cf53636c2b3._comment create mode 100644 doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_17_515d5c5fbf5bd0c188a4f1e936d913e2._comment create mode 100644 doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_18_db64c91dd1322a0ab168190686db494f._comment create mode 100644 doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_19_ff555c271637af065203ca99c9eeaf89._comment create mode 100644 doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_1_9a7b09de132097100c1a68ea7b846727._comment create mode 100644 doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_20_7e328b970169fffb8bce373d1522743b._comment create mode 100644 doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_21_98f632652b0db9131b0173d3572f4d62._comment create mode 100644 doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_22_52d41afd7fd0b71a4c8e84ab1b4df5bd._comment create mode 100644 doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_23_c2cd8a69c37539c0511bae02016180ca._comment create mode 100644 doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_2_174952fc3e3be12912e5fcfe78f2dd13._comment create mode 100644 doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_3_a18ada7ac74c63be5753fdb2fe68dae5._comment create mode 100644 doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_4_039e945617a6c1852c96974a402db29c._comment create mode 100644 doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_5_eacd0b18475c05ab9feed8cf7290b79a._comment create mode 100644 doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_6_e55117cb628dc532e468519252571474._comment create mode 100644 doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_7_0f4f471102e394ebb01da40e4d0fd9f6._comment create mode 100644 doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_8_68e2d6ccdb9622b879e4bc7005804623._comment create mode 100644 doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_9_45b11ddd200261115b653c7a14d28aa9._comment create mode 100644 doc/bugs/git-annex_does_not_install_on_windows_without_admin_rights.mdwn create mode 100644 doc/bugs/git-annex_does_not_install_on_windows_without_admin_rights/comment_1_2533800ab5a95c5d71c3b47a630e751a._comment create mode 100644 doc/bugs/git-annex_does_not_install_on_windows_without_admin_rights/comment_2_5b71785acf16a8d9ea457726599daef3._comment create mode 100644 doc/bugs/git-annex_doesn__39__t_list_files_containing_ISO8859-15_characters.mdwn create mode 100644 doc/bugs/git-annex_doesn__39__t_list_files_containing_ISO8859-15_characters/comment_1_b84e831298c03b12471fb75da597e365._comment create mode 100644 doc/bugs/git-annex_dropunused_has_no_effect.mdwn create mode 100644 doc/bugs/git-annex_dropunused_has_no_effect/comment_1_66b581eb7111a9e98c6406ec75b899cf._comment create mode 100644 doc/bugs/git-annex_dropunused_has_no_effect/comment_2_11c46cd2087511c3d22b7ce7c149b3e9._comment create mode 100644 doc/bugs/git-annex_dropunused_has_no_effect/comment_3_b1c3d8c6ec4b20727aaa9c4b746531b0._comment create mode 100644 doc/bugs/git-annex_dropunused_has_no_effect/comment_4_f05a9a3760858c5ee5c98dd8ab059c28._comment create mode 100644 doc/bugs/git-annex_fix_not_noticing_file_renames.mdwn create mode 100644 doc/bugs/git-annex_fix_not_noticing_file_renames/comment_1_4edd95200d59ec5a5426167b8da8e3f9._comment create mode 100644 doc/bugs/git-annex_fix_not_noticing_file_renames/comment_2_a9a44debefb3bdd4b8ed2d1cf53f2338._comment create mode 100644 doc/bugs/git-annex_fix_not_noticing_file_renames/comment_3_0efb11f35b872b75a3fbc4ebb71ac827._comment create mode 100644 doc/bugs/git-annex_get:_requested_key_is_not_present.mdwn create mode 100644 doc/bugs/git-annex_get:_requested_key_is_not_present/comment_1_d4baa6607a61d0e6a7cea1325a5ddf95._comment create mode 100644 doc/bugs/git-annex_get:_requested_key_is_not_present/comment_2_b49725488c3db5e00ede7b65ed9d62fa._comment create mode 100644 doc/bugs/git-annex_get:_requested_key_is_not_present/comment_3_c17a7138579b93c6f14e3444c11664ac._comment create mode 100644 doc/bugs/git-annex_happily_deleted_most_of_my_files___36____35____38____33__.mdwn create mode 100644 doc/bugs/git-annex_happily_deleted_most_of_my_files___36____35____38____33__/comment_1_5dd4d1cec069c13184f5dd9efca6721b._comment create mode 100644 doc/bugs/git-annex_happily_deleted_most_of_my_files___36____35____38____33__/comment_2_d9b65fe4cb4bfd58f37e7da5350c6401._comment create mode 100644 doc/bugs/git-annex_happily_deleted_most_of_my_files___36____35____38____33__/comment_3_1027187b203addd65af8cf1faf28727d._comment create mode 100644 doc/bugs/git-annex_happily_deleted_most_of_my_files___36____35____38____33__/comment_4_ac65028203ff0cbdb978200235fb4e9c._comment create mode 100644 doc/bugs/git-annex_has_issues_with_git_when_staging__47__commiting_logs.mdwn create mode 100644 doc/bugs/git-annex_immediately_re-gets_dropped_files.mdwn create mode 100644 doc/bugs/git-annex_immediately_re-gets_dropped_files/comment_1_09e616a4866e726a48be4febe6375cc8._comment create mode 100644 doc/bugs/git-annex_incorrectly_parses_bare_IPv6_addresses.mdwn create mode 100644 doc/bugs/git-annex_losing_rsync_remotes_with_encryption_enabled.mdwn create mode 100644 doc/bugs/git-annex_merge_stalls.mdwn create mode 100644 doc/bugs/git-annex_merge_stalls/comment_1_31578a754945bdcb902c62ff58704bcb._comment create mode 100644 doc/bugs/git-annex_merge_stalls/comment_2_f3b6bf180466b5931bfd20b2f0229422._comment create mode 100644 doc/bugs/git-annex_merge_stalls/comment_3_ced9b0d724fb55c756106b64c3721003._comment create mode 100644 doc/bugs/git-annex_on_crippled_filesystem_can_still_failed_due_to_case_.mdwn create mode 100644 doc/bugs/git-annex_on_crippled_filesystem_can_still_failed_due_to_case_/comment_1_850695231926dfe94f11342d3af7f63c._comment create mode 100644 doc/bugs/git-annex_on_crippled_filesystem_can_still_failed_due_to_case_/comment_2_c2a2f801a3e18ad597ff0acf2f104557._comment create mode 100644 doc/bugs/git-annex_opens_too_many_files.mdwn create mode 100644 doc/bugs/git-annex_opens_too_many_files/comment_1_37f6f5838c41c533df4be1f927b9b03d._comment create mode 100644 doc/bugs/git-annex_opens_too_many_files/comment_2_347ef233b9845b84d7c4d49ed166e797._comment create mode 100644 doc/bugs/git-annex_opens_too_many_files/comment_3_d5f644d97cd2db471deb5dcd728cae60._comment create mode 100644 doc/bugs/git-annex_opens_too_many_files/comment_4_c03bde64be8fdd962826bc7afa07d2a9._comment create mode 100644 doc/bugs/git-annex_opens_too_many_files/comment_5_33a2e783e5355e981497b9861997570b._comment create mode 100644 doc/bugs/git-annex_opens_too_many_files/comment_6_b3a5a4e4ca29c5cd2840bfeb4c63ea68._comment create mode 100644 doc/bugs/git-annex_quit_unexpectedly___40__macosx__41__.mdwn create mode 100644 doc/bugs/git-annex_quit_unexpectedly___40__macosx__41__/comment_1_97abb8442329d19c9687002f43afac74._comment create mode 100644 doc/bugs/git-annex_quit_unexpectedly___40__macosx__41__/comment_2_3405f3cd699860ee239cf23ade19e92c._comment create mode 100644 doc/bugs/git-annex_sync_broken_on_squeeze_backports.mdwn create mode 100644 doc/bugs/git-annex_sync_may_fail_when_the_directory_I__39__m_in_disepeared.mdwn create mode 100644 doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not.mdwn create mode 100644 doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_1_6722fd627ec4add9f2b16546bd8ef341._comment create mode 100644 doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_2_508e475f764e1cb453b756eb50bc3a15._comment create mode 100644 doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_3_1656ba18c519a262c57ef626a3449e77._comment create mode 100644 doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_4_347dc3b6e5bc6c4195ec09d54bc1398e._comment create mode 100644 doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_5_a9c93bfc3278ef8b1117eac2af859bc3._comment create mode 100644 doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_6_804dd62beef64f7d4e203bdb28cbe660._comment create mode 100644 doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_7_4ef107d70647780eb5347cae6f467fed._comment create mode 100644 doc/bugs/git-annex_webapp_command_not_found.mdwn create mode 100644 doc/bugs/git-annex_webapp_command_not_found/comment_1_6fa63ae1a7affb2351eda57ab3b4eda1._comment create mode 100644 doc/bugs/git-annex_webapp_command_not_found/comment_2_d25232bb5eaff725281869d7681e81ad._comment create mode 100644 doc/bugs/git_annex_add_..._adds_too_much.mdwn create mode 100644 doc/bugs/git_annex_add_eats_files_when_filename_is_too_long.mdwn create mode 100644 doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_1_9650284913bec2a00cf551b90ab5d8ff._comment create mode 100644 doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_2_c6c8d2a1f444d85c582bc5396b08e148._comment create mode 100644 doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_3_5776864d78d56849001dd12e3adb9cbe._comment create mode 100644 doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_4_371ec7b4ae73280ede31edfe90b42a95._comment create mode 100644 doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_5_4fb04f646de591640f8504c0caf61acd._comment create mode 100644 doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_6_b4055409fe48da95bb3101c0242ef0bc._comment create mode 100644 doc/bugs/git_annex_add_error_with_Andrew_File_System.mdwn create mode 100644 doc/bugs/git_annex_add_error_with_Andrew_File_System/comment_1_bc783e551fc0e8da87bc95bff5b8f73a._comment create mode 100644 doc/bugs/git_annex_add_error_with_Andrew_File_System/comment_2_faefcf69bd61c47566131cb31b78cc19._comment create mode 100644 doc/bugs/git_annex_add_error_with_Andrew_File_System/comment_3_d5014c8b78437b9fddbb1e83d3679081._comment create mode 100644 doc/bugs/git_annex_add_memory_leak.mdwn create mode 100644 doc/bugs/git_annex_add_removes_file_with_no_data_left.mdwn create mode 100644 doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_10_9cc749a6efd4359a99316036f5bc867f._comment create mode 100644 doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_11_1fed5be9db29866e4dc3d3bb12907bf3._comment create mode 100644 doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_12_06d517ac4ef8def4629a40d7c3549bac._comment create mode 100644 doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_1_8f081aeba7065d143a453dc128543f59._comment create mode 100644 doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_2_54a4b10723fd8a80dd486377ff15ce0d._comment create mode 100644 doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_3_f1964e4e07991a251c2795da0361a4e2._comment create mode 100644 doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_4_73c38d843c30f00f6fd8883db8e55f62._comment create mode 100644 doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_5_7ede5ee312f3abdf78979c0d52a7871a._comment create mode 100644 doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_6_e37cf18708f09619442c3a9532d12ed9._comment create mode 100644 doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_7_a744ef7dd3a224a911ebb24858bc2fd6._comment create mode 100644 doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_8_f97141b255073b90120895148220c2d7._comment create mode 100644 doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_9_dd2be11dfd190129d491f5f891e7cd1a._comment create mode 100644 doc/bugs/git_annex_assistant_--autostart_failed.mdwn create mode 100644 doc/bugs/git_annex_assistant_--autostart_failed/comment_1_746545273b53849c42ff6272324e5155._comment create mode 100644 doc/bugs/git_annex_assistant_--autostart_failed/comment_2_5bdf6f94da12e551ae12e7f550a84d62._comment create mode 100644 doc/bugs/git_annex_assistant_--autostart_failed/comment_3_bfd646f69946a5fe926b270cf94f87cb._comment create mode 100644 doc/bugs/git_annex_content_fails_with_a_parse_error.txt create mode 100644 doc/bugs/git_annex_content_fails_with_a_parse_error/comment_1_2b60b6ae0115de13ecf837b34dadcd1d._comment create mode 100644 doc/bugs/git_annex_copy_--fast_does_not_copy_files.mdwn create mode 100644 doc/bugs/git_annex_copy_-f_REMOTE_._doesn__39__t_work_as_expected.mdwn create mode 100644 doc/bugs/git_annex_copy_trying_to_connect_to_remotes_uninvolved.mdwn create mode 100644 doc/bugs/git_annex_copy_trying_to_connect_to_remotes_uninvolved/comment_1_f1330935a07460c9c8bc82ee8d4709c5._comment create mode 100644 doc/bugs/git_annex_dead_does_not_work_as_expected_when_multiple_repos_exist_with_the_same_name___40__notably_including_dead_ones__41__.mdwn create mode 100644 doc/bugs/git_annex_dead_does_not_work_as_expected_when_multiple_repos_exist_with_the_same_name___40__notably_including_dead_ones__41__/comment_1_7ee08a60e4b2516c010d3c2163049681._comment create mode 100644 doc/bugs/git_annex_dead_does_not_work_as_expected_when_multiple_repos_exist_with_the_same_name___40__notably_including_dead_ones__41__/comment_2_c29525bfda08717f68aaac83014e6b08._comment create mode 100644 doc/bugs/git_annex_describe_can_break_uuid.log.mdwn create mode 100644 doc/bugs/git_annex_describe_can_break_uuid.log/comment_2_9ead36f13cbde6c822b231441de636ae._comment create mode 100644 doc/bugs/git_annex_does_nothing_useful.mdwn create mode 100644 doc/bugs/git_annex_does_nothing_useful/comment_10_457354dc0018333002dc5049935c0feb._comment create mode 100644 doc/bugs/git_annex_does_nothing_useful/comment_11_8a6d244165dd238ddf9dd629795de2f6._comment create mode 100644 doc/bugs/git_annex_does_nothing_useful/comment_12_30d06bc0f1c37d988a1a31962b57533c._comment create mode 100644 doc/bugs/git_annex_does_nothing_useful/comment_1_fc4f51ddcbc69631e2835b86c3489c8e._comment create mode 100644 doc/bugs/git_annex_does_nothing_useful/comment_2_9bb1647e6c59f1ed7b13b81ecc33f920._comment create mode 100644 doc/bugs/git_annex_does_nothing_useful/comment_3_d434f5c614a27b75d73530b5b918b851._comment create mode 100644 doc/bugs/git_annex_does_nothing_useful/comment_4_998e33219d29ea41b0b2a5d2955a9862._comment create mode 100644 doc/bugs/git_annex_does_nothing_useful/comment_5_c72e2571e5b8c06bbfa2276a7ad1e8a6._comment create mode 100644 doc/bugs/git_annex_does_nothing_useful/comment_6_bc8b42432ba25de8f972c192bc3cdff6._comment create mode 100644 doc/bugs/git_annex_does_nothing_useful/comment_7_e7469a4c5e45078ade775f5cbdd17cfc._comment create mode 100644 doc/bugs/git_annex_does_nothing_useful/comment_8_bc9e6fd284440a59ffe4e4ed1f73f7d7._comment create mode 100644 doc/bugs/git_annex_does_nothing_useful/comment_9_38a2dbeee3750d79ca9a943a02fceb29._comment create mode 100644 doc/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9.mdwn create mode 100644 doc/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9/comment_10_141819a6b67de2602673698f6f148106._comment create mode 100644 doc/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9/comment_11_8be96359fd2bd33ed2961e499dc2685e._comment create mode 100644 doc/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9/comment_12_26950a37e86d4dd83dd59fb2564d0a2e._comment create mode 100644 doc/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9/comment_13_cbf8150dbe0da64bde7f6af8e041eda8._comment create mode 100644 doc/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9/comment_14_0c203f90d911cf6869894dae89575a49._comment create mode 100644 doc/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9/comment_15_68cbb7268bdad73357da2d11e05d73c4._comment create mode 100644 doc/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9/comment_16_816d552f871a1b06306f04d575adb2e5._comment create mode 100644 doc/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9/comment_17_7905b097a9c582452fb04cdc88ed4285._comment create mode 100644 doc/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9/comment_18_bd5ac9bb2eaab66af6aa13b39172b49d._comment create mode 100644 doc/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9/comment_19_9881db7bb6fef4e47c54cdc23e995f17._comment create mode 100644 doc/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9/comment_1_4fb9d3de245dddab65fb1a53a67a095c._comment create mode 100644 doc/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9/comment_20_41e2ea458669f59f96b5860825745910._comment create mode 100644 doc/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9/comment_21_515039e321e0595f95430d8082bd54a5._comment create mode 100644 doc/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9/comment_22_9412236296871c570c66f5b4c7f9681e._comment create mode 100644 doc/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9/comment_23_e4e7d13be6c0bc63f426e535de6172f8._comment create mode 100644 doc/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9/comment_24_c73e1277c5f284b1019362fb2bef94a8._comment create mode 100644 doc/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9/comment_2_f513259a2641e00b049203014ab940c8._comment create mode 100644 doc/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9/comment_3_54ee7b90467fee8b0457e9c447747500._comment create mode 100644 doc/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9/comment_4_7e6223c2dae3346e17276c7bbb01d53e._comment create mode 100644 doc/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9/comment_5_13b6e595d595da7f036e81258a65541e._comment create mode 100644 doc/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9/comment_6_94144c0cbdbccc72c13e12daf7657a29._comment create mode 100644 doc/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9/comment_7_9eb064ffdc3fdb70e85572185e151a3f._comment create mode 100644 doc/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9/comment_8_cde756e8a9b18fe2ca9cda25967bc7fb._comment create mode 100644 doc/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9/comment_9_1fd6a4374a334bc03914c3e0df95ef95._comment create mode 100644 doc/bugs/git_annex_fork_bombs_on_gpg_file.mdwn create mode 100644 doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_10_6e29b60cd77f3288e33ad270f95f410e._comment create mode 100644 doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_11_ad13e3221ae06086e86800316912d951._comment create mode 100644 doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_12_41746b731eae7f280bb668c776022bcb._comment create mode 100644 doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_13_56ca8590110abffeed6d826c54ca1136._comment create mode 100644 doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_1_73ae438a37e4c5f56fe291448e1c64dd._comment create mode 100644 doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_2_aa237adebe7674b8cdb9a967bb5f96a8._comment create mode 100644 doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_3_ab403d7abbbbabd498b954b0b9742755._comment create mode 100644 doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_4_a35d04440b1220faf9088107c3f17762._comment create mode 100644 doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_5_8345331b9b313769ba401da2ffd89332._comment create mode 100644 doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_6_7eb535ca38b3e84d44d0f8cbf5e61b8b._comment create mode 100644 doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_7_a3aa4231a82917c56cbdf52b65db7133._comment create mode 100644 doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_8_178fd4e4d6abbca192fcd6d592615fca._comment create mode 100644 doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_9_7d80f131f43312bb061df2be7fa956ef._comment create mode 100644 doc/bugs/git_annex_fsck_in_direct_mode_does_not_checksum_files.mdwn create mode 100644 doc/bugs/git_annex_fsck_in_direct_mode_does_not_checksum_files/comment_1_a6cde4aa495512344fa7f50e10749c68._comment create mode 100644 doc/bugs/git_annex_fsck_in_direct_mode_does_not_checksum_files/comment_2_4ac3b87ec0bc0514c4eff9f5a75b9f5d._comment create mode 100644 doc/bugs/git_annex_fsck_in_direct_mode_does_not_checksum_files/comment_3_d18b1fdc866edf2786d2c6b7ec55119f._comment create mode 100644 doc/bugs/git_annex_fsck_in_direct_mode_does_not_checksum_files/comment_4_31e4fcbf63c11cc374a849daf3ce1dbc._comment create mode 100644 doc/bugs/git_annex_fsck_is_a_no-op_in_bare_repos.mdwn create mode 100644 doc/bugs/git_annex_fsck_is_a_no-op_in_bare_repos/comment_1_fc59fbd1cdf8ca97b0a4471d9914aaa1._comment create mode 100644 doc/bugs/git_annex_fsck_is_a_no-op_in_bare_repos/comment_2_273a45e6977d40d39e0d9ab924a83240._comment create mode 100644 doc/bugs/git_annex_get_choke_when_remote_is_an_ssh_url_with_a_port.mdwn create mode 100644 doc/bugs/git_annex_gets_confused_about_remotes_with_dots_in_their_names.mdwn create mode 100644 doc/bugs/git_annex_import_destroys_a_fellow_git_annex_repository.mdwn create mode 100644 doc/bugs/git_annex_importfeed_fails.mdwn create mode 100644 doc/bugs/git_annex_indirect_can_fail_catastrophically.mdwn create mode 100644 doc/bugs/git_annex_indirect_can_fail_catastrophically/comment_1_0b085e7e8c8e364f479574bc00c7c394._comment create mode 100644 doc/bugs/git_annex_initremote_needs_some___34__error_checking__34__.mdwn create mode 100644 doc/bugs/git_annex_initremote_walks_.git-annex.mdwn create mode 100644 doc/bugs/git_annex_map_has_problems_with_urls_containing___126__.mdwn create mode 100644 doc/bugs/git_annex_migrate_leaves_old_backend_versions_around.mdwn create mode 100644 doc/bugs/git_annex_migrate_leaves_old_backend_versions_around/comment_1_f3e418144e5a5a9b3eda459546fc2bb0._comment create mode 100644 doc/bugs/git_annex_should_use___39__git_add_-f__39___internally.mdwn create mode 100644 doc/bugs/git_annex_should_use___39__git_add_-f__39___internally/comment_1_7683bf02cf9e97830fb4690314501568._comment create mode 100644 doc/bugs/git_annex_sync_in_direct_mode_does_not_honor_skip-worktree.mdwn create mode 100644 doc/bugs/git_annex_sync_in_direct_mode_does_not_honor_skip-worktree/comment_1_69baeb997086c885f34fd1dc385cf5d6._comment create mode 100644 doc/bugs/git_annex_sync_in_direct_mode_does_not_honor_skip-worktree/comment_2_fb8c0bebb9aaa75ee7eaf6999b1db49e._comment create mode 100644 doc/bugs/git_annex_sync_in_direct_mode_does_not_honor_skip-worktree/comment_3_6bfd4e9a7853af93e72b717249de9439._comment create mode 100644 doc/bugs/git_annex_uninit_loses_content_when_interrupted.mdwn create mode 100644 doc/bugs/git_annex_uninit_loses_content_when_interrupted/comment_1_fd9d2abbc90fb4f470b2212bc1f4a2dd._comment create mode 100644 doc/bugs/git_annex_uninit_loses_content_when_interrupted/comment_2_0e99f6ef4f8b342ef0ebc64dbf8e2ce6._comment create mode 100644 doc/bugs/git_annex_uninit_removes_files_not_previously_added_to_annex.mdwn create mode 100644 doc/bugs/git_annex_uninit_removes_files_not_previously_added_to_annex/comment_1_ce4e3b1bf0d53119d049cf7dd621c5c4._comment create mode 100644 doc/bugs/git_annex_uninit_removes_files_not_previously_added_to_annex/comment_2_3aa125635609fce41ab0c98cefb81f98._comment create mode 100644 doc/bugs/git_annex_unlock_is_not_atomic.mdwn create mode 100644 doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems.mdwn create mode 100644 doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_1_8ba4fdb9f2d3bd44db5e910526cb9124._comment create mode 100644 doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_2_2a4a2b3e287a0444a1c8e8d98768a206._comment create mode 100644 doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_3_dacfdb8322045fc4ceefc9128bf7c505._comment create mode 100644 doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_4_7889a3ff5ce80c6322448aa674df8525._comment create mode 100644 doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_5_6d28c2537ce24eeb3496ca349823defd._comment create mode 100644 doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_6_4bf14ecef622988e80976c0fb55c24b9._comment create mode 100644 doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_7_d2e5382fe0f38fb9dd9ee69901c68151._comment create mode 100644 doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_8_b282757537cda863d3dc6d0bbfd6b656._comment create mode 100644 doc/bugs/git_annex_unused_considers_remote_branches_which_makes_it_inconsistent.mdwn create mode 100644 doc/bugs/git_annex_unused_considers_remote_branches_which_makes_it_inconsistent/comment_1_a636ffe55b11c46a0afcc0b9a3a88cd4._comment create mode 100644 doc/bugs/git_annex_unused_considers_remote_branches_which_makes_it_inconsistent/comment_2_5e1ad57420efd16ae09c9e5cad55b5f2._comment create mode 100644 doc/bugs/git_annex_unused_failes_on_empty_repository.mdwn create mode 100644 doc/bugs/git_annex_unused_seems_to_check_for_current_path.mdwn create mode 100644 doc/bugs/git_annex_upgrade_loses_track_of_files_with___34____38____34___character___40__and_probably_others__41__.mdwn create mode 100644 doc/bugs/git_annex_upgrade_loses_track_of_files_with___34____38____34___character___40__and_probably_others__41__/comment_1_861506e40e0d04d2be98bbfe9188be89._comment create mode 100644 doc/bugs/git_annex_upgrade_output_is_inconsistent_and_spammy.mdwn create mode 100644 doc/bugs/git_annex_upgrade_output_is_inconsistent_and_spammy/comment_1_3a01c81efba321b0e46d1bc0426ad8d1._comment create mode 100644 doc/bugs/git_annex_version_should_without_being_in_a_repo_.mdwn create mode 100644 doc/bugs/git_annex_version_should_without_being_in_a_repo_/comment_1_e7b26eeb1a765fd83280ef907c0deef2._comment create mode 100644 doc/bugs/git_annex_webapp_--listen_on_a_remote_linux_server.mdwn create mode 100644 doc/bugs/git_annex_webapp_--listen_on_a_remote_linux_server/comment_1_db99c00830d3f15ebe790c4dc8b60bd7._comment create mode 100644 doc/bugs/git_annex_webapp_runs_on_wine.mdwn create mode 100644 doc/bugs/git_annex_webapp_runs_on_wine/comment_1_c71dfa42780c0fc78f88ce054e5f3ee3._comment create mode 100644 doc/bugs/git_annex_webapp_runs_on_wine/comment_2_f28441b18b0be90c1e58348455ce09d9._comment create mode 100644 doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive.mdwn create mode 100644 doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_1_7707017fbf3d92ee21d600fe0aefce4f._comment create mode 100644 doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_2_f3392ec3ca7392823cbad2cc9b77f54e._comment create mode 100644 doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_3_b3d016a487b12748fe2c4d14300eb158._comment create mode 100644 doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_4_61f600511a3172f0707e5809fc444d0c._comment create mode 100644 doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_5_8cf029ac7bf3c19dcb0b613eed3b52ac._comment create mode 100644 doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_6_e40d88eba7d8aec1530ce1d32d1c85f2._comment create mode 100644 doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_7_b101fab9e690d1b335a1a29abab68d6c._comment create mode 100644 doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_8_b30d32086314a7e357f3dd6608828ee5._comment create mode 100644 doc/bugs/git_annix_breaks_git_commit_after_uninstall.mdwn create mode 100644 doc/bugs/git_annix_breaks_git_commit_after_uninstall/comment_1_c8b1bab40d3bb2468a5bba7b116e854e._comment create mode 100644 doc/bugs/git_annix_breaks_git_commit_after_uninstall/comment_2_4173770375fca51dcaf9b974296d041a._comment create mode 100644 doc/bugs/git_command_line_constructed_by_unannex_command_has_tons_of_redundant_-a_paramters.mdwn create mode 100644 doc/bugs/git_defunct_processes___40__child_of_git-annex_assistant__41__.mdwn create mode 100644 doc/bugs/git_defunct_processes___40__child_of_git-annex_assistant__41__/comment_1_5e3f4b63db5cd32b63fb3e6a78f9b093._comment create mode 100644 doc/bugs/git_rename_detection_on_file_move.mdwn create mode 100644 doc/bugs/git_rename_detection_on_file_move/comment_10_5ec2f965c80cc5dd31ee3c4edb695664._comment create mode 100644 doc/bugs/git_rename_detection_on_file_move/comment_1_0531dcfa833b0321a7009526efe3df33._comment create mode 100644 doc/bugs/git_rename_detection_on_file_move/comment_2_7101d07400ad5935f880dc00d89bf90e._comment create mode 100644 doc/bugs/git_rename_detection_on_file_move/comment_3_57010bcaca42089b451ad8659a1e018e._comment create mode 100644 doc/bugs/git_rename_detection_on_file_move/comment_4_79d96599f757757f34d7b784e6c0e81c._comment create mode 100644 doc/bugs/git_rename_detection_on_file_move/comment_5_d61f5693d947b9736b29fca1dbc7ad76._comment create mode 100644 doc/bugs/git_rename_detection_on_file_move/comment_6_f63de6fe2f7189c8c2908cc41c4bc963._comment create mode 100644 doc/bugs/git_rename_detection_on_file_move/comment_7_7f20d0b2f6ed1c34021a135438037306._comment create mode 100644 doc/bugs/git_rename_detection_on_file_move/comment_8_6a00500b24ba53248c78e1ffc8d1a591._comment create mode 100644 doc/bugs/git_rename_detection_on_file_move/comment_9_75e0973f6d573df615e01005ebcea87d._comment create mode 100644 doc/bugs/git_version_in_prebuilt_linux_tarball_is_outdated.mdwn create mode 100644 doc/bugs/git_version_in_prebuilt_linux_tarball_is_outdated/comment_1_2a5a07498df9d38531d4570f7b463b9a._comment create mode 100644 doc/bugs/gitignore_for_DCIM_on_Android_misses_some_files.mdwn create mode 100644 doc/bugs/gitignore_for_DCIM_on_Android_misses_some_files/comment_1_f683ecf93e5a17c5c9c06225dbcce2a9._comment create mode 100644 doc/bugs/gix-annex_help_is_homicidal.mdwn create mode 100644 doc/bugs/glacier_from_multiple_repos.mdwn create mode 100644 doc/bugs/googlemail.mdwn create mode 100644 doc/bugs/gpg_bundled_with_OSX_build_fails.mdwn create mode 100644 doc/bugs/gpg_bundled_with_OSX_build_fails/comment_1_ec911f920db6c354ba998ffbb5886606._comment create mode 100644 doc/bugs/gpg_bundled_with_OSX_build_fails/comment_2_bf2a3ab1bbe258bd501ec4b776882adf._comment create mode 100644 doc/bugs/gpg_bundled_with_OSX_build_fails/comment_3_c0142427400323c00bd8294415ae32c5._comment create mode 100644 doc/bugs/gpg_bundled_with_OSX_build_fails/comment_4_b56db4b5afc276f88a2b980e22fda8a0._comment create mode 100644 doc/bugs/gpg_bundled_with_OSX_build_fails/comment_5_a4eda81e5f927c463593bc48fbe84077._comment create mode 100644 doc/bugs/gpg_bundled_with_OSX_build_fails/comment_6_2f0b9331d16a208883bac586258a7b50._comment create mode 100644 doc/bugs/gpg_bundled_with_OSX_build_fails/comment_7_c05c484a6134f93796cff08de0f63e80._comment create mode 100644 doc/bugs/gpg_bundled_with_OSX_build_fails/comment_8_f2cb5467ebe80cf67e1155b771b73978._comment create mode 100644 doc/bugs/gpg_bundled_with_OSX_build_fails/comment_9_27bbda7e31f55b29e1473555ee17e613._comment create mode 100644 doc/bugs/gpg_error_on_android.mdwn create mode 100644 doc/bugs/gpg_error_on_android/comment_1_870583fd1b7a33b688b9a228077d1333._comment create mode 100644 doc/bugs/gpg_error_on_android/comment_2_9ce5511a109bde50d8cf87bad0268b4a._comment create mode 100644 doc/bugs/gpg_error_on_android/comment_3_b345e80f38d38f82cfcfce3102138fb8._comment create mode 100644 doc/bugs/gpg_error_on_android/comment_4_032f42235b7f26854e725041ca33384b._comment create mode 100644 doc/bugs/gpg_fails_on_Mac_OS_10.9_when_creating_a_new_remote_repository_via_assistant.mdwn create mode 100644 doc/bugs/gpg_fails_on_Mac_OS_10.9_when_creating_a_new_remote_repository_via_assistant/comment_1_7b409701c650b55b3472accd70555f16._comment create mode 100644 doc/bugs/gpg_fails_on_Mac_OS_10.9_when_creating_a_new_remote_repository_via_assistant/comment_2_40b00f7258512677516ec5036b89090f._comment create mode 100644 doc/bugs/gpg_goes_to_100__37___cpu_on_bad_input_data.mdwn create mode 100644 doc/bugs/gpg_goes_to_100__37___cpu_on_bad_input_data/comment_1_889218fb7c0115b03d9bad0c07296097._comment create mode 100644 doc/bugs/gpg_hangs_on_glacier_remote_creation.mdwn create mode 100644 doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_1_41ca74a4e4aaf4f6b012a92677037651._comment create mode 100644 doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_2_dd11fd25c8bb1f2d7e1292c07abf553e._comment create mode 100644 doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_3_543d8a13756c1355a5752867bdcbefd3._comment create mode 100644 doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_4_6441cf25e6bd62c96d7e766da9bdd7fb._comment create mode 100644 doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_5_72e152294e36bc5f2d78e8e2ebed6a23._comment create mode 100644 doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_6_890e85df05903795e01efbd7879f9c87._comment create mode 100644 doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_7_042047f9fcc45abbfa47c3973d79f08e._comment create mode 100644 doc/bugs/gpg_needs_--use-agent.mdwn create mode 100644 doc/bugs/hGetContents:_user_error.mdwn create mode 100644 doc/bugs/hGetContents:_user_error/comment_1_30178f151f8c60d2ff856ca543dc506c._comment create mode 100644 doc/bugs/hGetContents:_user_error/comment_2_f74eeed4a007058a22183fd678ecd6c6._comment create mode 100644 doc/bugs/hGetContents:_user_error/comment_3_515e562228a89a13d6d857a874f4a468._comment create mode 100644 doc/bugs/hGetContents:_user_error/comment_4_8c6ed5e459c5c66b77db446c6317114c._comment create mode 100644 doc/bugs/hGetContents:_user_error/comment_5_f80bce48c3f96b0cd6892af43ee88a96._comment create mode 100644 doc/bugs/hGetContents:_user_error/comment_6_69dc09e4ae726856dafbeec34170671c._comment create mode 100644 doc/bugs/hGetContents:_user_error/comment_7_3f66b03f773341fad94ec16b4f55edaa._comment create mode 100644 doc/bugs/hGetContents:_user_error/comment_8_a697e2d36abfc999e65c9f587c0de56e._comment create mode 100644 doc/bugs/hGetContents:_user_error/comment_9_da7c5905a64bb6779970f9394155e629._comment create mode 100644 doc/bugs/haskell-dbus_problems_on_OSX___40__or_this_a_general_problem__41__.mdwn create mode 100644 doc/bugs/host_with_rysnc_installed__44___not_recognized.mdwn create mode 100644 doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_1_3ff000eb3efde41426c7b086ae627dcf._comment create mode 100644 doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_2_34e592ab057df2df54e13d3f5cae64f0._comment create mode 100644 doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_3_05ffbae13d8f9b08315f40bb9b206f46._comment create mode 100644 doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_4_99d1f151263ca3433dd4afa8a928b1fe._comment create mode 100644 doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_5_6ef1a377b0b4d3efeffdf9693d0b496b._comment create mode 100644 doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_6_d9e36828ad55f3181a1c650010f23d6b._comment create mode 100644 doc/bugs/immediately_drops_files.mdwn create mode 100644 doc/bugs/immediately_drops_files/comment_1_9ef6e694ef8a8eee7a42f88554475db7._comment create mode 100644 doc/bugs/immediately_drops_files/comment_2_76e4f8b73ab60b2540dd2a3e5379791d._comment create mode 100644 doc/bugs/immediately_drops_files/comment_3_788db083f5ba2e5589c3b952203ec954._comment create mode 100644 doc/bugs/immediately_drops_files/comment_4_425b79865eb77d69d0b7a71a14639f81._comment create mode 100644 doc/bugs/immediately_drops_files/comment_5_7c9f660b6bcec31827a44a650e9d4622._comment create mode 100644 doc/bugs/importfeed_fails__44___bad_feed_content.mdwn create mode 100644 doc/bugs/importfeed_fails_when_using_the_option_--lazy_for_specific_podcast.mdwn create mode 100644 doc/bugs/importfeed_fails_when_using_the_option_--lazy_for_specific_podcast/comment_1_4ccfabbaf75e139b32f6fa6f7bc6a7fe._comment create mode 100644 doc/bugs/importfeed_should_allow_pubdate_in_the_template.mdwn create mode 100644 doc/bugs/importfeed_uses___34____95__foo__34___as_extension.mdwn create mode 100644 doc/bugs/inconsistent_use_of_SI_prefixes.mdwn create mode 100644 doc/bugs/internal_server_error:_hGetContents:_invalid_argument___40__invalid_byte_sequence__41__.mdwn create mode 100644 doc/bugs/internal_server_error:_unknown_UUID_on_webapp.mdwn create mode 100644 doc/bugs/internal_server_error_creating_repo_on_ssh_server.mdwn create mode 100644 doc/bugs/internal_server_error_creating_repo_on_ssh_server/comment_1_4a2c9338d5c779496049d78e29cf5cbd._comment create mode 100644 doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option.mdwn create mode 100644 doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_1_14a2f775f43a86129ce3649a06f8ba0b._comment create mode 100644 doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_2_7b277320fcffd8d03e0d3d31398eb571._comment create mode 100644 doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_3_ba9dd8f2cc46640383d4339a3661571f._comment create mode 100644 doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_4_274ae39d55545bde0be931d7a6c42c94._comment create mode 100644 doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_5_242291d46acc61bdfc112e3316de528b._comment create mode 100644 doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_6_76b936263e82ca6c415a16ed57e770b4._comment create mode 100644 doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_7_9ccd3749fd9f32b0906c0b9428cc514f._comment create mode 100644 doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_8_4e8982668b5044b2286d55c90adb9da3._comment create mode 100644 doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_9_aaf0ee250972d737a2ca57de5b5f1c0a._comment create mode 100644 doc/bugs/interrupting_migration_causes_problems.mdwn create mode 100644 doc/bugs/javascript_functions_qouting_issue.mdwn create mode 100644 doc/bugs/journal_commit_error_when_using_annex.mdwn create mode 100644 doc/bugs/journal_commit_error_when_using_annex/comment_1_38f60ca3503ea1530c4bd2cde5c9182f._comment create mode 100644 doc/bugs/journal_commit_error_when_using_annex/comment_2_6de455a67f37d9ee0a307a78123781bf._comment create mode 100644 doc/bugs/long_running_assistant_causes_resource_starvation_on_OSX.mdwn create mode 100644 doc/bugs/long_running_assistant_causes_resource_starvation_on_OSX/comment_1_91c911c29fd126ddc365c561591f627e._comment create mode 100644 doc/bugs/long_running_assistant_causes_resource_starvation_on_OSX/comment_2_c316aead931a6a2377a4515bbb34ac5b._comment create mode 100644 doc/bugs/lsof__47__committer_thread_loops_occassionally.mdwn create mode 100644 doc/bugs/lsof__47__committer_thread_loops_occassionally/comment_1_f8d1720aa26c719609720acf0772606e._comment create mode 100644 doc/bugs/lsof__47__committer_thread_loops_occassionally/comment_2_0527569ea2924721d19dadcf4fe0ec5a._comment create mode 100644 doc/bugs/lsof__47__committer_thread_loops_occassionally/comment_3_5b67ff08a897ea3d2266ccc910ab4278._comment create mode 100644 doc/bugs/make_SHA512E_the_default.mdwn create mode 100644 doc/bugs/make_install_can__39__t_be_used_with_sudo.mdwn create mode 100644 doc/bugs/make_install_doesn__39__t_create_git-annex-shell.mdwn create mode 100644 doc/bugs/make_install_doesn__39__t_create_git-annex-shell/comment_1_8c20edd8c6483500f807528d616c6dfd._comment create mode 100644 doc/bugs/make_install_doesn__39__t_create_git-annex-shell/comment_2_8b2cf0fe7219e0bc83fd326adbf26c8a._comment create mode 100644 doc/bugs/make_install_doesn__39__t_create_git-annex-shell/comment_3_25fe06eb127e59a4a07aeb52a5cfeabe._comment create mode 100644 doc/bugs/make_install_doesn__39__t_create_git-annex-shell/comment_4_ec78032ba62d6918baa2c0b07ead5b50._comment create mode 100644 doc/bugs/making_annex-merge_try_a_fast-forward.mdwn create mode 100644 doc/bugs/manpage_has_slight_indentation_error.mdwn create mode 100644 doc/bugs/map_not_respecting_annex_ssh_options__63__.mdwn create mode 100644 doc/bugs/map_not_respecting_annex_ssh_options__63__/comment_1_c63a1ed5909d53f116f06e60aba74dc6._comment create mode 100644 doc/bugs/merge_causes_out_of_memory_on_large_repos.mdwn create mode 100644 doc/bugs/merge_causes_out_of_memory_on_large_repos/comment_1_6d47485728ea65a9b555f8be7159dea5._comment create mode 100644 doc/bugs/merge_causes_out_of_memory_on_large_repos/comment_2_06723d13ecdaf87de5ff2b209e3c5198._comment create mode 100644 doc/bugs/merge_causes_out_of_memory_on_large_repos/comment_3_9f83ef190547b291a715cda55b7977d4._comment create mode 100644 doc/bugs/merge_causes_out_of_memory_on_large_repos/comment_4_0e32ae0300472c56079cfbcd78a3e386._comment create mode 100644 doc/bugs/merge_causes_out_of_memory_on_large_repos/comment_5_e8998716107e7ae8d0e8d332812517ad._comment create mode 100644 doc/bugs/microsd__47__thumbdrives_seem_to_die_when_using_the_ARM_build.mdwn create mode 100644 doc/bugs/microsd__47__thumbdrives_seem_to_die_when_using_the_ARM_build/comment_1_0527581ea60d28bb28504fa2a355ed87._comment create mode 100644 doc/bugs/microsd__47__thumbdrives_seem_to_die_when_using_the_ARM_build/comment_2_926a87b60e20d286d49639c8dad13a1a._comment create mode 100644 doc/bugs/microsd__47__thumbdrives_seem_to_die_when_using_the_ARM_build/comment_3_c509fba1a9adacfd26a2bd12b4aea988._comment create mode 100644 doc/bugs/migrated_files_not_showing_up_in_unused_list.mdwn create mode 100644 doc/bugs/migrated_files_not_showing_up_in_unused_list/comment_1_2cfbf6693b051c758fe5efa5ee885829._comment create mode 100644 doc/bugs/migrated_files_not_showing_up_in_unused_list/comment_2_acb1abeb32c3aba8ba65151afbea753c._comment create mode 100644 doc/bugs/minor_bug:_errors_are_not_verbose_enough.mdwn create mode 100644 doc/bugs/missing_dependency_in_git-annex-3.20130216.mdwn create mode 100644 doc/bugs/missing_kde__47__gnome_menu_item..mdwn create mode 100644 doc/bugs/moreinfo.mdwn create mode 100644 doc/bugs/network___62____61___2.4.0.1_is_not_in_Haskell_Platform_2012.4.0.0.mdwn create mode 100644 doc/bugs/network___62____61___2.4.0.1_is_not_in_Haskell_Platform_2012.4.0.0/comment_1_2c4b3757bb8de563edca65aeabcbbc5a._comment create mode 100644 doc/bugs/nfs_mounted_repo_results_in_errors_on_drop_move.mdwn create mode 100644 doc/bugs/non-annexed_file_changed_to_annexed_on_typechange.mdwn create mode 100644 doc/bugs/non-annexed_file_changed_to_annexed_on_typechange/comment_1_6ac691645edb483797bee05043fd83b3._comment create mode 100644 doc/bugs/non-annexed_file_changed_to_annexed_on_typechange/comment_2_5d67e3a60b7cc30c2b1857f50895d363._comment create mode 100644 doc/bugs/non-annexed_file_changed_to_annexed_on_typechange/comment_3_78f1e081b92f418c20893d86a8715501._comment create mode 100644 doc/bugs/non-annexed_file_changed_to_annexed_on_typechange/comment_4_1e2a59e0eec89ef1a57d1488ff40dcf0._comment create mode 100644 doc/bugs/non-annexed_file_changed_to_annexed_on_typechange/comment_5_5e74431048b07631e0dbeca90fdb365b._comment create mode 100644 doc/bugs/non-annexed_file_changed_to_annexed_on_typechange/comment_6_3724e1c1a5fc6d3589452478249792ec._comment create mode 100644 doc/bugs/non-annexed_file_changed_to_annexed_on_typechange/comment_7_7f841ea7bf7d44f3d810ca097ac9eb47._comment create mode 100644 doc/bugs/non-annexed_file_changed_to_annexed_on_typechange/comment_8_c53ce2274388711ffbde1595b64f932b._comment create mode 100644 doc/bugs/non-repos_in_repositories_list___40__+_other_weird_output__41___from_git_annex_status.mdwn create mode 100644 doc/bugs/non-repos_in_repositories_list___40__+_other_weird_output__41___from_git_annex_status/comment_1_fcd230cbb2ac363c469b98021042c011._comment create mode 100644 doc/bugs/non-repos_in_repositories_list___40__+_other_weird_output__41___from_git_annex_status/comment_2_23207ecabd4b41d9551d0491fa71e96b._comment create mode 100644 doc/bugs/non-repos_in_repositories_list___40__+_other_weird_output__41___from_git_annex_status/comment_3_6ea92adfe955b6a5cd2a39fea78b3bf6._comment create mode 100644 doc/bugs/non-repos_in_repositories_list___40__+_other_weird_output__41___from_git_annex_status/comment_4_d0e55585f1612148163039d157253258._comment create mode 100644 doc/bugs/non-repos_in_repositories_list___40__+_other_weird_output__41___from_git_annex_status/comment_6_5506dc1b08516677886da4aa97263864._comment create mode 100644 doc/bugs/non-repos_in_repositories_list___40__+_other_weird_output__41___from_git_annex_status/comment_7_073449cc2cb73efd2b2d3d778a5573de._comment create mode 100644 doc/bugs/non-repos_in_repositories_list___40__+_other_weird_output__41___from_git_annex_status/comment_7_3516e71ba3b07427a10cbb4965712aa6._comment create mode 100644 doc/bugs/non-repos_in_repositories_list___40__+_other_weird_output__41___from_git_annex_status/comment_8_ea2e4704adb2f304f9c11c61eb62e919._comment create mode 100644 doc/bugs/non-repos_in_repositories_list___40__+_other_weird_output__41___from_git_annex_status/comment_9_4d17fedead7977541371a3f2c192e030._comment create mode 100644 doc/bugs/not_possible_to_have_annex_on_a_separate_filesystem.mdwn create mode 100644 doc/bugs/old_data_isn__39__t_unused_after_migration.mdwn create mode 100644 doc/bugs/on--git-dir_and_--work-tree_options.mdwn create mode 100644 doc/bugs/optinally_transfer_file_unencryptedly/comment_1_13a7653d96ddf91f4492a9f3555a69aa._comment create mode 100644 doc/bugs/optinally_transfer_file_unencryptedly/comment_2_31f154011ec26a463de7b1e307e49cb6._comment create mode 100644 doc/bugs/optinally_transfer_file_unencryptedly/comment_3_33433bcfb1946b52f1f41b9158ab452d._comment create mode 100644 doc/bugs/ordering.mdwn create mode 100644 doc/bugs/pasting_into_annex_on_OSX.mdwn create mode 100644 doc/bugs/pasting_into_annex_on_OSX/comment_1_4eab52bb6eda92e39bdaa8eee8f31a7f._comment create mode 100644 doc/bugs/pasting_into_annex_on_OSX/comment_2_f1b58adfec179b75c1fc2bf578a3b5c4._comment create mode 100644 doc/bugs/pasting_into_annex_on_OSX/comment_3_270aa7680c3b899a92ce6543eaba666a._comment create mode 100644 doc/bugs/pasting_into_annex_on_OSX/comment_4_ec11a80d5b0f78c7a927f8aa71a6c57a._comment create mode 100644 doc/bugs/pasting_into_annex_on_OSX/comment_5_1928bd25e5e6874a3b83c2f2adc776f5._comment create mode 100644 doc/bugs/pasting_into_annex_on_OSX/comment_6_0fe288f54b781a0c51395cb32f0e2f9d._comment create mode 100644 doc/bugs/problem_commit_normal_links.mdwn create mode 100644 doc/bugs/problem_with_upgrade_v2_-__62___v3.mdwn create mode 100644 doc/bugs/problem_with_upgrade_v2_-__62___v3/comment_1_5f60006c9bb095167d817f234a14d20b._comment create mode 100644 doc/bugs/problem_with_upgrade_v2_-__62___v3/comment_2_cd0123392b16d89db41b45464165c247._comment create mode 100644 doc/bugs/problem_with_upgrade_v2_-__62___v3/comment_3_86d9e7244ae492bcbe62720b8c4fc4a9._comment create mode 100644 doc/bugs/problem_with_upgrade_v2_-__62___v3/comment_4_91439d4dbbf1461e281b276eb0003691._comment create mode 100644 doc/bugs/problem_with_upgrade_v2_-__62___v3/comment_5_ca33a9ca0df33f7c1b58353d7ffb943d._comment create mode 100644 doc/bugs/problem_with_upgrade_v2_-__62___v3/comment_6_f360f0006bc9115bc5a3e2eb9fe58abd._comment create mode 100644 doc/bugs/problems_with_utf8_names.mdwn create mode 100644 doc/bugs/problems_with_utf8_names/comment_1_3c7e3f021c2c94277eecf9c8af6cec5f._comment create mode 100644 doc/bugs/problems_with_utf8_names/comment_2_bad4c4c5f54358d1bc0ab2adc713782a._comment create mode 100644 doc/bugs/problems_with_utf8_names/comment_3_4f936a5d3f9c7df64c8a87e62b7fbfdc._comment create mode 100644 doc/bugs/problems_with_utf8_names/comment_4_93bee35f5fa7744834994bc7a253a6f9._comment create mode 100644 doc/bugs/problems_with_utf8_names/comment_5_519cda534c7aea7f5ad5acd3f76e21fa._comment create mode 100644 doc/bugs/problems_with_utf8_names/comment_6_52e0bfff2b177b6f92e226b25d2f3ff1._comment create mode 100644 doc/bugs/problems_with_utf8_names/comment_7_0cc588f787d6eecfa19a8f6cee4b07b5._comment create mode 100644 doc/bugs/problems_with_utf8_names/comment_8_ff5c6da9eadfee20c18c86b648a62c47._comment create mode 100644 doc/bugs/random_files_vanishing_when_assistant_gets_restarted.mdwn create mode 100644 doc/bugs/random_files_vanishing_when_assistant_gets_restarted/comment_1_53b4f388c47c1b3f6ffa4fc2155b30fc._comment create mode 100644 doc/bugs/random_files_vanishing_when_assistant_gets_restarted/comment_2_e66532b23b089c9ea61122d6664cddb9._comment create mode 100644 doc/bugs/random_files_vanishing_when_assistant_gets_restarted/comment_3_c9d692c867acc076f64f1213ea03ca11._comment create mode 100644 doc/bugs/regression_in_direct_mode_on_windows_:_weird___96__git_annex_sync__96___behavior.mdwn create mode 100644 doc/bugs/regression_in_direct_mode_on_windows_:_weird___96__git_annex_sync__96___behavior/comment_1_1a0b964f93c753838d6ccbdc8f79b39e._comment create mode 100644 doc/bugs/regression_in_direct_mode_on_windows_:_weird___96__git_annex_sync__96___behavior/comment_2_d22dcd7f95c5dc1c381c3c746781efce._comment create mode 100644 doc/bugs/regression_in_direct_mode_on_windows_:_weird___96__git_annex_sync__96___behavior/comment_3_a25140eb90f6b24c1a3ca39c901694e2._comment create mode 100644 doc/bugs/regression_in_direct_mode_on_windows_:_weird___96__git_annex_sync__96___behavior/comment_4_825e15183008ff7d97a81cacc3f55fb4._comment create mode 100644 doc/bugs/regression_in_direct_mode_on_windows_:_weird___96__git_annex_sync__96___behavior/comment_5_e858fc7c729cd39740354fb12627d556._comment create mode 100644 doc/bugs/regression_in_direct_mode_on_windows_:_weird___96__git_annex_sync__96___behavior/comment_6_9881b0f2dfb0907a60c0da296bc3da3f._comment create mode 100644 doc/bugs/regression_in_direct_mode_on_windows_:_weird___96__git_annex_sync__96___behavior/comment_7_ca017b9d3bafea4cb31448c802f3834e._comment create mode 100644 doc/bugs/reinject_should_leave_file_in_place_on_checksum_mismatch.mdwn create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist.mdwn create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist/comment_10_8a1d16b2aaba224e94be3d9dcc036d91._comment create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist/comment_11_434ed328a22a6657dba3b2929a56e499._comment create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist/comment_12_1837b70ace42882db3ab82e001680934._comment create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist/comment_13_ca9c87a10f29e41572540edeb99652f2._comment create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist/comment_1_69eafc4201e3014ef1b5d74fe319e462._comment create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist/comment_2_b7a64db9abe006af8c30169ad849efe9._comment create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist/comment_3_197ac6070f256131c6e18a07aa3834fa._comment create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist/comment_4_fe07832333b536c71b7dcb46a4a44bd0._comment create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist/comment_5_540bca4e6fdfc10eeab875ecc0f2b3f3._comment create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist/comment_6_3f236b35e9820cd88bb77fcd57d6975e._comment create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist/comment_7_3cc5dae0351201522711a7caeecd60d5._comment create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist/comment_8_3c3883cb66d02a15d5de84d22aa113da._comment create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist/comment_9_c8cece9559bd2dc6154cd28772369e48._comment create mode 100644 doc/bugs/remote_not_showing_up_in_webapp.mdwn create mode 100644 doc/bugs/remote_not_showing_up_in_webapp/comment_1_2a269732fd528f505777542d3556437a._comment create mode 100644 doc/bugs/removable_device_configurator_chokes_on_spaces.mdwn create mode 100644 doc/bugs/rename:_permission_denied__44___after_direct_mode_switch.mdwn create mode 100644 doc/bugs/rename:_permission_denied__44___after_direct_mode_switch/comment_1_14cec6448831c67794b62926a03b2fc5._comment create mode 100644 doc/bugs/rename:_permission_denied__44___after_direct_mode_switch/comment_2_93af8f48a01b6e2d011bd6f60499ccd2._comment create mode 100644 doc/bugs/rename:_permission_denied__44___after_direct_mode_switch/comment_3_f8fba1955e62360061613e5898b3d74e._comment create mode 100644 doc/bugs/renaming_a_file_makes_annex_get_the_file__39__s_content_from_remote.mdwn create mode 100644 doc/bugs/renaming_a_file_makes_annex_get_the_file__39__s_content_from_remote/comment_1_d6aad1831674586fe4cdf61dd2a4bbb9._comment create mode 100644 doc/bugs/renaming_a_file_makes_annex_get_the_file__39__s_content_from_remote/comment_2_8591e174c1a8cddfae9371407a58ff1c._comment create mode 100644 doc/bugs/repair_fails_when_home_on_seperate_partition.mdwn create mode 100644 doc/bugs/restart_daemon_required.mdwn create mode 100644 doc/bugs/restart_daemon_required/comment_1_f79ac16cc9f1e3b08cd121bf5efb29c3._comment create mode 100644 doc/bugs/restart_daemon_required/comment_2_50c1b268a3cc4514681059eabca674e3._comment create mode 100644 doc/bugs/restart_daemon_required/comment_3_1716e0f3c7c44dc77ebf7f00fdd8f9e3._comment create mode 100644 doc/bugs/restart_daemon_required/comment_4_3ce776786eca83fcb8ff94c8f6ff3eb9._comment create mode 100644 doc/bugs/rsync_remote_shows_no_progress.mdwn create mode 100644 doc/bugs/rsync_remote_shows_no_progress/comment_1_a7f5d646a924c462b987561cf6fc4318._comment create mode 100644 doc/bugs/rsync_special_remote_fails_to___96__get__96___files_which_have_names_containing_spaces.mdwn create mode 100644 doc/bugs/scp_interrupt_to_background.mdwn create mode 100644 doc/bugs/show_version_without_having_to_be_in_a_git_repo.mdwn create mode 100644 doc/bugs/signal_weirdness.mdwn create mode 100644 doc/bugs/size_of_the_Android_installation_is_HUGE_--_please_seek_possibility_to_shrink.mdwn create mode 100644 doc/bugs/size_of_the_Android_installation_is_HUGE_--_please_seek_possibility_to_shrink/comment_1_d2faaff98386433110dcf7aae87916b7._comment create mode 100644 doc/bugs/size_of_the_Android_installation_is_HUGE_--_please_seek_possibility_to_shrink/comment_2_1359ddf1b5db4303f8bd219d3f07df3a._comment create mode 100644 doc/bugs/smarter_flood_filling.mdwn create mode 100644 doc/bugs/softlink_mtime.mdwn create mode 100644 doc/bugs/ssh-keygen_failed_when_adding_remote_server_repo.mdwn create mode 100644 doc/bugs/ssh-keygen_failed_when_adding_remote_server_repo/comment_1_52180983b59c247389a55a9523ec435b._comment create mode 100644 doc/bugs/ssh_connection_caching_broken_on_NTFS.mdwn create mode 100644 doc/bugs/ssh_connection_caching_broken_on_NTFS/comment_1_54e7e12514f4c109fd57a4eb744b731a._comment create mode 100644 doc/bugs/submodule_path_problem.mdwn create mode 100644 doc/bugs/submodule_path_problem/comment_1_69aec9207d2e9da4bc042d3f4963d80e._comment create mode 100644 doc/bugs/submodule_path_problem/comment_2_53d9eb28cb70b51637470175a80ddf35._comment create mode 100644 doc/bugs/submodule_path_problem/comment_3_aa5e0f99000a5b4988bccbb2ca28353b._comment create mode 100644 doc/bugs/submodule_path_problem/comment_4_ab1508a5a04e2106aad5e7985775a6fa._comment create mode 100644 doc/bugs/submodule_path_problem/comment_5_8c7539d1c11b81f5d46aa8e1c61745ae._comment create mode 100644 doc/bugs/submodule_path_problem/comment_6_cacc91afcb1739dfca3a60590bb70356._comment create mode 100644 doc/bugs/subtle_build_issue_on_OSX_10.7_and_Haskell_Platform___40__if_you_have_the_32bit_version_installed__41__.mdwn create mode 100644 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 create mode 100644 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 create mode 100644 doc/bugs/support_bare_git_repo__44___with_the_annex_directory_exposed_to_http.mdwn create mode 100644 doc/bugs/test_failures_on_window_for_5.20131118.mdwn create mode 100644 doc/bugs/test_failures_on_window_for_5.20131118/comment_1_5a7a284625c12d54390fe4a4ec1d4211._comment create mode 100644 doc/bugs/test_suite_failure_on_samba_mount.mdwn create mode 100644 doc/bugs/test_suite_failure_on_samba_mount/comment_1_e074b20801b921ee2661025a050a8af2._comment create mode 100644 doc/bugs/test_suite_shouldn__39__t_fail_silently.mdwn create mode 100644 doc/bugs/tests_fail_when_there_is_no_global_.gitconfig_for_the_user.mdwn create mode 100644 doc/bugs/tests_failed_to_build_-_after_an_update_of_haskell_platform.mdwn create mode 100644 doc/bugs/tests_failed_to_build_-_after_an_update_of_haskell_platform/comment_1_20a6fe046111e9ae56fd4d9c9f41f536._comment create mode 100644 doc/bugs/tests_failed_to_build_-_after_an_update_of_haskell_platform/comment_2_6fdc5f8b07908c6eda8a97690408f44e._comment create mode 100644 doc/bugs/tests_failed_to_build_-_after_an_update_of_haskell_platform/comment_3_014474a133c7ff0131029d8721afc710._comment create mode 100644 doc/bugs/tests_failed_to_build_-_after_an_update_of_haskell_platform/comment_4_9c537e251dc99667fe87870804d802c2._comment create mode 100644 doc/bugs/the_tip_at_commit_6cecc26206c4a539999b04664136c6f785211a41_disables_the_watch_command_on_OSX.mdwn create mode 100644 doc/bugs/three_character_directories_created.mdwn create mode 100644 doc/bugs/three_character_directories_created/comment_1_dd91de24dab4f2eaded1f7d659869d4d._comment create mode 100644 doc/bugs/three_character_directories_created/comment_2_f6375964a6c8bb1e6c5b7238effca66d._comment create mode 100644 doc/bugs/three_character_directories_created/comment_3_776e0a9b938d8b260a5111594b442536._comment create mode 100644 doc/bugs/three_character_directories_created/comment_4_e288bacdb336c4886adb6eeb4dca1e92._comment create mode 100644 doc/bugs/three_character_directories_created/comment_5_359b80948ac92a0f1eb695599456486c._comment create mode 100644 doc/bugs/three_way_sync_via_S3_and_Jabber.mdwn create mode 100644 doc/bugs/three_way_sync_via_S3_and_Jabber/comment_10_fc5ec5505f141bb9135e772d1094bc4d._comment create mode 100644 doc/bugs/three_way_sync_via_S3_and_Jabber/comment_11_0df2210c30dec6d88d7858d93eec19a3._comment create mode 100644 doc/bugs/three_way_sync_via_S3_and_Jabber/comment_1_41682b2e72e657e0f23af244f8345e85._comment create mode 100644 doc/bugs/three_way_sync_via_S3_and_Jabber/comment_2_c7b4ea9aea6839763eb8b89e8d6a5ad5._comment create mode 100644 doc/bugs/three_way_sync_via_S3_and_Jabber/comment_3_063f5e5e554ad6710f16394906d87616._comment create mode 100644 doc/bugs/three_way_sync_via_S3_and_Jabber/comment_4_197ad39b4a46936afeeb04eb26cf1ef3._comment create mode 100644 doc/bugs/three_way_sync_via_S3_and_Jabber/comment_5_0b0d829ccd255be0177ae9d8f6b10e63._comment create mode 100644 doc/bugs/three_way_sync_via_S3_and_Jabber/comment_6_37a8e19440c764317589bc4248cbccdf._comment create mode 100644 doc/bugs/three_way_sync_via_S3_and_Jabber/comment_7_12eb333327d31ca2bfee3f3c5e26d641._comment create mode 100644 doc/bugs/three_way_sync_via_S3_and_Jabber/comment_8_e6b1084b2f18d8e536c8692e165754a3._comment create mode 100644 doc/bugs/three_way_sync_via_S3_and_Jabber/comment_9_2120a1c3e5f490a55f68bb1bef5efd0d._comment create mode 100644 doc/bugs/tmp_file_handling.mdwn create mode 100644 doc/bugs/tmp_file_handling/comment_1_0300c11ee3f94a9e7c832671e16f5511._comment create mode 100644 doc/bugs/tmp_file_handling/comment_2_cc14c7a79a544e47654e4cd8abc85edd._comment create mode 100644 doc/bugs/touch.hsc_has_problems_on_non-linux_based_systems.mdwn create mode 100644 doc/bugs/touch.hsc_has_problems_on_non-linux_based_systems/comment_1_1d38283c9ea87174f3bbef9a58f5cb88._comment create mode 100644 doc/bugs/touch.hsc_has_problems_on_non-linux_based_systems/comment_2_bf112edd075fbebe4fc959a387946eb9._comment create mode 100644 doc/bugs/touch.hsc_has_problems_on_non-linux_based_systems/comment_3_a46080fbe82adf0986c5dc045e382501._comment create mode 100644 doc/bugs/touch.hsc_has_problems_on_non-linux_based_systems/comment_4_760437bf3ba972a775bb190fb4b38202._comment create mode 100644 doc/bugs/touch.hsc_has_problems_on_non-linux_based_systems/comment_5_060ba5ea88dcab2f4a0c199f13ef4f67._comment create mode 100644 doc/bugs/touch.hsc_has_problems_on_non-linux_based_systems/comment_6_548303d6ffb21a9370b6904f41ff49c1._comment create mode 100644 doc/bugs/touch.hsc_has_problems_on_non-linux_based_systems/comment_7_7ca00527ab5db058aadec4fe813e51fd._comment create mode 100644 doc/bugs/touch.hsc_has_problems_on_non-linux_based_systems/comment_8_881aecb9ae671689453f6d5d780d844b._comment create mode 100644 doc/bugs/transferkey_fails_due_to_gpg.mdwn create mode 100644 doc/bugs/transferkey_fails_due_to_gpg/comment_1_f6434400d528a0fa59c056995ff2e6f3._comment create mode 100644 doc/bugs/transferkey_fails_due_to_gpg/comment_2_c540b05b62a3186a87efcb180ea2a52d._comment create mode 100644 doc/bugs/transferkey_fails_due_to_gpg/comment_3_9ad2ef73169dbd2866da2f4259ab0f00._comment create mode 100644 doc/bugs/transferkey_fails_due_to_gpg/comment_4_7631b8842efba6a4aad87386ce9443a7._comment create mode 100644 doc/bugs/typo_in___34__ready_to_add_remote_server__34___message.mdwn create mode 100644 doc/bugs/typo_on_the_Mac_OS_10.7.5_Lion_build.mdwn create mode 100644 doc/bugs/typo_on_the_Mac_OS_10.7.5_Lion_build/comment_1_e8df4b36a89b37edd94f3a318ae93a32._comment create mode 100644 doc/bugs/typo_on_the_Mac_OS_10.7.5_Lion_build/comment_2_3b2c3c84bd1910280c549a2ee1c622b9._comment create mode 100644 doc/bugs/unable_to_change_repository_group_of___34__here__34__.mdwn create mode 100644 doc/bugs/unannex_and_uninit_do_not_work_when_git_index_is_broken.mdwn create mode 100644 doc/bugs/unannex_and_uninit_do_not_work_when_git_index_is_broken/comment_1_1931e733f0698af5603a8b92267203d4._comment create mode 100644 doc/bugs/unannex_and_uninit_do_not_work_when_git_index_is_broken/comment_2_40920b88537b7715395808d8aa94bf03._comment create mode 100644 doc/bugs/unannex_command_doesn__39__t_all_files.mdwn create mode 100644 doc/bugs/unannex_removes_object_even_if_referred_to_by_others.mdwn create mode 100644 doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_1_0ce72d0f67082f202cfa58b7c00f2fd3._comment create mode 100644 doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_2_647f49ffcaa348660659f9954a59b3ae._comment create mode 100644 doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_3_3f7f4b55b7ec2641a70109788e0b5672._comment create mode 100644 doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_4_313d393c416495aa0f8573113e41c2f7._comment create mode 100644 doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_5_c0e7742672db2629bd906cebefe74f72._comment create mode 100644 doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_6_c56171665db3ed14109a09097d49ac5d._comment create mode 100644 doc/bugs/unannex_vs_unlock_hook_confusion.mdwn create mode 100644 doc/bugs/undefined.mdwn create mode 100644 doc/bugs/unfinished_repos_in_webapp.mdwn create mode 100644 doc/bugs/unfinished_repos_in_webapp/comment_1_9628b100e39489be9f28ef75276a7341._comment create mode 100644 doc/bugs/unfinished_repos_in_webapp/comment_2_ba0fbff536b1d067c4098db401dc49f2._comment create mode 100644 doc/bugs/unfinished_repos_in_webapp/comment_3_fd554aa7d93117177784a29270ccf790._comment create mode 100644 doc/bugs/unfinished_repository_when_using_annex-ignore_true_.mdwn create mode 100644 doc/bugs/unhappy_without_UTF8_locale.mdwn create mode 100644 doc/bugs/uninit_and_indirect_don__39__t_work_on_android.mdwn create mode 100644 doc/bugs/uninit_and_indirect_don__39__t_work_on_android/comment_1_fec69c4c41987b9469eaa8f745c0a124._comment create mode 100644 doc/bugs/uninit_and_indirect_don__39__t_work_on_android/comment_2_54c3fa77a069b36d03c41aad08fee9af._comment create mode 100644 doc/bugs/uninit_does_not_abort_when_hard_link_creation_fails.mdwn create mode 100644 doc/bugs/uninit_does_not_work_in_old_repos.mdwn create mode 100644 doc/bugs/uninit_does_not_work_in_old_repos/comment_1_bc0619c6e17139df74639448aa6a0f72._comment create mode 100644 doc/bugs/uninit_loses_data_if_git-annex_add_didn__39__t_complete.mdwn create mode 100644 doc/bugs/uninit_should_not_run_when_branch_git-annex_is_checked_out.mdwn create mode 100644 doc/bugs/unlock_fails_silently_with_directory_symlinks.mdwn create mode 100644 doc/bugs/unlock_not_working_on_os_x_10.6_-_cp:_illegal_option_--_-_.mdwn create mode 100644 doc/bugs/unlock_not_working_on_os_x_10.6_-_cp:_illegal_option_--_-_/comment_1_a634a9f1c023bf836183de64abab1224._comment create mode 100644 doc/bugs/unlock_not_working_on_os_x_10.6_-_cp:_illegal_option_--_-_/comment_2_d9ae61a7c3f1eb243ca650945b40f21d._comment create mode 100644 doc/bugs/unlock_not_working_on_os_x_10.6_-_cp:_illegal_option_--_-_/comment_3_fe229c03c14e8eb2b57389e0e193ed99._comment create mode 100644 doc/bugs/unlock_not_working_on_os_x_10.6_-_cp:_illegal_option_--_-_/comment_4_fa12afe295de63c4aa7eb043b715325a._comment create mode 100644 doc/bugs/unlock_then_lock_of_uncommitted_file_loses_it.mdwn create mode 100644 doc/bugs/upgrade_left_untracked_.git-annex__47____42___directories.mdwn create mode 100644 doc/bugs/upgrade_left_untracked_.git-annex__47____42___directories/comment_1_9ca2da52f3c8add0276b72d6099516a6._comment create mode 100644 doc/bugs/upgrade_left_untracked_.git-annex__47____42___directories/comment_2_e14e84b770305893f2fc6e4938359f47._comment create mode 100644 doc/bugs/upgrade_left_untracked_.git-annex__47____42___directories/comment_3_ec04e306c96fd20ab912aea54a8340aa._comment create mode 100644 doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again.mdwn create mode 100644 doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_10_51097a6b84edcc607abc0e6e21ca21f2._comment create mode 100644 doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_1_c34a4009213c410bba3c147ae0552029._comment create mode 100644 doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_2_634542867fd28962c47b7bc3ea022175._comment create mode 100644 doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_3_301f3ff2d203ac4c58a037e553b2c14d._comment create mode 100644 doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_4_82ecdc88ccc1f87386b128adc4ff9af4._comment create mode 100644 doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_6_158b2ba3da815910505899606177d415._comment create mode 100644 doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_6_b068924802f3917e3e005350cb0cc2a2._comment create mode 100644 doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_7_f4772858c927d4a62edc3caf59b5da10._comment create mode 100644 doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_8_d0923d2950357f4444c5ef94ff196ba3._comment create mode 100644 doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_9_7fb30cb80aecc60e48c64846aa185206._comment create mode 100644 doc/bugs/uploads_queued_to_annex-ignore_remotes.mdwn create mode 100644 doc/bugs/uploads_queued_to_annex-ignore_remotes/comment_1_fa1c98f38253db8c2be3604c72eb3726._comment create mode 100644 doc/bugs/using_old_remote_format_generates_irritating_output.mdwn create mode 100644 doc/bugs/using_old_remote_format_generates_irritating_output/comment_1_fceba878f1097e27f056580e8d6d5b31._comment create mode 100644 doc/bugs/using_old_remote_format_generates_irritating_output/comment_2_416992874813f120721a56d88b2bef65._comment create mode 100644 doc/bugs/using_old_remote_format_generates_irritating_output/comment_3_a20f470c5226ac5693eb15146a02b3f5._comment create mode 100644 doc/bugs/using_old_remote_format_generates_irritating_output/comment_4_a81f06191bc03a7aad5929af99f0634e._comment create mode 100644 doc/bugs/using_old_remote_format_generates_irritating_output/comment_5_7438caecf78b4fb5d21f9f31dff95cf2._comment create mode 100644 doc/bugs/utf8.mdwn create mode 100644 doc/bugs/utf8/comment_10_f298b8b480d3ab2dd9c279589afcd0ea._comment create mode 100644 doc/bugs/utf8/comment_11_a8864a46f8154680beeea27449ac6f09._comment create mode 100644 doc/bugs/utf8/comment_12_2202c3479d19d306f31aac5a47b55e7d._comment create mode 100644 doc/bugs/utf8/comment_13_7044d2c5bb1c91ee37eb9868963a1ff2._comment create mode 100644 doc/bugs/utf8/comment_14_656b3caa16ae93b092fb5804fa575a3b._comment create mode 100644 doc/bugs/utf8/comment_15_25b3d4c47c45b72129b17b171a45c5f9._comment create mode 100644 doc/bugs/utf8/comment_16_2aaab9253bbc75012292c7b5a7d55696._comment create mode 100644 doc/bugs/utf8/comment_1_416ad6fb5f7379732129dc5283a7e550._comment create mode 100644 doc/bugs/utf8/comment_2_cd55f6bbeb145fd554f331dcff64f5e1._comment create mode 100644 doc/bugs/utf8/comment_3_bb583a419d6fa4e33e5364c4468b35c6._comment create mode 100644 doc/bugs/utf8/comment_4_cd8a22cfb70d9d21f0a5339ccc52ee93._comment create mode 100644 doc/bugs/utf8/comment_5_14eefd4bee283802e9c462fa20b7835c._comment create mode 100644 doc/bugs/utf8/comment_6_58d8b5bdb9f11e8c344e86a675a075dd._comment create mode 100644 doc/bugs/utf8/comment_7_00fa9672ce55b6bfa885b8a13287ac25._comment create mode 100644 doc/bugs/utf8/comment_8_a01e26fa0fafbc291020f53dbfdf6443._comment create mode 100644 doc/bugs/utf8/comment_9_b7c084be01ce985be51e48503fcba468._comment create mode 100644 doc/bugs/uuid.log_trust.log_and_remote.log_merge_wackiness.mdwn create mode 100644 doc/bugs/version_doesn__39__t_show___34__Feeds__34___but_podcasting_feature_working.mdwn create mode 100644 doc/bugs/version_doesn__39__t_show___34__Feeds__34___but_podcasting_feature_working/comment_1_ce06ba4f65f322362b23797f6190c7c3._comment create mode 100644 doc/bugs/view_logs_fails:_Internal_Server_Error__internal_liftAnnex.mdwn create mode 100644 doc/bugs/view_logs_fails:_Internal_Server_Error__internal_liftAnnex/comment_1_57547f9a480df2c3f7b3997b0fb7039a._comment create mode 100644 doc/bugs/view_logs_fails:_Internal_Server_Error__internal_liftAnnex/comment_2_99f12da3ef01141dc7a9105fcf966793._comment create mode 100644 doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android.mdwn create mode 100644 doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_1_e8866dc15f8fc049229e7451addad1d5._comment create mode 100644 doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_2_ee616b0251ffaace9844cfd7af896c35._comment create mode 100644 doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_3_6b8bd314b647ea3a485f5faf4856f9a9._comment create mode 100644 doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_4_7009b6727ba40bc9bd1b1f939e75d093._comment create mode 100644 doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_5_00ddf7ade6cca758afa838be0b9588cb._comment create mode 100644 doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_6_6137ef0ad01d5600dab6fccbeed9a88b._comment create mode 100644 doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_7_4b79d7ea338d9f70eb80b8cc2c5a21e4._comment create mode 100644 doc/bugs/watch_command_on_OSX_--_hangs_with_a_small_repo.mdwn create mode 100644 doc/bugs/watch_command_on_OSX_--_hangs_with_a_small_repo/comment_1_63f04694610839db0c2381005b15da35._comment create mode 100644 doc/bugs/watch_command_on_OSX_--_hangs_with_a_small_repo/comment_2_8afe4720e301cf7ccf11ff0a23261936._comment create mode 100644 doc/bugs/watch_command_on_OSX_10.7.mdwn create mode 100644 doc/bugs/watcher_commits_unlocked_files.mdwn create mode 100644 doc/bugs/watcher_commits_unlocked_files/comment_1_f70e1912fde0eee59e208307df06b503._comment create mode 100644 doc/bugs/web_app_loops_over_a_non-addable_file.mdwn create mode 100644 doc/bugs/webapp:_difficult_to_abort_adding_a_repository.mdwn create mode 100644 doc/bugs/webapp_hang.mdwn create mode 100644 doc/bugs/webapp_hang/comment_1_08aa908a64d0fe2d50438d01545c3f01._comment create mode 100644 doc/bugs/webapp_hang/comment_2_2a21ac5657128a454f9deb77c4d18057._comment create mode 100644 doc/bugs/webapp_raise_an_internal_server_error_upon_creating_the_initial_repo.mdwn create mode 100644 doc/bugs/webapp_raise_an_internal_server_error_upon_creating_the_initial_repo/comment_1_1bcf0f565eacac851bd21cd428c8e0a5._comment create mode 100644 doc/bugs/webapp_raise_an_internal_server_error_upon_creating_the_initial_repo/comment_2_7dd2483b5b07df8f3b37a34651c05962._comment create mode 100644 doc/bugs/webapp_requires_reload_for_notification_bubbles.mdwn create mode 100644 doc/bugs/webapp_requires_reload_for_notification_bubbles/comment_1_b15480e5dec1ffbebb8cde1ca8d7c9d5._comment create mode 100644 doc/bugs/webapp_requires_reload_for_notification_bubbles/comment_2_8dad57a852e1db804aa38f90f3bb398b._comment create mode 100644 doc/bugs/webapp_shows___34__Added_x_files__34___a_bit_ugly.mdwn create mode 100644 doc/bugs/webapp_usability:_fails_mysteriously_on_newer_repo_layouts.mdwn create mode 100644 doc/bugs/webapp_usability:_put_the_notices_on_the_right.mdwn create mode 100644 doc/bugs/webapp_usability:_put_the_notices_on_the_right/comment_1_ec7a444e09a028b5225bd41fb83442e8._comment create mode 100644 doc/bugs/weird_local_clone_confuses.mdwn create mode 100644 doc/bugs/whereis_outputs_no_informaiton_for_unlocked_files.mdwn create mode 100644 doc/bugs/windows_fails_test___34__recoverEncode__34__.mdwn create mode 100644 doc/bugs/windows_fails_test___34__recoverEncode__34__/comment_1_424b3536e21e02f192f7f2b8e833ed18._comment create mode 100644 doc/bugs/windows_fails_test___34__recoverEncode__34__/comment_2_78db183aa401e2023d7faec5f7a4a573._comment create mode 100644 doc/bugs/windows_fails_test___34__recoverEncode__34__/comment_3_ed2da19eaf0bd0864f6b28816a79bc23._comment create mode 100644 doc/bugs/windows_install_failure.mdwn create mode 100644 doc/bugs/windows_install_failure/comment_1_f339574c7cfa35c1f0dfd515fde457f5._comment create mode 100644 doc/bugs/windows_install_failure/comment_2_1d3364d8f5c4963f3a7e473298ec6ed1._comment create mode 100644 doc/bugs/windows_port_-_can__39__t_directly_access_files.mdwn create mode 100644 doc/bugs/windows_port_-_can__39__t_directly_access_files/comment_1_03ef9d33839173044dcc4f2b37f575d2._comment create mode 100644 doc/bugs/windows_port_-_can__39__t_directly_access_files/comment_2_c65e5491c82908af46fe2c97e048d210._comment create mode 100644 doc/bugs/windows_port_-_git_annex_add_hangs_when_adding_17_files_at_once_or_more_.mdwn create mode 100644 doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_.mdwn create mode 100644 doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_10_b4f5e2d6a0d690f6b0089fa80a3c920b._comment create mode 100644 doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_1_c2092add1430667108a3fdc5e1c9b5f5._comment create mode 100644 doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_2_f0ea453951daf84dbddc653ac64822b6._comment create mode 100644 doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_3_35a8be5ecc9d1b72c38f8ddb47678160._comment create mode 100644 doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_4_29e72997b88f91f84639587b4cede34c._comment create mode 100644 doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_5_2de7f6532de4cbc21737ce53a89d6525._comment create mode 100644 doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_6_80d130b5af829763be77c61a9c5ca306._comment create mode 100644 doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_7_ec199db851952b40e8b18922da574ea4._comment create mode 100644 doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_8_d269fcadea9d5a668e3c6d6cf019f56a._comment create mode 100644 doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_9_908d1b981d56107f29d8972bf11aefc8._comment create mode 100644 doc/bugs/wrong_program_path_in___126____47__.config__47__git-annex__47__program.mdwn create mode 100644 doc/bugs/wrong_program_path_in___126____47__.config__47__git-annex__47__program/comment_1_44c11918d00ead38d40556aade98c0af._comment create mode 100644 doc/bugs/xdg-user-dir_error.mdwn create mode 100644 doc/bugs/xmpp_needs_one_account_per_distinct_repository.mdwn create mode 100644 doc/bugs/xmpp_needs_one_account_per_distinct_repository/comment_1_820732c4dcb15186b4f635c50fdb0805._comment create mode 100644 doc/bugs/yesod-default_is_needed_as_a_dependancy.mdwn create mode 100644 doc/bugs/yesod-form_missing.mdwn create mode 100644 doc/bugs/youtube_support_suddenly_stopped_working.mdwn create mode 100644 doc/builds.mdwn create mode 100644 doc/coding_style.mdwn create mode 100644 doc/comments.mdwn create mode 100644 doc/contact.mdwn create mode 100644 doc/contact/comment_1_12d60f767d90bea94974e1ff6b206d31._comment create mode 100644 doc/contact/comment_2_95b6d868b913418de50ba121d71d2390._comment create mode 100644 doc/contact/comment_3_2cf43bd406673294e6cdbd785c4a0d0c._comment create mode 100644 doc/contact/comment_4_586a506e27379d74fbc0f4b654e89c7d._comment create mode 100644 doc/copies.mdwn create mode 100644 doc/copies/comment_1_af9bee33777fb8a187b714fc8c5fb11d._comment create mode 100644 doc/design.mdwn create mode 100644 doc/design/assistant.mdwn create mode 100644 doc/design/assistant/OSX.mdwn create mode 100644 doc/design/assistant/OSX/comment_1_9290f6e6f265e906b08631224392b7bf._comment create mode 100644 doc/design/assistant/android.mdwn create mode 100644 doc/design/assistant/android/comment_10_316bde8d22628e5e9d4f8dabce1d2ad4._comment create mode 100644 doc/design/assistant/android/comment_1_8be9a74e5fc4641c2bf2e1bb7673dd59._comment create mode 100644 doc/design/assistant/android/comment_2_3dd386ac1b757c73d14f14377b9eedd4._comment create mode 100644 doc/design/assistant/android/comment_3_5dca47a4599d6e88d19193701c5a571b._comment create mode 100644 doc/design/assistant/android/comment_4_054f06311e2b51d73be569f181eb004f._comment create mode 100644 doc/design/assistant/android/comment_5_bb3d36e9d29f2fa77bee6d47ef9917fe._comment create mode 100644 doc/design/assistant/android/comment_6_fee32a831eeb5736fe1dce52e30320c8._comment create mode 100644 doc/design/assistant/android/comment_7_d8e9b0a5287fc96b19dc2cb9da3586ce._comment create mode 100644 doc/design/assistant/android/comment_8_79a7b5bb5f4aaeea4a4e8ced0561701a._comment create mode 100644 doc/design/assistant/android/comment_9_55ea70a6929523d26248ff6409b04a6e._comment create mode 100644 doc/design/assistant/blog.mdwn create mode 100644 doc/design/assistant/blog/day_100__cursed_clouds.mdwn create mode 100644 doc/design/assistant/blog/day_102__very_high_level_programming.mdwn create mode 100644 doc/design/assistant/blog/day_102__very_high_level_programming/comment_1_c028b403261dd66bcf83e6ffd134b80b._comment create mode 100644 doc/design/assistant/blog/day_103__bugfix_day.mdwn create mode 100644 doc/design/assistant/blog/day_104__misc.mdwn create mode 100644 doc/design/assistant/blog/day_104__misc/comment_1_13d7fad2d3f8eab10314784c035e2a16._comment create mode 100644 doc/design/assistant/blog/day_105__lazy_Sunday.mdwn create mode 100644 doc/design/assistant/blog/day_106__lazy_Monday.mdwn create mode 100644 doc/design/assistant/blog/day_107__memory_leak.mdwn create mode 100644 doc/design/assistant/blog/day_108__another_zombie_outbreak.mdwn create mode 100644 doc/design/assistant/blog/day_108__another_zombie_outbreak/comment_1_194c48d65993462f809a2cfaa774a3e2._comment create mode 100644 doc/design/assistant/blog/day_108__another_zombie_outbreak/comment_2_ef5ee5933fcadcb81cc81b816db14bda._comment create mode 100644 doc/design/assistant/blog/day_109__dropping.mdwn create mode 100644 doc/design/assistant/blog/day_10__lsof.mdwn create mode 100644 doc/design/assistant/blog/day_10__lsof/comment_1_9b8c28c85c979f32e5c295b6a03c048e._comment create mode 100644 doc/design/assistant/blog/day_110__more_dropping.mdwn create mode 100644 doc/design/assistant/blog/day_111__config_monitor.mdwn create mode 100644 doc/design/assistant/blog/day_112__and_now_for_something_completely_different.mdwn create mode 100644 doc/design/assistant/blog/day_112__and_now_for_something_completely_different/comment_1_5e4fe1538d9ae1c450b0a6602fc6d29b._comment create mode 100644 doc/design/assistant/blog/day_112__and_now_for_something_completely_different/comment_2_c5a734f611ecc95729904e645583ee43._comment create mode 100644 doc/design/assistant/blog/day_112__and_now_for_something_completely_different/comment_3_46b16dcd0fce07036cd8ed6ed9d2b055._comment create mode 100644 doc/design/assistant/blog/day_112__and_now_for_something_completely_different/comment_4_1fe036e4c65fb4211aa2c394f535344a._comment create mode 100644 doc/design/assistant/blog/day_112__and_now_for_something_completely_different/comment_5_e4ba3568c4efd98f212dd47427a1cf47._comment create mode 100644 doc/design/assistant/blog/day_113__notifier_work.mdwn create mode 100644 doc/design/assistant/blog/day_114__xmpp.mdwn create mode 100644 doc/design/assistant/blog/day_114__xmpp/comment_1_c2b0617a2fc3dc4f19a6be6947913842._comment create mode 100644 doc/design/assistant/blog/day_114__xmpp/comment_2_d14375dfb5791615802dab3c5438f8e2._comment create mode 100644 doc/design/assistant/blog/day_114__xmpp/comment_3_6d72ea32c111e605be30ad2153fc71c9._comment create mode 100644 doc/design/assistant/blog/day_114__xmpp/comment_4_e51d6f854db5f9e74a1aa58bd8923795._comment create mode 100644 doc/design/assistant/blog/day_115__my_new_form.mdwn create mode 100644 doc/design/assistant/blog/day_116__the_segfault.mdwn create mode 100644 doc/design/assistant/blog/day_117__new_topologies.mdwn create mode 100644 doc/design/assistant/blog/day_118__monadic_discontinuity.mdwn create mode 100644 doc/design/assistant/blog/day_119__time_for_testing.mdwn create mode 100644 doc/design/assistant/blog/day_11__freebsd.mdwn create mode 100644 doc/design/assistant/blog/day_120__test_day.mdwn create mode 100644 doc/design/assistant/blog/day_121__buddy_list.mdwn create mode 100644 doc/design/assistant/blog/day_122__xmpp_pairing.mdwn create mode 100644 doc/design/assistant/blog/day_122__xmpp_pairing/comment_1_e95efb23eb2e67e3f11a5c7de56424a7._comment create mode 100644 doc/design/assistant/blog/day_122__xmpp_pairing/comment_2_30e251e73146512bde8b2f69eddeef2e._comment create mode 100644 doc/design/assistant/blog/day_123__xmpp_insanity.mdwn create mode 100644 doc/design/assistant/blog/day_124__git_push_over_xmpp_groundwork.mdwn create mode 100644 doc/design/assistant/blog/day_125__xmpp_push_continues.mdwn create mode 100644 doc/design/assistant/blog/day_126__mr_watson_come_here.mdwn create mode 100644 doc/design/assistant/blog/day_126__mr_watson_come_here/comment_1_ee1361e6b235f4e1c00596ba516b519a._comment create mode 100644 doc/design/assistant/blog/day_126__mr_watson_come_here/comment_2_8eb366ae7efb347bd3bbd9a98e0821b3._comment create mode 100644 doc/design/assistant/blog/day_127__xmpp_syncs.mdwn create mode 100644 doc/design/assistant/blog/day_128__last_xmpp_day.mdwn create mode 100644 doc/design/assistant/blog/day_128__last_xmpp_day/comment_1_fd8c1d6358cb50f4dad8ba11d33d861f._comment create mode 100644 doc/design/assistant/blog/day_128__last_xmpp_day/comment_2_43664b73c71c41d71bc95e665f128106._comment create mode 100644 doc/design/assistant/blog/day_128__last_xmpp_day/comment_3_d369b04f686009a9dbb57b999107a55e._comment create mode 100644 doc/design/assistant/blog/day_128__last_xmpp_day/comment_4_095855d301e7ccd3689ffe507cfb63ee._comment create mode 100644 doc/design/assistant/blog/day_128__last_xmpp_day/comment_5_da7b0586b0b28e1e0fe4126f6543a7bc._comment create mode 100644 doc/design/assistant/blog/day_128__last_xmpp_day/comment_6_2f9ba367e19d77bf52f372b6f0f5938a._comment create mode 100644 doc/design/assistant/blog/day_129__release.mdwn create mode 100644 doc/design/assistant/blog/day_12__freebsd_redux.mdwn create mode 100644 doc/design/assistant/blog/day_12__freebsd_redux/comment_1_5da32cf53f1de27bfe6cec2d294db3e1._comment create mode 100644 doc/design/assistant/blog/day_12__freebsd_redux/comment_2_696d6e22034acf5bb60d80124b72ef2f._comment create mode 100644 doc/design/assistant/blog/day_130__what_now.mdwn create mode 100644 doc/design/assistant/blog/day_130__what_now/comment_1_402f00cc034351d8253a797dd4de55bf._comment create mode 100644 doc/design/assistant/blog/day_131__webdav_groundwork.mdwn create mode 100644 doc/design/assistant/blog/day_132__webdav_continued.mdwn create mode 100644 doc/design/assistant/blog/day_133__webdav_working.mdwn create mode 100644 doc/design/assistant/blog/day_134__box.com_configurator.mdwn create mode 100644 doc/design/assistant/blog/day_135__progress_revisited.mdwn create mode 100644 doc/design/assistant/blog/day_136__misc.mdwn create mode 100644 doc/design/assistant/blog/day_137__Glacier.mdwn create mode 100644 doc/design/assistant/blog/day_138__back.mdwn create mode 100644 doc/design/assistant/blog/day_138__back/comment_1_65a8499b284bed38d2bde1886a54a311._comment create mode 100644 doc/design/assistant/blog/day_139__catch_up.mdwn create mode 100644 doc/design/assistant/blog/day_13__kqueue_continued.mdwn create mode 100644 doc/design/assistant/blog/day_140__release_monday.mdwn create mode 100644 doc/design/assistant/blog/day_141__release_tuesday.mdwn create mode 100644 doc/design/assistant/blog/day_141__release_tuesday/comment_1_a5adea7a726df12f9121c744a036f08d._comment create mode 100644 doc/design/assistant/blog/day_142__filling_in.mdwn create mode 100644 doc/design/assistant/blog/day_143__what_next.mdwn create mode 100644 doc/design/assistant/blog/day_143__what_next/comment_1_40cf25a2ebdd43d8974a28e180e100e5._comment create mode 100644 doc/design/assistant/blog/day_143__what_next/comment_2_af9ccbbc5131e6333c029415141bdb51._comment create mode 100644 doc/design/assistant/blog/day_144__webapp_work.mdwn create mode 100644 doc/design/assistant/blog/day_145__more_webapp_work.mdwn create mode 100644 doc/design/assistant/blog/day_146__meanwhile.mdwn create mode 100644 doc/design/assistant/blog/day_147__direct_mode.mdwn create mode 100644 doc/design/assistant/blog/day_147__direct_mode/comment_1_0bd69532afce9dc04e3d88bfd0aed4b2._comment create mode 100644 doc/design/assistant/blog/day_147__direct_mode/comment_2_3b26f0d081c3bf1037bb872d529ce825._comment create mode 100644 doc/design/assistant/blog/day_148__direct_mode.mdwn create mode 100644 doc/design/assistant/blog/day_149__rainy_day.mdwn create mode 100644 doc/design/assistant/blog/day_14__kqueue_kqueue_kqueue.mdwn create mode 100644 doc/design/assistant/blog/day_14__thinking_about_syncing.mdwn create mode 100644 doc/design/assistant/blog/day_150__12:12.mdwn create mode 100644 doc/design/assistant/blog/day_151__direct_mode_toggle.mdwn create mode 100644 doc/design/assistant/blog/day_152__bugfixes.mdwn create mode 100644 doc/design/assistant/blog/day_152__bugfixes/comment_1_46863a875f9daa6f2c9248b66ff91929._comment create mode 100644 doc/design/assistant/blog/day_152__bugfixes/comment_2_a586e617bc024c8a9ff60f1b8345d74d._comment create mode 100644 doc/design/assistant/blog/day_153__hibernation.mdwn create mode 100644 doc/design/assistant/blog/day_154__direct_mode_merging.mdwn create mode 100644 doc/design/assistant/blog/day_155__bugfixes.mdwn create mode 100644 doc/design/assistant/blog/day_156_and_157__direct_mode_assistant.mdwn create mode 100644 doc/design/assistant/blog/day_158__fsevents.mdwn create mode 100644 doc/design/assistant/blog/day_158__fsevents/comment_1_b278372ac6399f64d5fa9da178278a6d._comment create mode 100644 doc/design/assistant/blog/day_158__fsevents/comment_2_2d5ce9b2807068c3517e185945662bd2._comment create mode 100644 doc/design/assistant/blog/day_159__fsevents_and_assistant.mdwn create mode 100644 doc/design/assistant/blog/day_159__fsevents_and_assistant/comment_1_b85f446c3fa8d703a2a8882825c6f33f._comment create mode 100644 doc/design/assistant/blog/day_159__fsevents_and_assistant/comment_2_a150b404e0c39e0bb2f7dd00cda63cdc._comment create mode 100644 doc/design/assistant/blog/day_159__fsevents_and_assistant/comment_3_37abc41bae23a1d7de0d19d952aec492._comment create mode 100644 doc/design/assistant/blog/day_15__its_aliiive.mdwn create mode 100644 doc/design/assistant/blog/day_160__finishing_up_direct_mode.mdwn create mode 100644 doc/design/assistant/blog/day_161__release_day.mdwn create mode 100644 doc/design/assistant/blog/day_161__release_day/comment_1_e82c67f3ce216618149537bba1e0b850._comment create mode 100644 doc/design/assistant/blog/day_161__release_day/comment_2_b1fe96fd818935c0497b78bb8ad32ffa._comment create mode 100644 doc/design/assistant/blog/day_161__release_day/comment_3_40bac0e1756aa77bb966c4654857141c._comment create mode 100644 doc/design/assistant/blog/day_161__release_day/comment_4_af65656b0d1179636937595868bb97b0._comment create mode 100644 doc/design/assistant/blog/day_161__release_day/comment_5_0c05caaaf9588e124585041bf5f45d75._comment create mode 100644 doc/design/assistant/blog/day_161__release_day/comment_6_5dfb5f428633d6062925f61af2b8829b._comment create mode 100644 doc/design/assistant/blog/day_161__release_day/comment_7_ac4effb381b08d94d4a2d2482e92c89a._comment create mode 100644 doc/design/assistant/blog/day_161__release_day/comment_8_32600e89e3098e52a1280895e03b3f86._comment create mode 100644 doc/design/assistant/blog/day_161__release_day/comment_9_07e5d0c3cad0ce2bd4943e53b61f1767._comment create mode 100644 doc/design/assistant/blog/day_162__UI.mdwn create mode 100644 doc/design/assistant/blog/day_163__free_features.mdwn create mode 100644 doc/design/assistant/blog/day_164__bugfixes.mdwn create mode 100644 doc/design/assistant/blog/day_165__release_day.mdwn create mode 100644 doc/design/assistant/blog/day_166__a_short_long_day.mdwn create mode 100644 doc/design/assistant/blog/day_167__safe_direct_mode_transfers.mdwn create mode 100644 doc/design/assistant/blog/day_167__safe_direct_mode_transfers/comment_1_f1aa64fe803d8c14b250a4e98b88142a._comment create mode 100644 doc/design/assistant/blog/day_167__safe_direct_mode_transfers/comment_2_5ce1db84c9ead713f1272c4975645b93._comment create mode 100644 doc/design/assistant/blog/day_168__back_to_theme.mdwn create mode 100644 doc/design/assistant/blog/day_168__back_to_theme/comment_1_f248780bfcbd0384d9d72c2633a4ea46._comment create mode 100644 doc/design/assistant/blog/day_168__back_to_theme/comment_2_5beba073373b8e75a32d1fcfdc1a0782._comment create mode 100644 doc/design/assistant/blog/day_169__direct_mode_is_safe.mdwn create mode 100644 doc/design/assistant/blog/day_169__direct_mode_is_safe/comment_1_65f87656c4e6bc7cdb614f53961341c9._comment create mode 100644 doc/design/assistant/blog/day_169__direct_mode_is_safe/comment_2_a116a402a126c62be54c06afd82439ab._comment create mode 100644 doc/design/assistant/blog/day_16__more_robust_syncing.mdwn create mode 100644 doc/design/assistant/blog/day_16__more_robust_syncing/comment_1_23e7a90429e4431f90787cd016ebe188._comment create mode 100644 doc/design/assistant/blog/day_16__more_robust_syncing/comment_2_8e7e7cd27791bb47625e60a284e9c802._comment create mode 100644 doc/design/assistant/blog/day_170__bugfixes_and_release.mdwn create mode 100644 doc/design/assistant/blog/day_171__logs.mdwn create mode 100644 doc/design/assistant/blog/day_172__short_day.mdwn create mode 100644 doc/design/assistant/blog/day_172__short_day/comment_1_b75e26b77a23a45da1c4c3bca1399246._comment create mode 100644 doc/design/assistant/blog/day_173__snow_day.mdwn create mode 100644 doc/design/assistant/blog/day_174__last_weekend_before_AU.mdwn create mode 100644 doc/design/assistant/blog/day_174__last_weekend_before_AU/comment_1_05a8fd47f54373331741cc869a53b0c3._comment create mode 100644 doc/design/assistant/blog/day_174__last_weekend_before_AU/comment_2_fc8e65eef954c4caa8321c2fe8b711b7._comment create mode 100644 doc/design/assistant/blog/day_174__last_weekend_before_AU/comment_3_399534f540d85cac067fbb7be9d373b4._comment create mode 100644 doc/design/assistant/blog/day_175__pacific_features.mdwn create mode 100644 doc/design/assistant/blog/day_175__pacific_features/comment_1_c3ee4386f872b7c76aaecfa638b368cb._comment create mode 100644 doc/design/assistant/blog/day_176__thread_management.mdwn create mode 100644 doc/design/assistant/blog/day_178__bus_hacking.mdwn create mode 100644 doc/design/assistant/blog/day_179__brief_updates.mdwn create mode 100644 doc/design/assistant/blog/day_179__brief_updates/comment_1_920a84457d40358507a3eb817a4568d9._comment create mode 100644 doc/design/assistant/blog/day_17__push_queue_prune.mdwn create mode 100644 doc/design/assistant/blog/day_180__back.mdwn create mode 100644 doc/design/assistant/blog/day_181__triage.mdwn create mode 100644 doc/design/assistant/blog/day_182__it_begins.mdwn create mode 100644 doc/design/assistant/blog/day_183__plan_b.mdwn create mode 100644 doc/design/assistant/blog/day_184__just_wanna_run_something.mdwn create mode 100644 doc/design/assistant/blog/day_184__just_wanna_run_something/comment_1_689adac7e26cb0b0a4e7ecc787cfd716._comment create mode 100644 doc/design/assistant/blog/day_185__android_liftoff.mdwn create mode 100644 doc/design/assistant/blog/day_185__android_liftoff/comment_1_b7d28010a72619a7e9a5ad4f2a0d6c07._comment create mode 100644 doc/design/assistant/blog/day_185__android_liftoff/comment_2_ddeb24e86fafb7dae93142cc02767aad._comment create mode 100644 doc/design/assistant/blog/day_186__Android_success.mdwn create mode 100644 doc/design/assistant/blog/day_186__Android_success/comment_1_1629da240ca7db5f8a32059f561fd435._comment create mode 100644 doc/design/assistant/blog/day_187__porting_utilities.mdwn create mode 100644 doc/design/assistant/blog/day_187__porting_utilities/comment_1_0e6a3f4fe8e09f247fa04156bc60f8c7._comment create mode 100644 doc/design/assistant/blog/day_188__crippled_filesystem_support.mdwn create mode 100644 doc/design/assistant/blog/day_188__crippled_filesystem_support/comment_1_32a296fce23ae4b1e18bd5a9964bf619._comment create mode 100644 doc/design/assistant/blog/day_189__more_crippling.mdwn create mode 100644 doc/design/assistant/blog/day_18__merging.mdwn create mode 100644 doc/design/assistant/blog/day_18__merging/comment_1_7a553ad559519f3b3e3cd20115b4c44e._comment create mode 100644 doc/design/assistant/blog/day_190-191__weekend.mdwn create mode 100644 doc/design/assistant/blog/day_190-191__weekend/comment_1_dbd692d12c14d08acd7d73a655b34e8b._comment create mode 100644 doc/design/assistant/blog/day_190-191__weekend/comment_2_c813830e53471a9732e010a748d574fc._comment create mode 100644 doc/design/assistant/blog/day_192_193__more_porting.mdwn create mode 100644 doc/design/assistant/blog/day_194__nice_moment.mdwn create mode 100644 doc/design/assistant/blog/day_195__real_android_app.mdwn create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_10_0112007552b30cd9bfeac614a1e399c4._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_11_230d3c169c713f613b9d607d84ce5092._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_12_8d74ad2a61c02272758d157282ad56ec._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_13_4f6bc0680f2debd638933968a26975e0._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_14_71539c62608866464e8faa76bc522a55._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_15_e1b205289721ae79ac7fbed2f44018b2._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_1_4bc0aeae4fa1116944644c64feaf9697._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_2_17bb6e7565d4c757f6c1e3514c22f47d._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_3_cd8a6bec0f7c6843dd11d3266f25f864._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_4_2d2eee4bcbbd1d069a80bff5edc90c3c._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_6_3d96568c469a8c53a982f304eae5e7d4._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_6_e8667c47d07fc842cf0fe2ebbfbc1c58._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_7_cf8da7720ddc20b05955ee671ca4acd5._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_8_f4709bdbc739182819b648fd6aa00531._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_9_e66af12c7eca0d457b8406e9fb4b69be._comment create mode 100644 doc/design/assistant/blog/day_196__android_bugfixes.mdwn create mode 100644 doc/design/assistant/blog/day_197__template_haskell.mdwn create mode 100644 doc/design/assistant/blog/day_197__template_haskell/comment_1_82d9f9508929d84abf7b718c59436ae8._comment create mode 100644 doc/design/assistant/blog/day_198__bugfixes.mdwn create mode 100644 doc/design/assistant/blog/day_198__bugfixes/comment_1_5a15b5bad0f9ba2423d2aebe440ac0ea._comment create mode 100644 doc/design/assistant/blog/day_198__bugfixes/comment_2_36d94b838e5e65c85e7afaabe8a578f1._comment create mode 100644 doc/design/assistant/blog/day_198__bugfixes/comment_3_ae9b74341a3bc6e1e84d2c0ca4c5f612._comment create mode 100644 doc/design/assistant/blog/day_198__bugfixes/comment_4_5a4827227c03bcff3b1e4c44b531f816._comment create mode 100644 doc/design/assistant/blog/day_198__bugfixes/comment_5_9c5f4c85217e898be4c57c615e53c36f._comment create mode 100644 doc/design/assistant/blog/day_198__bugfixes/comment_6_bccf1abfb7f56d97673158f3ccfce511._comment create mode 100644 doc/design/assistant/blog/day_198__bugfixes/comment_7_6f1b51b002cc5d2b505d80e3e04bf6f3._comment create mode 100644 doc/design/assistant/blog/day_198__bugfixes/comment_8_8a3542437663028b17442818eba3f7c5._comment create mode 100644 doc/design/assistant/blog/day_199__wrapping_up_Android_for_now.mdwn create mode 100644 doc/design/assistant/blog/day_199__wrapping_up_Android_for_now/comment_1_ec57358afc7e78d2860aa4237793832d._comment create mode 100644 doc/design/assistant/blog/day_19__random_improvements.mdwn create mode 100644 doc/design/assistant/blog/day_1__inotify.mdwn create mode 100644 doc/design/assistant/blog/day_200__release_day.mdwn create mode 100644 doc/design/assistant/blog/day_200__release_day/comment_10_40cfe9bfd9e611fd734dbb5aad348aa3._comment create mode 100644 doc/design/assistant/blog/day_200__release_day/comment_11_b26890fdae575d42170988073fb2e45d._comment create mode 100644 doc/design/assistant/blog/day_200__release_day/comment_13_710a30c5d31bf549833ecfe9a0997c94._comment create mode 100644 doc/design/assistant/blog/day_200__release_day/comment_13_b6f62ab7e810ba6d3a43f0ead370c79a._comment create mode 100644 doc/design/assistant/blog/day_200__release_day/comment_1_a68e1ed7829b49086c567d97ddc09912._comment create mode 100644 doc/design/assistant/blog/day_200__release_day/comment_2_39d3ad0a029fe56e96f97d28d17fbbd2._comment create mode 100644 doc/design/assistant/blog/day_200__release_day/comment_3_5b752d6a8d74e61190f09384b6108206._comment create mode 100644 doc/design/assistant/blog/day_200__release_day/comment_4_881274ae0d6230bb4cafa4151ad72b49._comment create mode 100644 doc/design/assistant/blog/day_200__release_day/comment_5_e220059be77cf0ef396f37a4f9ccf9b5._comment create mode 100644 doc/design/assistant/blog/day_200__release_day/comment_6_ec2152151188dd252cdb61c68cfc12e4._comment create mode 100644 doc/design/assistant/blog/day_200__release_day/comment_7_42572411617c287368482bb9dcf94324._comment create mode 100644 doc/design/assistant/blog/day_200__release_day/comment_8_6b69aa81a9ba4e07e547ed1869946d51._comment create mode 100644 doc/design/assistant/blog/day_200__release_day/comment_9_b070a2e4151d9fbf43d7906efa78515f._comment create mode 100644 doc/design/assistant/blog/day_201__real_Android_wrapup.mdwn create mode 100644 doc/design/assistant/blog/day_201__real_Android_wrapup/comment_1_88b9950c51324f0bb89c5646b3170952._comment create mode 100644 doc/design/assistant/blog/day_201__real_Android_wrapup/fib.png create mode 100644 doc/design/assistant/blog/day_201__working_web_server.mdwn create mode 100644 doc/design/assistant/blog/day_203__procrastination.mdwn create mode 100644 doc/design/assistant/blog/day_204__deprocrastination.mdwn create mode 100644 doc/design/assistant/blog/day_205_206__rainy_day__snow_day.mdwn create mode 100644 doc/design/assistant/blog/day_207__XMPP.mdwn create mode 100644 doc/design/assistant/blog/day_208__bugfixes.mdwn create mode 100644 doc/design/assistant/blog/day_209__The_Bug.mdwn create mode 100644 doc/design/assistant/blog/day_20__data_transfer_design.mdwn create mode 100644 doc/design/assistant/blog/day_210__spring.mdwn create mode 100644 doc/design/assistant/blog/day_211__zooming_along.mdwn create mode 100644 doc/design/assistant/blog/day_212__accidental_all_nighter.mdwn create mode 100644 doc/design/assistant/blog/day_212__accidental_all_nighter/comment_1_6ee1f8056eedb6eb18013faf8f5ec212._comment create mode 100644 doc/design/assistant/blog/day_212__accidental_all_nighter/comment_2_07c83d75bb105bb77ada07359ed0ea7a._comment create mode 100644 doc/design/assistant/blog/day_212__accidental_all_nighter/comment_3_2c904d33f4f14807fbe718a01e98800a._comment create mode 100644 doc/design/assistant/blog/day_212__accidental_all_nighter/comment_4_59ec5c1cab75df87293800a7a03fe9c6._comment create mode 100644 doc/design/assistant/blog/day_212__accidental_all_nighter/comment_5_13893f106e835dcc52e03c7c6740c35b._comment create mode 100644 doc/design/assistant/blog/day_213__costs.mdwn create mode 100644 doc/design/assistant/blog/day_214__release_day.mdwn create mode 100644 doc/design/assistant/blog/day_215__dashboard_UI_refresh.mdwn create mode 100644 doc/design/assistant/blog/day_216__more_bugfixes.mdwn create mode 100644 doc/design/assistant/blog/day_216__more_bugfixes/comment_1_299462bcdd0e4f6cd7895b5f40ca00ad._comment create mode 100644 doc/design/assistant/blog/day_216__more_bugfixes/comment_2_1913d65dfe4ba08379d82a4a2ca91c40._comment create mode 100644 doc/design/assistant/blog/day_216__more_bugfixes/comment_3_92c774599a78540ad398afcd1d05f7ce._comment create mode 100644 doc/design/assistant/blog/day_217__nothing.mdwn create mode 100644 doc/design/assistant/blog/day_219__bug_triage.mdwn create mode 100644 doc/design/assistant/blog/day_219__bug_triage/comment_1_c6b977a969cacdce62987a439b7686f5._comment create mode 100644 doc/design/assistant/blog/day_21__transfer_tracking.mdwn create mode 100644 doc/design/assistant/blog/day_220__performance.mdwn create mode 100644 doc/design/assistant/blog/day_221__this_and_that.mdwn create mode 100644 doc/design/assistant/blog/day_222__back.mdwn create mode 100644 doc/design/assistant/blog/day_222__back/comment_1_f05b48231a1ee0cffba7d66e112e5551._comment create mode 100644 doc/design/assistant/blog/day_222__back/comment_2_4d5f003ccd81580017ebf0dc31bc9cda._comment create mode 100644 doc/design/assistant/blog/day_223__progress_revisited.mdwn create mode 100644 doc/design/assistant/blog/day_224__annex.largefiles.mdwn create mode 100644 doc/design/assistant/blog/day_224__annex.largefiles/comment_1_408e4021b18f7ff5548d2d19ab558922._comment create mode 100644 doc/design/assistant/blog/day_224__annex.largefiles/comment_2_b24d1da2bc4307ded0216daffb8f9336._comment create mode 100644 doc/design/assistant/blog/day_225__back_from_the_dead.mdwn create mode 100644 doc/design/assistant/blog/day_225__back_from_the_dead/comment_1_9ac37c3b5c4c72ec8a39dce00bcbe420._comment create mode 100644 doc/design/assistant/blog/day_225__back_from_the_dead/comment_2_26125dd9ef2bd10b597d14b2c6180952._comment create mode 100644 doc/design/assistant/blog/day_226__poll_results.mdwn create mode 100644 doc/design/assistant/blog/day_226__poll_results/comment_1_1ed980472214be6d0a8cf55f37797fda._comment create mode 100644 doc/design/assistant/blog/day_226__poll_results/comment_2_6823b0a9a8037f1a5214db4db98fb16e._comment create mode 100644 doc/design/assistant/blog/day_227__bigfixing_all_day_today.mdwn create mode 100644 doc/design/assistant/blog/day_228__more_work_on_repository_removals.mdwn create mode 100644 doc/design/assistant/blog/day_229__rainy_day_bugfixes.mdwn create mode 100644 doc/design/assistant/blog/day_22__horrible_option_parsing_hack.mdwn create mode 100644 doc/design/assistant/blog/day_230__Mom.mdwn create mode 100644 doc/design/assistant/blog/day_230__Mom/comment_1_696bba2246c8a9e6ce4aed3071bcc96c._comment create mode 100644 doc/design/assistant/blog/day_230__Mom/comment_2_2fa295ab6db0828cb725cfcfb6777822._comment create mode 100644 doc/design/assistant/blog/day_230__Mom/comment_3_fafd7abec629290418334ddb015bf62c._comment create mode 100644 doc/design/assistant/blog/day_230__Mom/comment_4_450cac0f2e82c94fd34b527ae05ef1b8._comment create mode 100644 doc/design/assistant/blog/day_231__insert_title.mdwn create mode 100644 doc/design/assistant/blog/day_232__headless_webapp.mdwn create mode 100644 doc/design/assistant/blog/day_232__headless_webapp/comment_1_0fdd77d143ecba6fdb9f75cb6fc37bfb._comment create mode 100644 doc/design/assistant/blog/day_232__headless_webapp/comment_2_0784a2a73c3e2945f3d3f2577b3b9c9c._comment create mode 100644 doc/design/assistant/blog/day_232__headless_webapp/comment_3_ccb9fa22422fb913b6a496ebe65c49fb._comment create mode 100644 doc/design/assistant/blog/day_232__headless_webapp/comment_4_ceba4468760a2525960327698431cee2._comment create mode 100644 doc/design/assistant/blog/day_233__taxes.mdwn create mode 100644 doc/design/assistant/blog/day_233__taxes/comment_1_9473ffdc42595af9c293fbcd5a1cdb54._comment create mode 100644 doc/design/assistant/blog/day_233__taxes/comment_2_5feed8d7053ba03812ccda8c61fd9775._comment create mode 100644 doc/design/assistant/blog/day_234__clean_shutdown.mdwn create mode 100644 doc/design/assistant/blog/day_235__birthday.mdwn create mode 100644 doc/design/assistant/blog/day_235__birthday/comment_1_db558b071067c1e63cde05cca0551094._comment create mode 100644 doc/design/assistant/blog/day_235__birthday/comment_2_d1a2c1124781118267599457ae9e0512._comment create mode 100644 doc/design/assistant/blog/day_235__birthday/comment_3_b853508d1d15234958b9f4a39277e45c._comment create mode 100644 doc/design/assistant/blog/day_235__birthday/comment_5_73aad3398a43bc4d28bca9bf635fa757._comment create mode 100644 doc/design/assistant/blog/day_236__evil_splicer.mdwn create mode 100644 doc/design/assistant/blog/day_237__gnome-keyring_craziness.mdwn create mode 100644 doc/design/assistant/blog/day_237__gnome-keyring_craziness/comment_1_0cb088b732881d1fa92493aa1fd93d43._comment create mode 100644 doc/design/assistant/blog/day_237__gnome-keyring_craziness/comment_2_b855fd710954beebaafe6d2bd03eb368._comment create mode 100644 doc/design/assistant/blog/day_238__back_to_Android.mdwn create mode 100644 doc/design/assistant/blog/day_239__bugfixes_and_frustration.mdwn create mode 100644 doc/design/assistant/blog/day_23__transfer_watching.mdwn create mode 100644 doc/design/assistant/blog/day_240__it_builds.mdwn create mode 100644 doc/design/assistant/blog/day_240__it_builds/comment_1_151840ae0020ea63b2f041488c905386._comment create mode 100644 doc/design/assistant/blog/day_241__cleanup.mdwn create mode 100644 doc/design/assistant/blog/day_241__cleanup/comment_1_0e283cdf66a25b3cc9423fe651084cb9._comment create mode 100644 doc/design/assistant/blog/day_242__more_porting.mdwn create mode 100644 doc/design/assistant/blog/day_243__in_the_field.mdwn create mode 100644 doc/design/assistant/blog/day_244__android_porting.mdwn create mode 100644 doc/design/assistant/blog/day_245__misc.mdwn create mode 100644 doc/design/assistant/blog/day_245__misc/comment_1_3a2976617bb0cdc206fb1397a2ef1177._comment create mode 100644 doc/design/assistant/blog/day_245__misc/comment_2_e0f9704e91fedca8ff26356f354cc1c3._comment create mode 100644 doc/design/assistant/blog/day_245__misc/comment_3_93003a0d0983efbdc046d7459be194b0._comment create mode 100644 doc/design/assistant/blog/day_246__bug_treadmill.mdwn create mode 100644 doc/design/assistant/blog/day_246__bug_treadmill/comment_1_f76f653364fe2b97e85e8356c93b0fce._comment create mode 100644 doc/design/assistant/blog/day_247__performance_tuning.mdwn create mode 100644 doc/design/assistant/blog/day_248__Internet_Archive.mdwn create mode 100644 doc/design/assistant/blog/day_249__quiet_day.mdwn create mode 100644 doc/design/assistant/blog/day_24__airport_digressions.mdwn create mode 100644 doc/design/assistant/blog/day_250__stymied.mdwn create mode 100644 doc/design/assistant/blog/day_250__stymied/comment_1_330a10d447ccc3db03fcbfe571dbb404._comment create mode 100644 doc/design/assistant/blog/day_251__xmpp_improvements.mdwn create mode 100644 doc/design/assistant/blog/day_252__release_day.mdwn create mode 100644 doc/design/assistant/blog/day_253__OMG.mdwn create mode 100644 doc/design/assistant/blog/day_253__OMG/comment_1_bbdc61092771163e65a90a4755a807d8._comment create mode 100644 doc/design/assistant/blog/day_254__Android_app_polishing.mdwn create mode 100644 doc/design/assistant/blog/day_254__Android_app_polishing/comment_1_37f4ff5227566ce4b3fa69fc32568841._comment create mode 100644 doc/design/assistant/blog/day_254__Android_app_polishing/comment_2_58bbb105bdbb72bba85c3622195f43b9._comment create mode 100644 doc/design/assistant/blog/day_255__Debian_release_day.mdwn create mode 100644 doc/design/assistant/blog/day_256__8bit.mdwn create mode 100644 doc/design/assistant/blog/day_256__8bit/comment_1_f9b50263e3997d4c5b9836a2e0a346d7._comment create mode 100644 doc/design/assistant/blog/day_257__rainy_day.mdwn create mode 100644 doc/design/assistant/blog/day_258__beginning_of_the_end.mdwn create mode 100644 doc/design/assistant/blog/day_259__Android_dominos_toppling.mdwn create mode 100644 doc/design/assistant/blog/day_259__Android_dominos_toppling/comment_1_0b4a6e4893b0157e4768b46468dbbb87._comment create mode 100644 doc/design/assistant/blog/day_259__Android_dominos_toppling/comment_2_1ebc5aff5d217e1392cb7c8bb6c5156b._comment create mode 100644 doc/design/assistant/blog/day_259__Android_dominos_toppling/comment_3_eed7792f6142f3fc74d3c384bb16559b._comment create mode 100644 doc/design/assistant/blog/day_25__transfer_queueing.mdwn create mode 100644 doc/design/assistant/blog/day_25__transfer_queueing/comment_1_59fd4f1ffe96c412f613dc86276e7dbd._comment create mode 100644 doc/design/assistant/blog/day_25__transfer_queueing/comment_2_93bf768a67117e873af5732ecf08dc78._comment create mode 100644 doc/design/assistant/blog/day_260__Windows_dev_environment.mdwn create mode 100644 doc/design/assistant/blog/day_261__Windows_first_stage_complete.mdwn create mode 100644 doc/design/assistant/blog/day_262__DOS_path_separators.mdwn create mode 100644 doc/design/assistant/blog/day_262__DOS_path_separators/comment_1_45ecae90b22e31202c21083980d6b567._comment create mode 100644 doc/design/assistant/blog/day_263_catching_up.mdwn create mode 100644 doc/design/assistant/blog/day_263_catching_up/comment_1_9023da0573dfc81644d68128adb331a7._comment create mode 100644 doc/design/assistant/blog/day_264__Windows_second_stage_complete.mdwn create mode 100644 doc/design/assistant/blog/day_264__Windows_second_stage_complete/comment_1_42a7502d6ece75520eb59a76fdb1e2f0._comment create mode 100644 doc/design/assistant/blog/day_264__Windows_second_stage_complete/comment_2_f2b11322ac87e2a36cddc035b2c3c1ea._comment create mode 100644 doc/design/assistant/blog/day_264__Windows_second_stage_complete/comment_3_ea6ee05acb946fc7e8d95e62647cfa2a._comment create mode 100644 doc/design/assistant/blog/day_264__Windows_second_stage_complete/comment_4_9ce106baf28b7f75f7f6febd7bfcea70._comment create mode 100644 doc/design/assistant/blog/day_265__correctness.mdwn create mode 100644 doc/design/assistant/blog/day_265__correctness/comment_1_e8959a6df87eb92310947e66c7471e97._comment create mode 100644 doc/design/assistant/blog/day_265__correctness/comment_2_0cb953fcc085eedb34e65c227309ede7._comment create mode 100644 doc/design/assistant/blog/day_265__correctness/comment_3_df57628a8969af2995732e7ea2a0fae3._comment create mode 100644 doc/design/assistant/blog/day_266__release_day.mdwn create mode 100644 doc/design/assistant/blog/day_266__release_day/comment_1_92c8d1d9216b46b07dfe69bbc77a923e._comment create mode 100644 doc/design/assistant/blog/day_267__windows_autobuilder.mdwn create mode 100644 doc/design/assistant/blog/day_267__windows_autobuilder/comment_1_978b584d86395f2f621b0e1f7c5e70d7._comment create mode 100644 doc/design/assistant/blog/day_267__windows_autobuilder/comment_2_8f978d2811c8fbf11e3d12f245bdb52b._comment create mode 100644 doc/design/assistant/blog/day_268__core_monad_change.mdwn create mode 100644 doc/design/assistant/blog/day_269__bugfixes.mdwn create mode 100644 doc/design/assistant/blog/day_26__dying_drives.mdwn create mode 100644 doc/design/assistant/blog/day_270__release_and_xmpp.mdwn create mode 100644 doc/design/assistant/blog/day_271__more_xmpp.mdwn create mode 100644 doc/design/assistant/blog/day_272__fuzz_tester.mdwn create mode 100644 doc/design/assistant/blog/day_273-274__fun.mdwn create mode 100644 doc/design/assistant/blog/day_275__working_hard_or.mdwn create mode 100644 doc/design/assistant/blog/day_276__fuzzing_continues.mdwn create mode 100644 doc/design/assistant/blog/day_276__fuzzing_continues/comment_1_f5dd0658511a1063c2eb025b0fe98426._comment create mode 100644 doc/design/assistant/blog/day_276__fuzzing_continues/comment_2_a56c4c26a9e7bb8cfe3f598dbeed0813._comment create mode 100644 doc/design/assistant/blog/day_277__private_static_protected_void.mdwn create mode 100644 doc/design/assistant/blog/day_278__winding_down.mdwn create mode 100644 doc/design/assistant/blog/day_279__final_release_prep.mdwn create mode 100644 doc/design/assistant/blog/day_27__robust_transfers.mdwn create mode 100644 doc/design/assistant/blog/day_28-35__threaded_runtime_tarpit.mdwn create mode 100644 doc/design/assistant/blog/day_280__yesod.mdwn create mode 100644 doc/design/assistant/blog/day_280__yesod/comment_1_a42213a8cef71f2b54db18606028136d._comment create mode 100644 doc/design/assistant/blog/day_281__back.mdwn create mode 100644 doc/design/assistant/blog/day_281__back/comment_1_128809c5a2a9f5cc345a10fdbf55be01._comment create mode 100644 doc/design/assistant/blog/day_281__back/comment_2_6d0bbdf6ebaff9da399804570f0e606d._comment create mode 100644 doc/design/assistant/blog/day_282-283__caught_up.mdwn create mode 100644 doc/design/assistant/blog/day_284__porting.mdwn create mode 100644 doc/design/assistant/blog/day_285__fixed_the_archive_directory_loop.mdwn create mode 100644 doc/design/assistant/blog/day_285__fixed_the_archive_directory_loop/comment_1_1065e756dc6d66aefd214eb8ac5ebe1d._comment create mode 100644 doc/design/assistant/blog/day_286__Windows_test_suite.mdwn create mode 100644 doc/design/assistant/blog/day_287__niceness.mdwn create mode 100644 doc/design/assistant/blog/day_288__success_stories.mdwn create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_10_9ddf57b8ae0241268bb33bec1b169e4c._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_11_50b8a597bd8677608f2ef176443f23f3._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_12_f2df427cf3608377e9a52d8bdeadb26f._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_13_8762efed97f21eeba8f0a7be45bd924a._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_14_55e1bb15c3a93d582d110f8173ceefc2._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_15_5749aef8b585b293385b20b75c40f9d8._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_16_911c6d2764906cad7d6324835441ed34._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_17_eb6aa8af5aa70877255a11d132d51aba._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_18_9a57de4cea407a73b2d023d85afdccc6._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_19_1767c86067bee35941004282b96b8e95._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_1_22b28ca3d4d3283ad8c21ae052fb9752._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_20_1d47f3e1b9f0081649cedae4288bac83._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_21_31d3f58cad83cb1ecc4821a15ca258d8._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_22_b512bd2bf29dfaab6b36bf204518fdb6._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_2_343333356de20e170edb8020faa7400d._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_3_4e4034bec789543b562ac263df3e21dd._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_4_0c52794c77a9b7afc5112f5edf9cb793._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_5_7ca419aa3a187857b19268572d5df297._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_6_3edd56b3b04f19faba8d75cca285a662._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_7_146331ae2de25a6dc3595dffab9514de._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_8_72be9307e75eb120451f3d6ab7c8165e._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_9_c27eb0a4181e85a3eed41130402350bf._comment create mode 100644 doc/design/assistant/blog/day_289__back_in_the_swing.mdwn create mode 100644 doc/design/assistant/blog/day_290__https_release.mdwn create mode 100644 doc/design/assistant/blog/day_291__--all.mdwn create mode 100644 doc/design/assistant/blog/day_291__--all/comment_1_eaa9fef19a035bef9c439e87d47c834b._comment create mode 100644 doc/design/assistant/blog/day_291__--all/comment_2_90bbc26bf92048de7cbaf5fb719c9593._comment create mode 100644 doc/design/assistant/blog/day_291__--all/comment_3_75006e9909425dcbf86415a9f7c90372._comment create mode 100644 doc/design/assistant/blog/day_291__--all/comment_4_5440449bbc5a353f7430f72e19c35e92._comment create mode 100644 doc/design/assistant/blog/day_292__bugfixes.mdwn create mode 100644 doc/design/assistant/blog/day_292__bugfixes/comment_1_bbac3878d80f7540d229183c56664784._comment create mode 100644 doc/design/assistant/blog/day_292__bugfixes/comment_2_8c9e5291ceb257f3a938af0ad967c5d7._comment create mode 100644 doc/design/assistant/blog/day_292__bugfixes/comment_3_02f875e8edd30f47939249f16d92712b._comment create mode 100644 doc/design/assistant/blog/day_293__gpg_builds.mdwn create mode 100644 doc/design/assistant/blog/day_293__gpg_builds/comment_1_4f152de8ea5aca4ec381d439e2a821f7._comment create mode 100644 doc/design/assistant/blog/day_293__gpg_builds/comment_2_42f625638638bc875379f6c604d6f673._comment create mode 100644 doc/design/assistant/blog/day_294__release_day.mdwn create mode 100644 doc/design/assistant/blog/day_295__balls_in_the_air.mdwn create mode 100644 doc/design/assistant/blog/day_296__new_crowdfunding_campaign.mdwn create mode 100644 doc/design/assistant/blog/day_296__new_crowdfunding_campaign/comment_1_cccad1a5103c504d21d0f8e69bb39e1b._comment create mode 100644 doc/design/assistant/blog/day_296__new_crowdfunding_campaign/comment_2_4fef7bd9c8e15cd57df365fadb95717f._comment create mode 100644 doc/design/assistant/blog/day_296__new_crowdfunding_campaign/comment_3_0b9258a1f5079e53c60138f06d0c63b1._comment create mode 100644 doc/design/assistant/blog/day_296__new_crowdfunding_campaign/comment_4_46183b97ca904bc06e46569c30db2edc._comment create mode 100644 doc/design/assistant/blog/day_297__back_to_work.mdwn create mode 100644 doc/design/assistant/blog/day_297__back_to_work/comment_1_e300feb821bfe7b76b2cec4376d16ffa._comment create mode 100644 doc/design/assistant/blog/day_298__exceptional.mdwn create mode 100644 doc/design/assistant/blog/day_299__bugfixing.mdwn create mode 100644 doc/design/assistant/blog/day_2__races.mdwn create mode 100644 doc/design/assistant/blog/day_300__new_logo.mdwn create mode 100644 doc/design/assistant/blog/day_300__new_logo/comment_1_9fc64e33863b9fce00f6a03417a91e36._comment create mode 100644 doc/design/assistant/blog/day_300__new_logo/comment_2_e8aac0298f90004e81492d2c7f85eda0._comment create mode 100644 doc/design/assistant/blog/day_300__new_logo/comment_3_6308c767f6e4bf090102191c91520d04._comment create mode 100644 doc/design/assistant/blog/day_301__direct_unannex.mdwn create mode 100644 doc/design/assistant/blog/day_302_release_day.mdwn create mode 100644 doc/design/assistant/blog/day_302_release_day/comment_1_fe6e572ba706e95188463d9f3e004d03._comment create mode 100644 doc/design/assistant/blog/day_303__oops.mdwn create mode 100644 doc/design/assistant/blog/day_304__dropunused_safety.mdwn create mode 100644 doc/design/assistant/blog/day_304__dropunused_safety/comment_1_1bbcf6c74b6437c44ff8604401fb1432._comment create mode 100644 doc/design/assistant/blog/day_305__interesting_bugs.mdwn create mode 100644 doc/design/assistant/blog/day_306__offtopic.mdwn create mode 100644 doc/design/assistant/blog/day_307__buuuugs.mdwn create mode 100644 doc/design/assistant/blog/day_308__ssh-agent.mdwn create mode 100644 doc/design/assistant/blog/day_308__ssh-agent/comment_1_5f0fc810cf1e1cd9b3ddba3cd19bb19d._comment create mode 100644 doc/design/assistant/blog/day_309__filenames.mdwn create mode 100644 doc/design/assistant/blog/day_310__release_day.mdwn create mode 100644 doc/design/assistant/blog/day_310__release_day/comment_1_1e008583cebd8e373e83729529914db7._comment create mode 100644 doc/design/assistant/blog/day_311__Windows_porting.mdwn create mode 100644 doc/design/assistant/blog/day_311__Windows_porting/comment_1_8e738f54a72557bee1e19970472b925c._comment create mode 100644 doc/design/assistant/blog/day_312__DebConf_midpoint.mdwn create mode 100644 doc/design/assistant/blog/day_313__back.mdwn create mode 100644 doc/design/assistant/blog/day_313__back/comment_1_fbf3fdf9688c18156753d446facd942d._comment create mode 100644 doc/design/assistant/blog/day_314__quvi.mdwn create mode 100644 doc/design/assistant/blog/day_314__quvi/comment_1_3fdfb0742cb5422530ddd97b904f2a42._comment create mode 100644 doc/design/assistant/blog/day_315__backlog.mdwn create mode 100644 doc/design/assistant/blog/day_316__day_off.mdwn create mode 100644 doc/design/assistant/blog/day_317__misc.mdwn create mode 100644 doc/design/assistant/blog/day_36__minimal_test_case.mdwn create mode 100644 doc/design/assistant/blog/day_37__back.mdwn create mode 100644 doc/design/assistant/blog/day_39__twice_is_enemy_action.mdwn create mode 100644 doc/design/assistant/blog/day_3__more_races.mdwn create mode 100644 doc/design/assistant/blog/day_3__more_races/comment_1_d6015338f602b574a3805de5481fc45e._comment create mode 100644 doc/design/assistant/blog/day_3__more_races/comment_2_4d6b23fc6442e0ee0303523cb69d0fba._comment create mode 100644 doc/design/assistant/blog/day_3__more_races/comment_3_03f5b2344c2a47dea60086f217d60f9b._comment create mode 100644 doc/design/assistant/blog/day_3__more_races/comment_4_860e90e989ec022100001c65e353a91e._comment create mode 100644 doc/design/assistant/blog/day_40__dbus.mdwn create mode 100644 doc/design/assistant/blog/day_40__dbus/comment_1_43ed2a79629868b018ec9f54a32bcacc._comment create mode 100644 doc/design/assistant/blog/day_40__dbus/comment_2_6799f2baf6a6ce14b1fa76a8402840c0._comment create mode 100644 doc/design/assistant/blog/day_40__dbus/comment_3_fa1d7444bdafcb990cacf2ace7ee6ef1._comment create mode 100644 doc/design/assistant/blog/day_40__dbus/comment_4_3399ddad951c1a950281bb6941fc3f6f._comment create mode 100644 doc/design/assistant/blog/day_40__dbus/comment_5_40b6b9d741d3081203f0cc94eb8dc3ea._comment create mode 100644 doc/design/assistant/blog/day_41__foo.mdwn create mode 100644 doc/design/assistant/blog/day_41__foo/comment_1_ace21fa257a4c2fd412b6ff2944a23e8._comment create mode 100644 doc/design/assistant/blog/day_42__the_answer.mdwn create mode 100644 doc/design/assistant/blog/day_43__simple_scanner.mdwn create mode 100644 doc/design/assistant/blog/day_44__webapp_basics.mdwn create mode 100644 doc/design/assistant/blog/day_44__webapp_basics/comment_1_d5fb67f373038e9f583cb2e1992bef67._comment create mode 100644 doc/design/assistant/blog/day_45__long_polling.mdwn create mode 100644 doc/design/assistant/blog/day_45__long_polling/comment_1_994bec0978324e268666073e8ff4f6ae._comment create mode 100644 doc/design/assistant/blog/day_45__long_polling/comment_2_dfa164c86290899139491acccddd8b2b._comment create mode 100644 doc/design/assistant/blog/day_45__long_polling/full.png create mode 100644 doc/design/assistant/blog/day_45__long_polling/phone.png create mode 100644 doc/design/assistant/blog/day_46__notification_pools.mdwn create mode 100644 doc/design/assistant/blog/day_47__alert_messages.mdwn create mode 100644 doc/design/assistant/blog/day_48__intro.mdwn create mode 100644 doc/design/assistant/blog/day_49__first_run_experience.mdwn create mode 100644 doc/design/assistant/blog/day_49__first_run_experience/comment_1_e146cf06c8dd6303dd6a991f152a73fe._comment create mode 100644 doc/design/assistant/blog/day_49__first_run_experience/comment_2_5d6adcf6782c02283bef6189582ee467._comment create mode 100644 doc/design/assistant/blog/day_49__first_run_experience/comment_3_7ac2e34c2a7bc9b57488ca0c91307d32._comment create mode 100644 doc/design/assistant/blog/day_49__first_run_experience/comment_4_549b07bb02c07a5b1b95445b01758db2._comment create mode 100644 doc/design/assistant/blog/day_4__speed.mdwn create mode 100644 doc/design/assistant/blog/day_4__speed/comment_1_bf3c9c33cc0dea5eaeb6f2af110b924b._comment create mode 100644 doc/design/assistant/blog/day_4__speed/comment_2_33aba4c9abaa3e6a05a2c87ab7df9d0e._comment create mode 100644 doc/design/assistant/blog/day_50__directory_name.mdwn create mode 100644 doc/design/assistant/blog/day_50__directory_name/comment_1_782cec95a8558a05b2b38a2d2302214d._comment create mode 100644 doc/design/assistant/blog/day_50__directory_name/comment_2_2b8ceb0a26f25e8ed2711bcbe7225a58._comment create mode 100644 doc/design/assistant/blog/day_51__desktop.mdwn create mode 100644 doc/design/assistant/blog/day_52__file_browser.mdwn create mode 100644 doc/design/assistant/blog/day_52__file_browser/comment_1_cd000c2d56b60cc1f17b221322a32aa7._comment create mode 100644 doc/design/assistant/blog/day_52__file_browser/comment_2_21d1da67cf9105a545583ba2302c10fb._comment create mode 100644 doc/design/assistant/blog/day_54__adding_removable_drives.mdwn create mode 100644 doc/design/assistant/blog/day_54__adding_removable_drives/comment_1_5de4f220a3534f55b1f2208d1d812d63._comment create mode 100644 doc/design/assistant/blog/day_54__adding_removable_drives/comment_2_8dae1ed0a70acf9628b88692dc32ac5f._comment create mode 100644 doc/design/assistant/blog/day_55__alerts.mdwn create mode 100644 doc/design/assistant/blog/day_55__alerts/comment_1_6319045500a8a5e049304fdec5ff4cf4._comment create mode 100644 doc/design/assistant/blog/day_56__transfer_control.mdwn create mode 100644 doc/design/assistant/blog/day_57__afk.mdwn create mode 100644 doc/design/assistant/blog/day_57__afk/comment_1_70e1c9f925f040c1700d3e26bab373d5._comment create mode 100644 doc/design/assistant/blog/day_57__afk/comment_2_c70d3faccfcebf47deb25e270498cb56._comment create mode 100644 doc/design/assistant/blog/day_57__afk/comment_3_89020ebc6d31485339bdea41a872df3c._comment create mode 100644 doc/design/assistant/blog/day_57__afk/comment_4_8b1f65f141ffd9813e7f5a3380f7f520._comment create mode 100644 doc/design/assistant/blog/day_58__more_transfer_control.mdwn create mode 100644 doc/design/assistant/blog/day_59__dinner.mdwn create mode 100644 doc/design/assistant/blog/day_59__dinner/comment_1_0c1e2d69496473e7e4a2956a2814f5dd._comment create mode 100644 doc/design/assistant/blog/day_5__committing.mdwn create mode 100644 doc/design/assistant/blog/day_60__taking_stock.mdwn create mode 100644 doc/design/assistant/blog/day_60__taking_stock/comment_1_6722f81ee084f1ea9e8fe47f34576397._comment create mode 100644 doc/design/assistant/blog/day_61__network_connection_detection.mdwn create mode 100644 doc/design/assistant/blog/day_61__network_connection_detection/comment_1_09b58f41a8d48f218619711ee19511ac._comment create mode 100644 doc/design/assistant/blog/day_62__smarter_syncing.mdwn create mode 100644 doc/design/assistant/blog/day_63__transfer_retries.mdwn create mode 100644 doc/design/assistant/blog/day_63__transfer_retries/comment_1_990d4eb6066c4e2b9ddb3cabef32e4b9._comment create mode 100644 doc/design/assistant/blog/day_64__syncing_robustly.mdwn create mode 100644 doc/design/assistant/blog/day_65__transfer_polish.mdwn create mode 100644 doc/design/assistant/blog/day_66__the_merge.mdwn create mode 100644 doc/design/assistant/blog/day_66__the_merge/comment_10_eeccf4e73cc321542a1fe4780805a81e._comment create mode 100644 doc/design/assistant/blog/day_66__the_merge/comment_1_a34e89316d1662826848f31061c4e46b._comment create mode 100644 doc/design/assistant/blog/day_66__the_merge/comment_2_09e244d23d05052fa2b11a7181888366._comment create mode 100644 doc/design/assistant/blog/day_66__the_merge/comment_3_3961a03e167903959b96b054835613f6._comment create mode 100644 doc/design/assistant/blog/day_66__the_merge/comment_4_12a57af9f580918818b4a9f68396d5c4._comment create mode 100644 doc/design/assistant/blog/day_66__the_merge/comment_5_8ce638960012367c888e018a5f05db19._comment create mode 100644 doc/design/assistant/blog/day_66__the_merge/comment_6_f461b856b940e6914bcd2b681cf9505f._comment create mode 100644 doc/design/assistant/blog/day_66__the_merge/comment_7_6e73aca1fc1747d0e742e054b88b5d78._comment create mode 100644 doc/design/assistant/blog/day_66__the_merge/comment_8_d85f1ce23ae16d5a8eb88d2c3999acb7._comment create mode 100644 doc/design/assistant/blog/day_66__the_merge/comment_9_c06dab4d78122c85beeaf300ffc3e376._comment create mode 100644 doc/design/assistant/blog/day_67__progress_bars.mdwn create mode 100644 doc/design/assistant/blog/day_68__transfers.mdwn create mode 100644 doc/design/assistant/blog/day_68__transfers/comment_1_5282960c0b553fbc0f411345b9745324._comment create mode 100644 doc/design/assistant/blog/day_69__build_fixes.mdwn create mode 100644 doc/design/assistant/blog/day_6__polish.mdwn create mode 100644 doc/design/assistant/blog/day_70__adding_ssh_remotes.mdwn create mode 100644 doc/design/assistant/blog/day_70__adding_ssh_remotes/comment_10_2fac85357ac8feccff82beabd3791439._comment create mode 100644 doc/design/assistant/blog/day_70__adding_ssh_remotes/comment_11_e9e496005fd1bf5a10c9e286b83e51fa._comment create mode 100644 doc/design/assistant/blog/day_70__adding_ssh_remotes/comment_1_913e6ae7c8f7db90b9767ec35fc84205._comment create mode 100644 doc/design/assistant/blog/day_70__adding_ssh_remotes/comment_2_634ca3c236e2062289e7df5f0d77a3c5._comment create mode 100644 doc/design/assistant/blog/day_70__adding_ssh_remotes/comment_3_e365bbcbb7f66ce2b35fcd5b969ab315._comment create mode 100644 doc/design/assistant/blog/day_70__adding_ssh_remotes/comment_4_b15499722a655489f9ea60ff9d4c47c6._comment create mode 100644 doc/design/assistant/blog/day_70__adding_ssh_remotes/comment_5_8ea48276f060e75d9f40617d2a1ccd08._comment create mode 100644 doc/design/assistant/blog/day_70__adding_ssh_remotes/comment_6_9b8bf7e9fa715977fbeb98087deefd1a._comment create mode 100644 doc/design/assistant/blog/day_70__adding_ssh_remotes/comment_7_42e09eacdc10c7cf579bfc6470b5117c._comment create mode 100644 doc/design/assistant/blog/day_70__adding_ssh_remotes/comment_8_6c02f31063b3d399d1b4f823bd6543ce._comment create mode 100644 doc/design/assistant/blog/day_70__adding_ssh_remotes/comment_9_dd0447cb3b39d3a8c1a7cc00f17d8bc2._comment create mode 100644 doc/design/assistant/blog/day_71__ssh_probing.mdwn create mode 100644 doc/design/assistant/blog/day_71__ssh_probing/comment_1_56a0c29f7454cfca5cc30b2849e6e942._comment create mode 100644 doc/design/assistant/blog/day_71__ssh_probing/comment_2_f3bd3e366c92c833c7e217da125481b8._comment create mode 100644 doc/design/assistant/blog/day_72__remote_ssh_server_configurator_finished.mdwn create mode 100644 doc/design/assistant/blog/day_73__rsync.net_configurator.mdwn create mode 100644 doc/design/assistant/blog/day_74__bits_and_peices.mdwn create mode 100644 doc/design/assistant/blog/day_75__zeromq_and_pairing.mdwn create mode 100644 doc/design/assistant/blog/day_76__pairing.mdwn create mode 100644 doc/design/assistant/blog/day_76__pairing/comment_1_09665f269343422cd18051fad1a8c19e._comment create mode 100644 doc/design/assistant/blog/day_76__pairing/comment_2_8e1b2233579bc26bfd758bbf6b3bdc07._comment create mode 100644 doc/design/assistant/blog/day_76__pairing/comment_3_a8b6a8432da20c468c633da8e7cbc2f3._comment create mode 100644 doc/design/assistant/blog/day_76__pairing/comment_4_36a428a2e1803f4391b821d1892f0cd7._comment create mode 100644 doc/design/assistant/blog/day_76__pairing/comment_5_11f332fe2050d8c1416e71f9e85ba280._comment create mode 100644 doc/design/assistant/blog/day_76__pairing/comment_6_973aeb656b78eca97474ea1a3f5b57b7._comment create mode 100644 doc/design/assistant/blog/day_76__pairing/comment_7_03d2b3343f34377a4d6171e06b7609f6._comment create mode 100644 doc/design/assistant/blog/day_77_alert_buttons.mdwn create mode 100644 doc/design/assistant/blog/day_78__pairing_continued.mdwn create mode 100644 doc/design/assistant/blog/day_79__pairing_finished.mdwn create mode 100644 doc/design/assistant/blog/day_7__bugfixes.mdwn create mode 100644 doc/design/assistant/blog/day_7__bugfixes/profile.png create mode 100644 doc/design/assistant/blog/day_7__bugfixes/profile2.png create mode 100644 doc/design/assistant/blog/day_80__default_backend.mdwn create mode 100644 doc/design/assistant/blog/day_81__enabling_pre-existing_special_remotes.mdwn create mode 100644 doc/design/assistant/blog/day_82__git-annex_branch_work.mdwn create mode 100644 doc/design/assistant/blog/day_83__3-way.mdwn create mode 100644 doc/design/assistant/blog/day_84__deferred_downloads.mdwn create mode 100644 doc/design/assistant/blog/day_85__more_foundation_work.mdwn create mode 100644 doc/design/assistant/blog/day_86__towards_the_beta.mdwn create mode 100644 doc/design/assistant/blog/day_87__more_progress_progress.mdwn create mode 100644 doc/design/assistant/blog/day_88__progressbars_still_progressing.mdwn create mode 100644 doc/design/assistant/blog/day_89__final_polish.mdwn create mode 100644 doc/design/assistant/blog/day_8__speed.mdwn create mode 100644 doc/design/assistant/blog/day_8__speed/comment_1_a3dba537b276d5737abc8cb93f1965f4._comment create mode 100644 doc/design/assistant/blog/day_90__beta.mdwn create mode 100644 doc/design/assistant/blog/day_90__beta/comment_1_5f2a3b18ad7558abe04f51534a29ff13._comment create mode 100644 doc/design/assistant/blog/day_90__beta/comment_2_961c4eba97f4eac75174244d6b2b00c0._comment create mode 100644 doc/design/assistant/blog/day_90__beta/comment_3_c76675a4633cbbe347ed42c222918d38._comment create mode 100644 doc/design/assistant/blog/day_90__beta/comment_4_f0b8f77cb691e747fe35bcf2f51b5baa._comment create mode 100644 doc/design/assistant/blog/day_90__beta/comment_5_99fbc9feac62e66a12b0d357cf86ccc1._comment create mode 100644 doc/design/assistant/blog/day_91__break.mdwn create mode 100644 doc/design/assistant/blog/day_92__S3.mdwn create mode 100644 doc/design/assistant/blog/day_92__S3/comment_1_eda656247d11cea7fbed2e33137a39e5._comment create mode 100644 doc/design/assistant/blog/day_92__S3/comment_2_8249d2d9521e44c674da3fda74be077a._comment create mode 100644 doc/design/assistant/blog/day_93__OSX_standalone_app.mdwn create mode 100644 doc/design/assistant/blog/day_93__easy_install.mdwn create mode 100644 doc/design/assistant/blog/day_93__easy_install/comment_1_d4f7de723c98577ef28d89ee6b87fd13._comment create mode 100644 doc/design/assistant/blog/day_93__easy_install/comment_2_6337b341c1cfb2132b59704394e57b36._comment create mode 100644 doc/design/assistant/blog/day_95__repository_groups.mdwn create mode 100644 doc/design/assistant/blog/day_96__revisiting_file_adds.mdwn create mode 100644 doc/design/assistant/blog/day_96__revisiting_file_adds/comment_1_da3ca47041168b6c82aeb2c18acc5017._comment create mode 100644 doc/design/assistant/blog/day_97__stuffing.mdwn create mode 100644 doc/design/assistant/blog/day_98__preferred_content.mdwn create mode 100644 doc/design/assistant/blog/day_98__preferred_content/comment_1_2136618e3515d0ac6369a41f1934ec2a._comment create mode 100644 doc/design/assistant/blog/day_98__preferred_content/comment_2_5f6db00e69628bf2f72b0e6f2981a49b._comment create mode 100644 doc/design/assistant/blog/day_99_shotgun.mdwn create mode 100644 doc/design/assistant/blog/day_99_shotgun/comment_1_12bb8f54bb13ea20ac4187a2301d77ca._comment create mode 100644 doc/design/assistant/blog/day_9__correctness.mdwn create mode 100644 doc/design/assistant/blog/day_9__correctness/comment_1_564a39cb976767e2c0a9c74fabe10be4._comment create mode 100644 doc/design/assistant/blog/day_9__correctness/comment_2_77924e9d50b40f05e792e427a25849a6._comment create mode 100644 doc/design/assistant/blog/day_9__correctness/comment_3_92bd86cd06d579e23800af2e5c66a291._comment create mode 100644 doc/design/assistant/blog/day_9__correctness/comment_4_0d12b51ccdfc2a94d3e59a5628521e0a._comment create mode 100644 doc/design/assistant/blog/day_9__correctness/comment_5_208f9dd3e1d92555b05c29159538a901._comment create mode 100644 doc/design/assistant/blog/day_9__correctness/comment_6_90cc6b60718896fb175919417600fdf9._comment create mode 100644 doc/design/assistant/chunks.mdwn create mode 100644 doc/design/assistant/cloud.mdwn create mode 100644 doc/design/assistant/cloud/comment_1_4997778abc171999499487b71b31c9ba._comment create mode 100644 doc/design/assistant/cloud/comment_2_08da8bc74a4845e354dca99184cffd70._comment create mode 100644 doc/design/assistant/cloud/comment_3_faafd1266301997b1822d215ec8e8d8c._comment create mode 100644 doc/design/assistant/cloud/comment_4_3eb557d5439831f6e0032944d12c02cf._comment create mode 100644 doc/design/assistant/comment_10_f2233fad55c20686cf299bf6788f1f23._comment create mode 100644 doc/design/assistant/comment_11_a38f0f21c2346e65b786d791b6829f9b._comment create mode 100644 doc/design/assistant/comment_12_5e991177d6577384f39a36ae02f5f574._comment create mode 100644 doc/design/assistant/comment_13_f8625c6f43b58847840df338a73b7972._comment create mode 100644 doc/design/assistant/comment_14_c37ef5931b0f5c1f808083e0d636a208._comment create mode 100644 doc/design/assistant/comment_15_68c98a27083567f20c2e6bc2a760991b._comment create mode 100644 doc/design/assistant/comment_16_8e6788c817c60371d2a2f158e1a65f87._comment create mode 100644 doc/design/assistant/comment_17_97bdfacac5ac492281c9454ee4c0228e._comment create mode 100644 doc/design/assistant/comment_18_53137b2df4913496c0afb2d895aa4ee2._comment create mode 100644 doc/design/assistant/comment_19_ff1b0ba57e22ed757ec3fc5400b5e43e._comment create mode 100644 doc/design/assistant/comment_1_a48fcfbf97f0a373ea375cd8f07f0fc8._comment create mode 100644 doc/design/assistant/comment_20_099da245e3276fa84f5e14312d186621._comment create mode 100644 doc/design/assistant/comment_2_6d3552414fdcc2ed3244567e6c67989d._comment create mode 100644 doc/design/assistant/comment_3_05223be50c889b2ed6bc4abf74116450._comment create mode 100644 doc/design/assistant/comment_4_fbbd93b55803ae21e6ba4b6568c2fafd._comment create mode 100644 doc/design/assistant/comment_5_f4e9af3fed6c27e8ff39badb9794064d._comment create mode 100644 doc/design/assistant/comment_6_c7ad07cade1f44f9a8b61f92225bb9c5._comment create mode 100644 doc/design/assistant/comment_7_609d38e993267195a80fecd84c93d1e2._comment create mode 100644 doc/design/assistant/comment_8_22b818e1a2a825efb78139271a14f944._comment create mode 100644 doc/design/assistant/comment_9_d052e2142da8b4838fb1edf791ea23ae._comment create mode 100644 doc/design/assistant/configurators.mdwn create mode 100644 doc/design/assistant/deltas.mdwn create mode 100644 doc/design/assistant/deltas/comment_1_bdb477af913c9782c0e8509e6b294b6e._comment create mode 100644 doc/design/assistant/deltas/comment_2_71889d15ba20ebb0fe13080c68162a5b._comment create mode 100644 doc/design/assistant/desymlink.mdwn create mode 100644 doc/design/assistant/desymlink/comment_1_f1bfe250b7f872359f7075998b6e42e3._comment create mode 100644 doc/design/assistant/desymlink/comment_2_5e876edfe9853645f761b5ed9b5021aa._comment create mode 100644 doc/design/assistant/desymlink/comment_3_538561d74371e53c2f8df7f5ebdf58a8._comment create mode 100644 doc/design/assistant/desymlink/comment_4_586ecaa800e6c162377c937da5e65440._comment create mode 100644 doc/design/assistant/desymlink/comment_5_8fc703de67814cf2aec2a908852298a4._comment create mode 100644 doc/design/assistant/desymlink/comment_6_1b473ad89494afb82250af4b6df5f5c9._comment create mode 100644 doc/design/assistant/disaster_recovery.mdwn create mode 100644 doc/design/assistant/disaster_recovery/comment_1_955dc807196863da23aa8dbd15e04364._comment create mode 100644 doc/design/assistant/encrypted_git_remotes.mdwn create mode 100644 doc/design/assistant/gpgkeys.mdwn create mode 100644 doc/design/assistant/inotify.mdwn create mode 100644 doc/design/assistant/inotify/comment_1_3d3ff74447452d65c10ccc3dbfc323cd._comment create mode 100644 doc/design/assistant/inotify/comment_2_a3c0fa6d97397c508b4b8aafdcee8f6f._comment create mode 100644 doc/design/assistant/inotify/comment_3_b346e870c1cd80e4b0a313c3a9fed6b3._comment create mode 100644 doc/design/assistant/inotify/comment_4_32be58b4c3b17a4ea539690d2fb45159._comment create mode 100644 doc/design/assistant/inotify/comment_5_0cdd3046d90ad2012025d846ece0731e._comment create mode 100644 doc/design/assistant/inotify/comment_6_e197d5d0d853572ec1f2e5985762e60d._comment create mode 100644 doc/design/assistant/leftovers.mdwn create mode 100644 doc/design/assistant/leftovers/comment_1_b20c88bb3c583a32023c1f6b6dc9486d._comment create mode 100644 doc/design/assistant/more_cloud_providers.mdwn create mode 100644 doc/design/assistant/pairing.mdwn create mode 100644 doc/design/assistant/partial_content.mdwn create mode 100644 doc/design/assistant/partial_content/comment_1_58c4faa321a5bb71adf9fdee079849f4._comment create mode 100644 doc/design/assistant/polls.mdwn create mode 100644 doc/design/assistant/polls/2013_user_survey.mdwn create mode 100644 doc/design/assistant/polls/Android.mdwn create mode 100644 doc/design/assistant/polls/Android/comment_1_fa6c409833f28c67da105d25f4a440e0._comment create mode 100644 doc/design/assistant/polls/Android_default_directory.mdwn create mode 100644 doc/design/assistant/polls/Android_default_directory/comment_1_d39655091ac3ed51a9d4325d86b23ad7._comment create mode 100644 doc/design/assistant/polls/Android_default_directory/comment_2_2f1eaae95075db26488517720afd1c63._comment create mode 100644 doc/design/assistant/polls/Android_default_directory/comment_3_b484012f60789be73d7d5b338cff6203._comment create mode 100644 doc/design/assistant/polls/goals_for_April.mdwn create mode 100644 doc/design/assistant/polls/goals_for_April/comment_1_9f81fa96db5970a4be0828c74a6d2d55._comment create mode 100644 doc/design/assistant/polls/goals_for_April/comment_2_d8956d220ccacff3d2f6cbeb15718459._comment create mode 100644 doc/design/assistant/polls/goals_for_April/comment_3_aadad6dfd56d068d2e377606910c006f._comment create mode 100644 doc/design/assistant/polls/prioritizing_special_remotes.mdwn create mode 100644 doc/design/assistant/polls/prioritizing_special_remotes/comment_1_dd9280df27848a7ff132f5809dab0a79._comment create mode 100644 doc/design/assistant/polls/prioritizing_special_remotes/comment_2_370e0b9c43486ee96c825f9155eebde4._comment create mode 100644 doc/design/assistant/polls/prioritizing_special_remotes/comment_3_883a003b9c552b89f191135c582f99aa._comment create mode 100644 doc/design/assistant/polls/prioritizing_special_remotes/comment_4_746006c3fffc7f917c4526fd688051f7._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant.mdwn create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_10_10a4839a05be39ced54ffbe880a588bb._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_11_ac91d866f11c66dd8c86e2cd1a368c85._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_12_e244c1bf334b1cc9ad0cc760bf8fe5de._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_13_1a0faf4bdc78741937e8a2f5cb5bbec6._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_14_8d8a11dbfae7a7bc574bdf37f87e0684._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_15_c437adeaccf0b3d134e0f81c64e25b9f._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_16_6e3fce3a32ab346dc3d0fd4b69967536._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_17_1b7233d88593d0d99b26ea3e7af20d9c._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_18_a23d5a0e2718b8e486f036fe8a413b36._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_19_f4c84a9d701d52cf2f2e45f3d764a90c._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_1_00a0de8190d946caaeeca3b44646146f._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_20_199c9807499470771af6cbca6d034cfa._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_2_35f6f121e54260cb960211a6e2e51e8e._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_3_acbe4f63b5d552ac5ae5a12c6f42dc18._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_4_0d988280865caae498a3b693b6342e37._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_5_ac8fe3768c30dd7999c183500f8567bb._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_6_36832de705a2bebf8dc6e65dcd661731._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_7_3618067e473577a112e36970ca71e0ab._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_8_07a13b6f000ddc0ac4472b863d8b50bd._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_9_e15eb407d988fda363296c8b566cc8fb._comment create mode 100644 doc/design/assistant/progressbars.mdwn create mode 100644 doc/design/assistant/progressbars/comment_1_3ea263b1f334e8e38e14f00a96202988._comment create mode 100644 doc/design/assistant/rate_limiting.mdwn create mode 100644 doc/design/assistant/screenshot/firstrun.png create mode 100644 doc/design/assistant/screenshot/intro.png create mode 100644 doc/design/assistant/sshpassword.mdwn create mode 100644 doc/design/assistant/syncing.mdwn create mode 100644 doc/design/assistant/syncing/comment_1_c70156174ff19b503978d623bd2df36f._comment create mode 100644 doc/design/assistant/syncing/comment_2_eb992b5b2c7a5ce23443e2a6007e5ff9._comment create mode 100644 doc/design/assistant/syncing/comment_3_e1b5e8a24556de16d1cacd27ee0c1bd1._comment create mode 100644 doc/design/assistant/thanks/comment_1_8b08b5c30e5aea3fc4599f856fd25df5._comment create mode 100644 doc/design/assistant/todo.mdwn create mode 100644 doc/design/assistant/transfer_control.mdwn create mode 100644 doc/design/assistant/transfer_control/comment_1_d5adaef4712913dc0263d4ebafb79320._comment create mode 100644 doc/design/assistant/upgrading.mdwn create mode 100644 doc/design/assistant/webapp.mdwn create mode 100644 doc/design/assistant/webapp/comment_1_bab6f6fa720273c0f9700a3765150189._comment create mode 100644 doc/design/assistant/webapp/comment_2_3cf0cf460c7869d0cc22940fcc84aec4._comment create mode 100644 doc/design/assistant/webapp/comment_3_428e153135f7a64215730719207d82c4._comment create mode 100644 doc/design/assistant/webapp/comment_4_f4068a7abbb77ba6a3297cbcf1e503e9._comment create mode 100644 doc/design/assistant/windows.mdwn create mode 100644 doc/design/assistant/windows/comment_1_f4b829318b182e1cec29f13babb6498e._comment create mode 100644 doc/design/assistant/xmpp.mdwn create mode 100644 doc/design/assistant/xmpp/comment_1_f20650f93d7f0ca39b9ba3ce0380193f._comment create mode 100644 doc/design/assistant/xmpp/comment_2_8c22839a8f5912b4a817415c4a359697._comment create mode 100644 doc/design/assistant/xmpp/comment_4_773102522f21844cffc841e6cde9229e._comment create mode 100644 doc/design/assistant/xmpp_security.mdwn create mode 100644 doc/design/assistant/xmpp_security/comment_1_c714e86553c02600249795efb224be8a._comment create mode 100644 doc/design/encryption.mdwn create mode 100644 doc/design/encryption/comment_1_4715ffafb3c4a9915bc33f2b26aaa9c1._comment create mode 100644 doc/design/encryption/comment_2_a610b3d056a059899178859a3a821ea5._comment create mode 100644 doc/design/encryption/comment_3_cca186a9536cd3f6e86994631b14231c._comment create mode 100644 doc/design/encryption/comment_4_8f3ba3e504b058791fc6e6f9c38154cf._comment create mode 100644 doc/design/encryption/comment_5_520e60aa53217b5ba428d4c05d897dee._comment create mode 100644 doc/design/encryption/comment_6_d677fead0fe0c543f48f07d85f83f592._comment create mode 100644 doc/design/encryption/comment_7_c1c38a09b1276e29adc3ba564dc0fe4e._comment create mode 100644 doc/design/gcrypt.mdwn create mode 100644 doc/design/roadmap.mdwn create mode 100644 doc/devblog.mdwn create mode 100644 doc/devblog/day_-1__drop_dead.mdwn create mode 100644 doc/devblog/day_-3__.mdwn create mode 100644 doc/devblog/day_-4__forgetting.mdwn create mode 100644 doc/devblog/day_-4__forgetting/comment_1_f3cc7a25af4c59fda3924c737a789419._comment create mode 100644 doc/devblog/day_10__lazy_Sunday.mdwn create mode 100644 doc/devblog/day_11__webapp_encrypted_drives.mdwn create mode 100644 doc/devblog/day_12__gpg_key_generation.mdwn create mode 100644 doc/devblog/day_12__gpg_key_generation/comment_1_48cdfe3bd71fb348ae05fd90e8cf1dab._comment create mode 100644 doc/devblog/day_13__encrypted_sneakernet_working.mdwn create mode 100644 doc/devblog/day_14__gcrypt_refinements_and_OOM_fixes.mdwn create mode 100644 doc/devblog/day_15-17__Android_rebuild.mdwn create mode 100644 doc/devblog/day_19__moving_on.mdwn create mode 100644 doc/devblog/day_19__moving_on/comment_1_870106f671f9a055b81e6fc83e0850b5._comment create mode 100644 doc/devblog/day_19__moving_on/comment_2_fad055c8860385ac6c012f897c96408f._comment create mode 100644 doc/devblog/day_19__moving_on/comment_3_69e47d612159587f080ab761566d1830._comment create mode 100644 doc/devblog/day_1__inauspicious_beginning.mdwn create mode 100644 doc/devblog/day_1__inauspicious_beginning/comment_1_cc4dea43caf3126c6f814b589b701d70._comment create mode 100644 doc/devblog/day_20__gcrypt_and_git-annex-shell.mdwn create mode 100644 doc/devblog/day_21__bugfix_day.mdwn create mode 100644 doc/devblog/day_22__gcrypt_on_rsync.net.mdwn create mode 100644 doc/devblog/day_23__GNU_day.mdwn create mode 100644 doc/devblog/day_24__nearly_done_with_gcrypt.mdwn create mode 100644 doc/devblog/day_25__finishing_up_gcrypt.mdwn create mode 100644 doc/devblog/day_26__gcrypt_really_done_this_time.mdwn create mode 100644 doc/devblog/day_27__locking_fun.mdwn create mode 100644 doc/devblog/day_27__locking_fun/comment_1_0eb247235fbf8f563934f3548e1d2e10._comment create mode 100644 doc/devblog/day_27__locking_fun/comment_2_e8b1dfe1b0641e031d05733448b7bc8b._comment create mode 100644 doc/devblog/day_27__locking_fun/comment_3_b67f8ef4ed42b49c8c2e6c4e53163b16._comment create mode 100644 doc/devblog/day_27__locking_fun/comment_4_0759644baf26b75f4e48dbb387d725a5._comment create mode 100644 doc/devblog/day_28__lazy_saturday.mdwn create mode 100644 doc/devblog/day_29__scheduling.mdwn create mode 100644 doc/devblog/day_2__new_laptop.mdwn create mode 100644 doc/devblog/day_2__new_laptop/comment_1_93447dbd4eb09b4db96770644ea663cb._comment create mode 100644 doc/devblog/day_2__new_laptop/comment_2_e1d022b25f2c16dbe72db07ad4b10a2d._comment create mode 100644 doc/devblog/day_30__cronner.mdwn create mode 100644 doc/devblog/day_30__cronner/comment_1_53dfd9310e92f5225db52a13e20a46d4._comment create mode 100644 doc/devblog/day_30__cronner/comment_2_f98357c6f7a6da23873ac27c2e1e9638._comment create mode 100644 doc/devblog/day_31__blah.mdwn create mode 100644 doc/devblog/day_32__fsck_config_UI.mdwn create mode 100644 doc/devblog/day_33__fsck_on_connect.mdwn create mode 100644 doc/devblog/day_34__wrapping_up_fsck.mdwn create mode 100644 doc/devblog/day_35__anacron_and_bugfixing.mdwn create mode 100644 doc/devblog/day_36__bugfixing.mdwn create mode 100644 doc/devblog/day_37__long_day.mdwn create mode 100644 doc/devblog/day_38__starting_git_repo_repair.mdwn create mode 100644 doc/devblog/day_38__starting_git_repo_repair/comment_1_321468d9686db5dde072500bdaeb7d29._comment create mode 100644 doc/devblog/day_39__git-recover-repository.mdwn create mode 100644 doc/devblog/day_3__gcrypt_uuids.mdwn create mode 100644 doc/devblog/day_40__another_fine_mess.mdwn create mode 100644 doc/devblog/day_41__onward.mdwn create mode 100644 doc/devblog/day_41__onward/comment_1_a716c7b5a9ea3c949ff047cfb4e9a0a4._comment create mode 100644 doc/devblog/day_41__onward/comment_2_33149e424cd5f03fac376288bcc4dfdc._comment create mode 100644 doc/devblog/day_41__onward/comment_3_3b07503bd79089ad3ce3ddd7535ed116._comment create mode 100644 doc/devblog/day_42__repair_milestone.mdwn create mode 100644 doc/devblog/day_43__bugfix_day.mdwn create mode 100644 doc/devblog/day_44__automatic_removable_drive_repair.mdwn create mode 100644 doc/devblog/day_45__command_line.mdwn create mode 100644 doc/devblog/day_46__wrapping_up_the_month.mdwn create mode 100644 doc/devblog/day_47__fell_off_the_blogging_wagon.mdwn create mode 100644 doc/devblog/day_48__direct_mode_guard_design.mdwn create mode 100644 doc/devblog/day_48__direct_mode_guard_design/comment_1_ec0147ccc55bad3a38652383f4098a65._comment create mode 100644 doc/devblog/day_49__direct_mode_guard_implementation.mdwn create mode 100644 doc/devblog/day_49__direct_mode_guard_implementation/comment_1_3ebe5c3f708070f164ecaf36b79f7bfc._comment create mode 100644 doc/devblog/day_4__unexpected_windows_day.mdwn create mode 100644 doc/devblog/day_50__grab_bag.mdwn create mode 100644 doc/devblog/day_50__grab_bag/comment_1_01846f6494fe843889391fd09fd127a0._comment create mode 100644 doc/devblog/day_50__grab_bag/comment_2_12736014aa2c1af81e4b83072505e7d5._comment create mode 100644 doc/devblog/day_51__direct_mode_guard_finished.mdwn create mode 100644 doc/devblog/day_52__slowly_but_surely.mdwn create mode 100644 doc/devblog/day_54__android_bisection_minions.mdwn create mode 100644 doc/devblog/day_54__android_bisection_minions/comment_1_bea8fbe2b87d4a4865b92fa796298fa0._comment create mode 100644 doc/devblog/day_55__fireside_porting.mdwn create mode 100644 doc/devblog/day_55__fireside_porting/comment_1_d690a52db82f9594d99ae65fe51e1f1a._comment create mode 100644 doc/devblog/day_56__git-annex_user_survey.mdwn create mode 100644 doc/devblog/day_57__mavericks.mdwn create mode 100644 doc/devblog/day_58__urgle.mdwn create mode 100644 doc/devblog/day_58__urgle/comment_1_bd279f58f614b103a53215dfb0211007._comment create mode 100644 doc/devblog/day_59__release_day.mdwn create mode 100644 doc/devblog/day_5__gcrypt_special_remote_part_1.mdwn create mode 100644 doc/devblog/day_60__damage_driven_development.mdwn create mode 100644 doc/devblog/day_61__damage_driven_development__II.mdwn create mode 100644 doc/devblog/day_62__upgrade_alerts.mdwn create mode 100644 doc/devblog/day_62__upgrade_alerts/comment_1_cdb44aaa1d2a784a72613cbf16038f89._comment create mode 100644 doc/devblog/day_62__upgrade_alerts/comment_2_b08bb946e4760d7f03b45c852c745b2e._comment create mode 100644 doc/devblog/day_63__leverage.mdwn create mode 100644 doc/devblog/day_64__overkill.mdwn create mode 100644 doc/devblog/day_64__overkill/comment_1_e1db7678aae37af281d31ae211677786._comment create mode 100644 doc/devblog/day_64__overkill/comment_3_f7a96f0b6d942d0b59d9d0ec1b21c4bf._comment create mode 100644 doc/devblog/day_65__wrapping_up_upgrades.mdwn create mode 100644 doc/devblog/day_66__upgrade_testing.mdwn create mode 100644 doc/devblog/day_67_thanksgiving_rush.mdwn create mode 100644 doc/devblog/day_6__gcrypt_fully_working.mdwn create mode 100644 doc/devblog/day_6__gcrypt_fully_working/comment_1_136bb7537a9ba93d400ce6f6ea1932ac._comment create mode 100644 doc/devblog/day_6__gcrypt_fully_working/comment_2_1f8faa65bbd56a12588b43a5bc822d96._comment create mode 100644 doc/devblog/day_7__release_day.mdwn create mode 100644 doc/devblog/day_7__release_day/comment_1_12bb94d903868ecddb3e348c9c4afeaf._comment create mode 100644 doc/devblog/day_7__release_day/comment_2_d3e38d6f6bba179dab40d4d75ff061de._comment create mode 100644 doc/devblog/day_8__ill.mdwn create mode 100644 doc/devblog/day_9__Friday_the_13th.mdwn create mode 100644 doc/devblog/day_9__Friday_the_13th/comment_1_07195b4ec399ba1be6c8bdb3ae0fa50b._comment create mode 100644 doc/devblog/moving_blogs.mdwn create mode 100644 doc/devblog/moving_blogs/comment_1_6caa7e67461a6ea5de8155ae9cf75fab._comment create mode 100644 doc/devblog/moving_blogs/comment_2_e3e2048fc2397b87a2f29c9fe49394cb._comment create mode 100644 doc/direct_mode.mdwn create mode 100644 doc/direct_mode/comment_11_1c79c93f4b17cfc354ab920e3775cc60._comment create mode 100644 doc/direct_mode/comment_12_1b5218fdb6ee362d6df68ff1229590d4._comment create mode 100644 doc/direct_mode/comment_13_55108ac736ea450df89332ba5de4a208._comment create mode 100644 doc/direct_mode/comment_14_ff4ffc2aabc5fd174d7386ef13860f78._comment create mode 100644 doc/direct_mode/comment_15_1cd32456630b25d5aaa6d2763e6eb384._comment create mode 100644 doc/direct_mode/comment_3_8020d74bddf0e38b0a297e5dae7c217b._comment create mode 100644 doc/direct_mode/comment_4_97c26bd82f623a3b2d56bab4afff0126._comment create mode 100644 doc/direct_mode/comment_5_42363bf0367f935b3eee8ad3d2eaf5cf._comment create mode 100644 doc/direct_mode/comment_6_5f03b1686c1fb3f7606a5bc724ac3812._comment create mode 100644 doc/direct_mode/comment_7_5355ac418bfb26e990762b80f4c36b77._comment create mode 100644 doc/direct_mode/comment_8_6cd15e2c5fd0bef48f60c6993322c2fc._comment create mode 100644 doc/distributed_version_control.mdwn create mode 100644 doc/download.mdwn create mode 100644 doc/download/comment_1_ec2578241a966cfcdd43f2a26a5c8709._comment create mode 100644 doc/download/comment_2_ee0d158ac59903737dbc4ef632f11fe3._comment create mode 100644 doc/ekg.mdwn create mode 100644 doc/ekg/ekg.png create mode 100644 doc/encryption.mdwn create mode 100644 doc/encryption/comment_1_1afca8d7182075d46db41f6ad3dd5911._comment create mode 100644 doc/favicon.ico create mode 100644 doc/favicon.png create mode 100644 doc/feeds.mdwn create mode 100644 doc/footer/column_a.mdwn create mode 100644 doc/footer/column_b.mdwn create mode 100644 doc/forum.mdwn create mode 100644 doc/forum/A_question_an_the_nomad_use_cases:_files_to_fetch__44___files_to_delete__44___files_to_keep__63__.mdwn create mode 100644 doc/forum/A_question_an_the_nomad_use_cases:_files_to_fetch__44___files_to_delete__44___files_to_keep__63__/comment_1_fe291cd6cd8e2d5b8e23f8e3689d824b._comment create mode 100644 doc/forum/A_question_an_the_nomad_use_cases:_files_to_fetch__44___files_to_delete__44___files_to_keep__63__/comment_2_f0dbc3c723999bf0f22502e3a89d1d4a._comment create mode 100644 doc/forum/A_really_stupid_question.mdwn create mode 100644 doc/forum/A_really_stupid_question/comment_1_40e02556de0b00b94f245a0196b5a89f._comment create mode 100644 doc/forum/Accessing_files_directly_on__a_USB_device.mdwn create mode 100644 doc/forum/Accessing_files_in_bare_repository.mdwn create mode 100644 doc/forum/Accessing_files_in_bare_repository/comment_10_7eb66e3806f9524e043fae2da9d57d64._comment create mode 100644 doc/forum/Accessing_files_in_bare_repository/comment_11_f0165d66865ad14f7eb5d50e900c1df4._comment create mode 100644 doc/forum/Accessing_files_in_bare_repository/comment_12_0e7ea5161b6da6e9bb9425bdb953de33._comment create mode 100644 doc/forum/Accessing_files_in_bare_repository/comment_13_f804b9bf71f7d04bd23ce32d813dc340._comment create mode 100644 doc/forum/Accessing_files_in_bare_repository/comment_1_6de649d38febd2240eb5b703da77c2d6._comment create mode 100644 doc/forum/Accessing_files_in_bare_repository/comment_2_7e8dd09915ddc3267377e900891cb02c._comment create mode 100644 doc/forum/Accessing_files_in_bare_repository/comment_3_80eae4a73f38d1a7e35f97c33b6401f8._comment create mode 100644 doc/forum/Accessing_files_in_bare_repository/comment_4_5ec13e98d3ecb69426e974d34f712f9b._comment create mode 100644 doc/forum/Accessing_files_in_bare_repository/comment_5_dccbf5793998c6381e23eb8ff6497ebf._comment create mode 100644 doc/forum/Accessing_files_in_bare_repository/comment_6_42d923916232c81f3b8bdbefa34a89d3._comment create mode 100644 doc/forum/Accessing_files_in_bare_repository/comment_7_43a0a7d222faee582aeb3150a59cef87._comment create mode 100644 doc/forum/Accessing_files_in_bare_repository/comment_8_ec1024235c1c74c113483a833df84654._comment create mode 100644 doc/forum/Accessing_files_in_bare_repository/comment_9_c156b8c1ae0f2905566bbdb13b84e577._comment create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository.mdwn create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/bugs/direct_mode_sync_should_avoid_git_commit.mdwn create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/comment_10_06dae5709750ea1da4f7fdbee4e84efc._comment create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/comment_11_2069c5c41882ae0a1973fb7da583b60e._comment create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/comment_12_b35e3a87c30974eedd71ebe52ecbed96._comment create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/comment_13_84e026f9bda87bfd12a3769dcef77f8b._comment create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/comment_1_ed3534196164c6736a8dbf21c65c119d._comment create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/comment_2_1e29bcf568f02765c48f0eac6c640673._comment create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/comment_3_9ea6803a94b1de15079a3fa20d59c9af._comment create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/comment_4_3fae5a7fa5d99d0eb4473adb43e7f6f5._comment create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/comment_5_57a5b73cff480266355e75c7bdc762c2._comment create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/comment_6_bbcf5e863c8f152e1079536e9011a404._comment create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/comment_7_fdcd144c22601bdf98ff844254b0120d._comment create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/comment_8_b77243e765b2af7ba71e963fcb5cbbb1._comment create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/comment_9_cb0815e96ee211d4778f2e7a4274e855._comment create mode 100644 doc/forum/Add_a___34__local__34___remote.txt create mode 100644 doc/forum/Add_a___34__local__34___remote/comment_1_c68ad724b465c4be5243be687168c0b3._comment create mode 100644 doc/forum/Adding_existing_S3_bucket_to_sync_with.mdwn create mode 100644 doc/forum/Adding_existing_S3_bucket_to_sync_with/comment_1_30b9a70d367dd5b8781e9a86e42d4c3e._comment create mode 100644 doc/forum/Adding_existing_S3_bucket_to_sync_with/comment_2_a8525c1a7e5f89c30c9503fe8bfed02e._comment create mode 100644 doc/forum/Adding_existing_S3_bucket_to_sync_with/comment_3_c3878989f74e740c0ed42f440750f3a4._comment create mode 100644 doc/forum/Adding_existing_S3_bucket_to_sync_with/comment_4_c06cc86496f9d4c0c42a8c89aa5a7b35._comment create mode 100644 doc/forum/Adding_existing_S3_bucket_to_sync_with/comment_5_0a1c2dd0929511ff824be8de2c8d85eb._comment create mode 100644 doc/forum/Adding_existing_S3_bucket_to_sync_with/comment_6_1444c2f89885f028f20a4d3ce225a403._comment create mode 100644 doc/forum/Adding_existing_S3_bucket_to_sync_with/comment_7_1c30944010d541096baff18198a5560d._comment create mode 100644 doc/forum/Android:_is_constant_high_cpu_usage_to_be_expected__63__.mdwn create mode 100644 doc/forum/Android:_is_constant_high_cpu_usage_to_be_expected__63__/comment_1_7880fc38792a1fcbf3e5c47e8bcaabce._comment create mode 100644 doc/forum/Android:_is_constant_high_cpu_usage_to_be_expected__63__/comment_2_840fbce18b4fdec21ee557fdf52c366e._comment create mode 100644 doc/forum/Annex_contents_just_disappeared__63__.mdwn create mode 100644 doc/forum/Annex_contents_just_disappeared__63__/comment_1_4ab5ca00f912c0c95fabc10f2d9600d3._comment create mode 100644 doc/forum/Annex_contents_just_disappeared__63__/comment_2_657f737c5d64d440aa133ddb41408fbc._comment create mode 100644 doc/forum/Annex_contents_just_disappeared__63__/comment_3_9b4c35feb14b37d43d053d7430da9abf._comment create mode 100644 doc/forum/Annex_contents_just_disappeared__63__/comment_4_c3625409652bff5f2165260803269a8a._comment create mode 100644 doc/forum/Annex_dropping_files.mdwn create mode 100644 doc/forum/Annex_dropping_files/comment_1_62fbea95248fda2ff075b5a8952a728f._comment create mode 100644 doc/forum/Assistant:_configure_auto-sync.mdwn create mode 100644 doc/forum/Assistant:_configure_auto-sync/comment_1_c8cabd38114582bbdbad49f2d81959d7._comment create mode 100644 doc/forum/Assistant_not_syncing_to_Rsync.mdwn create mode 100644 doc/forum/Assistant_not_syncing_to_Rsync/comment_1_2178a7fc0d66643e84597b0938ef65f2._comment create mode 100644 doc/forum/Assistant_not_syncing_to_Rsync/comment_2_650651398443e128c2adc6a2a2d320d0._comment create mode 100644 doc/forum/Assistant_not_syncing_to_Rsync/comment_3_e6d0c9620b148acc72342862a8b4cfef._comment create mode 100644 doc/forum/Assistant_not_syncing_to_Rsync/comment_4_b91f9febdb8b69d8b487ba4ea08c119a._comment create mode 100644 doc/forum/Assistant_not_syncing_to_Rsync/comment_5_c5ad7c1546a17d8459c995c9c8c26414._comment create mode 100644 doc/forum/Assistant_not_syncing_to_Rsync/comment_6_4c12587f972eced91c5128d4885800b5._comment create mode 100644 doc/forum/Assistant_not_syncing_to_Rsync/comment_7_6ecaaee9316bcf0c65688676d60fc055._comment create mode 100644 doc/forum/Assistant_not_syncing_to_Rsync/comment_8_daa9a9a6188afa0394833e1b682f7cd4._comment create mode 100644 doc/forum/Auto_archiving.mdwn create mode 100644 doc/forum/Automatic___96__git_annex_get__96___after_invalidation_of_local_files_due_to_external_modification__63__.mdwn create mode 100644 doc/forum/Automatic___96__git_annex_get__96___after_invalidation_of_local_files_due_to_external_modification__63__/comment_1_dab1099ee56541c194de319c593f1268._comment create mode 100644 doc/forum/Automatic___96__git_annex_get__96___after_invalidation_of_local_files_due_to_external_modification__63__/comment_2_b5faccf132fb47e3cda778a6600fd9ef._comment create mode 100644 doc/forum/Automatic_commit_messages_for_git_annex_sync.mdwn create mode 100644 doc/forum/Automatic_commit_messages_for_git_annex_sync/comment_1_ea2ec57bc695da4df8a30a35d433959d._comment create mode 100644 doc/forum/Automatic_commit_messages_for_git_annex_sync/comment_2_af71f53dbbca35d5a5c66ff131887ada._comment create mode 100644 doc/forum/Automatically_syncronise_centralised_repository.mdwn create mode 100644 doc/forum/Automatically_syncronise_centralised_repository/comment_1_6a2047daa9faf4309d2ed27d5cc48b76._comment create mode 100644 doc/forum/Automatically_syncronise_centralised_repository/comment_2_3be7b45bc2284019f17a81375637a576._comment create mode 100644 doc/forum/Behaviour_of_fsck.mdwn create mode 100644 doc/forum/Behaviour_of_fsck/comment_1_0e40f158b3f4ccdcaab1408d858b68b8._comment create mode 100644 doc/forum/Behaviour_of_fsck/comment_2_ead36a23c3e6efa1c41e4555f93e014e._comment create mode 100644 doc/forum/Behaviour_of_fsck/comment_3_97848f9a3db89c0427cfb671ba13300e._comment create mode 100644 doc/forum/Behaviour_of_fsck/comment_4_e4911dc6793f98fb81151daacbe49968._comment create mode 100644 doc/forum/Best_way_to_manage_files_on_removable_media__63__.mdwn create mode 100644 doc/forum/Best_way_to_re-add_a_file_in_a_direct_and_crippled_annex_repository.mdwn create mode 100644 doc/forum/Best_way_to_re-add_a_file_in_a_direct_and_crippled_annex_repository/comment_1_552e74f9573a34ec178f396b83252c3e._comment create mode 100644 doc/forum/Best_way_to_re-add_a_file_in_a_direct_and_crippled_annex_repository/comment_2_33c57922714f204fc63c260b838f3712._comment create mode 100644 doc/forum/Box.com_hasn__39__t_been_working_for_a_few_days.mdwn create mode 100644 doc/forum/Box.com_hasn__39__t_been_working_for_a_few_days/comment_1_6ca872c241399b9129cf9a18f42ebd43._comment create mode 100644 doc/forum/Building_a_Debian_package_of_git-annex.mdwn create mode 100644 doc/forum/Building_a_Debian_package_of_git-annex/comment_1_0848513c46f3efa21bc34784554ae88a._comment create mode 100644 doc/forum/Building_git-annex-3.20121112-19309.mdwn create mode 100644 doc/forum/Building_git-annex-3.20121112-19309/comment_1_b115e28c77fe748ee6643c41f766beb4._comment create mode 100644 doc/forum/Building_git-annex-3.20121112-19309/comment_2_8c6ae1fd74f14da12ccfa77dbd27fc65._comment create mode 100644 doc/forum/Building_git-annex-3.20121112-19309/comment_3_2f30b301c14f3a7fa0f52715d6140353._comment create mode 100644 doc/forum/Building_git-annex-3.20121112-19309/comment_4_1e3c3903a71a2ff7109372aa4dd5742a._comment create mode 100644 doc/forum/Cabal:_Could_not_resolve_dependencies___40__yesod__41__.mdwn create mode 100644 doc/forum/Cabal:_Could_not_resolve_dependencies___40__yesod__41__/comment_1_2eb4f410b54a25fcc895893a3c631c43._comment create mode 100644 doc/forum/Cabal:_Could_not_resolve_dependencies___40__yesod__41__/comment_2_44cd6f6dd674df105d6f0b3f320f3236._comment create mode 100644 doc/forum/Cabal:_Could_not_resolve_dependencies___40__yesod__41__/comment_3_992af6855901df79a2018a07941cb8b6._comment create mode 100644 doc/forum/Calculating_Annex_Cost_by_Ping_Times.mdwn create mode 100644 doc/forum/Calculating_Annex_Cost_by_Ping_Times/comment_1_9b4a6bc8d52ecbbdd537e8cf76757a80._comment create mode 100644 doc/forum/Calculating_Annex_Cost_by_Ping_Times/comment_2_7e04f85c6ba74c18c8dde148aef9bf80._comment create mode 100644 doc/forum/Can_I_store_normal_files_in_the_git-annex_git_repository__63__.mdwn create mode 100644 doc/forum/Can_I_store_normal_files_in_the_git-annex_git_repository__63__/comment_1_c8f9923d8dc76b8bed25dce5ae09b520._comment create mode 100644 doc/forum/Can__39__t_get_git-annex_merge_to_work_from_git_hook.mdwn create mode 100644 doc/forum/Can__39__t_get_git-annex_merge_to_work_from_git_hook/comment_1_8b71cb6772b219c27c17392d5099907a._comment create mode 100644 doc/forum/Can__39__t_get_git-annex_merge_to_work_from_git_hook/comment_2_af2a2634d8d128868022d033d6adb549._comment create mode 100644 doc/forum/Can__39__t_get_git-annex_merge_to_work_from_git_hook/comment_3_31ec762a0684d2ce87d229ed2924db93._comment create mode 100644 doc/forum/Can__39__t_get_pairing_to_work.mdwn create mode 100644 doc/forum/Can__39__t_get_pairing_to_work/comment_1_b981977b4fb942fd109c37fcf40f35d7._comment create mode 100644 doc/forum/Can__39__t_get_pairing_to_work/comment_2_341e2ff6c88ace1b1422e16781edf580._comment create mode 100644 doc/forum/Can__39__t_get_pairing_to_work/comment_3_0c8cce48f179f2564ff0844bb7ef6bd1._comment create mode 100644 doc/forum/Can__39__t_get_pairing_to_work/comment_4_169d77b30cea05125068ee1eeb2ef328._comment create mode 100644 doc/forum/Can__39__t_get_pairing_to_work/comment_5_70e6c4f4f01277be1767b38ca8374793._comment create mode 100644 doc/forum/Can__39__t_get_pairing_to_work/comment_6_2cd014a76fac6e08269dfd8146957418._comment create mode 100644 doc/forum/Can__39__t_get_pairing_to_work/comment_7_b9b715084d5a5562998b1724699d49e5._comment create mode 100644 doc/forum/Can__39__t_init_git_annex.mdwn create mode 100644 doc/forum/Can__39__t_init_git_annex/comment_10_c4d2ab1ecf69718a2211c3ea7b27092b._comment create mode 100644 doc/forum/Can__39__t_init_git_annex/comment_12_fca9ed3707e097bee2cd642424681005._comment create mode 100644 doc/forum/Can__39__t_init_git_annex/comment_1_a294b5e7e52aa9f66a708866be16f137._comment create mode 100644 doc/forum/Can__39__t_init_git_annex/comment_2_fcf678d5188821d63b4c9ea5b59474a8._comment create mode 100644 doc/forum/Can__39__t_init_git_annex/comment_3_c83f7dea7d5304e226e52eb3c43ef14a._comment create mode 100644 doc/forum/Can__39__t_init_git_annex/comment_4_06a01dd51ffbfd006c0afb8eab40b530._comment create mode 100644 doc/forum/Can__39__t_init_git_annex/comment_5_53c33484bded57abc60f0449331c7b05._comment create mode 100644 doc/forum/Can__39__t_init_git_annex/comment_6_9e0ff44f6e62581bfc83f9f1da3e0100._comment create mode 100644 doc/forum/Can__39__t_init_git_annex/comment_7_7f96b5ef05e2faf4a3dbe8bfc39b810e._comment create mode 100644 doc/forum/Can__39__t_init_git_annex/comment_8_65ab8463716f4ddd7721a5bcfcd18fa0._comment create mode 100644 doc/forum/Can__39__t_init_git_annex/comment_9_31a45f6a72266190b3ed7a7b02e03d5b._comment create mode 100644 doc/forum/Can__39__t_install:_Mac_OS_10.8.2.mdwn create mode 100644 doc/forum/Can__39__t_install:_Mac_OS_10.8.2/comment_1_c44023d81e9e4f7c9341af0e4271a1e4._comment create mode 100644 doc/forum/Can__39__t_install:_Mac_OS_10.8.2/comment_2_dfbcd39eedff28dc9ed866a8f1411ef3._comment create mode 100644 doc/forum/Can__39__t_install:_Mac_OS_10.8.2/comment_3_b37b2a9906ffb956cca91adb4bb4e521._comment create mode 100644 doc/forum/Can__39__t_install:_Mac_OS_10.8.2/comment_4_afddf16f8faedc78d458835480f10dc3._comment create mode 100644 doc/forum/Can_we_have_remotes_that_aren__39__t_tracked__63___.mdwn create mode 100644 doc/forum/Can_we_have_remotes_that_aren__39__t_tracked__63___/comment_1_35e5a963b9e58ed7773dfcb884f8ecbd._comment create mode 100644 doc/forum/Cannot_find_git-annex_in_server.mdwn create mode 100644 doc/forum/Cannot_find_git-annex_in_server/comment_1_bf7e98e6130698ad0dc92e3a6a63ade3._comment create mode 100644 doc/forum/Cannot_find_git-annex_in_server/comment_2_168dda4aed09f90a510bc453e8a7cda7._comment create mode 100644 doc/forum/Cannot_launch_webapp_on_ubuntu_12.04_using_ppa.mdwn create mode 100644 doc/forum/Cannot_launch_webapp_on_ubuntu_12.04_using_ppa/comment_1_9345551f5772c3a6f1490b00e1edbf69._comment create mode 100644 doc/forum/Cannot_launch_webapp_on_ubuntu_12.04_using_ppa/comment_2_0b688a442b6a911a0353e73097a24cb6._comment create mode 100644 doc/forum/Cannot_launch_webapp_on_ubuntu_12.04_using_ppa/comment_3_7e246caa00005560bb489c927c663046._comment create mode 100644 doc/forum/Cannot_launch_webapp_on_ubuntu_12.04_using_ppa/comment_4_1d8025aabe8bc72711a77f691f67da5f._comment create mode 100644 doc/forum/Cannot_launch_webapp_on_ubuntu_12.04_using_ppa/comment_5_7c2f95da65190016192424e7c622122f._comment create mode 100644 doc/forum/Cannot_launch_webapp_on_ubuntu_12.04_using_ppa/comment_6_9b8465cefe609e7a696e7573b8892e38._comment create mode 100644 doc/forum/Cannot_launch_webapp_on_ubuntu_12.04_using_ppa/comment_7_af6472762a598a454ba52ac0caa059aa._comment create mode 100644 doc/forum/Centralized_repository_with_webapp.mdwn create mode 100644 doc/forum/Centralized_repository_with_webapp/comment_1_dcb9b07fd154f4d4fdef4809cc37ce77._comment create mode 100644 doc/forum/Centralized_repository_with_webapp/comment_2_08c84f2703f89dc12982eba9dd2a06d1._comment create mode 100644 doc/forum/Change_remote_server_address.mdwn create mode 100644 doc/forum/Change_remote_server_address/comment_1_401c3d2530ac7ba41dd3857ab4737ed5._comment create mode 100644 doc/forum/Check_if_remote_is_using_GPG__63__.mdwn create mode 100644 doc/forum/Check_if_remote_is_using_GPG__63__/comment_1_db8ce8ef50fc33a28860ee475988450f._comment create mode 100644 doc/forum/Check_if_remote_is_using_GPG__63__/comment_2_11c7033904c9c7a1df766e915632c386._comment create mode 100644 doc/forum/Check_if_remote_is_using_GPG__63__/comment_3_a7ab70ad87a334c36761ddb3d830d99b._comment create mode 100644 doc/forum/Check_when_your_last_fsck_was__63__.mdwn create mode 100644 doc/forum/Check_when_your_last_fsck_was__63__/comment_1_ee98a1fcd796fe4fd7af6f77d0c1837d._comment create mode 100644 doc/forum/Cleaning_up_after_aborted_sync_in_direct_mode.mdwn create mode 100644 doc/forum/Cleaning_up_after_aborted_sync_in_direct_mode/comment_1_3440b2e1662d3b113c18283afcbf4520._comment create mode 100644 doc/forum/Cleaning_up_after_aborted_sync_in_direct_mode/comment_2_9a61ba8ac4a375f1d69cd09b5a6f8091._comment create mode 100644 doc/forum/Cleaning_up_after_aborted_sync_in_direct_mode/comment_3_6b9d8c48547f3d0a911310622ba91df7._comment create mode 100644 doc/forum/Coming_from_git_world.mdwn create mode 100644 doc/forum/Coming_from_git_world/comment_10_098bef38c2688607e869425a557cc482._comment create mode 100644 doc/forum/Coming_from_git_world/comment_11_98d75a1415e0c3689ab4231855e61233._comment create mode 100644 doc/forum/Coming_from_git_world/comment_12_5e7079e9bf3e4d97191333c66ac00e52._comment create mode 100644 doc/forum/Coming_from_git_world/comment_1_357443dc601ae38784c01cf18552f4d5._comment create mode 100644 doc/forum/Coming_from_git_world/comment_2_ed1847dd3f47a9d013b8dd0455fb80ff._comment create mode 100644 doc/forum/Coming_from_git_world/comment_3_09c6bb83a73d34dff2b8bc185a14a1db._comment create mode 100644 doc/forum/Coming_from_git_world/comment_4_6c731bb9a8d21dd9ab8c09612b23f908._comment create mode 100644 doc/forum/Coming_from_git_world/comment_5_e719d99af5afd90da3d3db692eff28dc._comment create mode 100644 doc/forum/Coming_from_git_world/comment_6_85a42106944dba9995fb3f4bfee3443a._comment create mode 100644 doc/forum/Coming_from_git_world/comment_7_90623294b910ceca3dc8ebd41b50fc9b._comment create mode 100644 doc/forum/Coming_from_git_world/comment_8_28dbee30eb54877418f72eb8935302d8._comment create mode 100644 doc/forum/Coming_from_git_world/comment_9_6edb36ea9535030fa3766937398e5bc7._comment create mode 100644 doc/forum/Compression_in_special_remotes___40__specifically_S3__41____63__.mdwn create mode 100644 doc/forum/Compression_in_special_remotes___40__specifically_S3__41____63__/comment_1_9c6c4ca0c9dc6976ba7cf27e84683bf0._comment create mode 100644 doc/forum/DBus_on_Ubuntu_12.04__63__.mdwn create mode 100644 doc/forum/DBus_on_Ubuntu_12.04__63__/comment_1_dc14a40b64b7eda94d1a3fd766cd39cc._comment create mode 100644 doc/forum/DBus_on_Ubuntu_12.04__63__/comment_2_608a30e274e6a691a39f69503720e320._comment create mode 100644 doc/forum/DBus_on_Ubuntu_12.04__63__/comment_3_791b9978b410c1aff7fd8ef05c38f5f9._comment create mode 100644 doc/forum/DBus_on_Ubuntu_12.04__63__/comment_4_8665c95299916138c4af375626d9ec7d._comment create mode 100644 doc/forum/DS__95__Store_files_are_not_added.mdwn create mode 100644 doc/forum/DS__95__Store_files_are_not_added/comment_1_30687306da9bd35ec02a806193c5e240._comment create mode 100644 doc/forum/Debugging_Git_Annex.mdwn create mode 100644 doc/forum/Debugging_Git_Annex/comment_1_ce63b2ee641a2338f1ad5ded9e6f09a8._comment create mode 100644 doc/forum/Debugging_Git_Annex/comment_2_1d70ff052d00f33c34fd45730ea13040._comment create mode 100644 doc/forum/Default_text__47__html_handler.mdwn create mode 100644 doc/forum/Default_text__47__html_handler/comment_1_4730061916c7e12b7a41906152f847ee._comment create mode 100644 doc/forum/Delete_unused_files__47__metadata.mdwn create mode 100644 doc/forum/Delete_unused_files__47__metadata/comment_1_3efc19895c8dec89b71ae3778b583fea._comment create mode 100644 doc/forum/Delete_unused_files__47__metadata/comment_2_23597d9468347b3d94257f3c02afe1b8._comment create mode 100644 doc/forum/Detached_git_work_tree__63__.mdwn create mode 100644 doc/forum/Detached_git_work_tree__63__/comment_10_656c737772bf92be2c7a2f33bd2bb0f0._comment create mode 100644 doc/forum/Detached_git_work_tree__63__/comment_1_28ac35a325fba250721d9f1b7c994960._comment create mode 100644 doc/forum/Detached_git_work_tree__63__/comment_2_7128c26bbc8efea04a5a317edf0ca9f2._comment create mode 100644 doc/forum/Detached_git_work_tree__63__/comment_3_a3c22f905748ff2c803e8621c74a87a0._comment create mode 100644 doc/forum/Detached_git_work_tree__63__/comment_4_8063921241760458349e7cb0cadf3d4e._comment create mode 100644 doc/forum/Detached_git_work_tree__63__/comment_5_4510a787255cb03e7d0c3e7b830b7d52._comment create mode 100644 doc/forum/Detached_git_work_tree__63__/comment_6_ffd9c67ecc5b46ae98996018573f5591._comment create mode 100644 doc/forum/Detached_git_work_tree__63__/comment_7_36ca007643c983604fc4aed6ec8cb3d2._comment create mode 100644 doc/forum/Detached_git_work_tree__63__/comment_8_b7a2da4fbace7156e11c48a496a19dc9._comment create mode 100644 doc/forum/Detached_git_work_tree__63__/comment_9_f9fa237a693d28178f0451799209f7e2._comment create mode 100644 doc/forum/Difference_between_copy__44___move_and_get__63__.mdwn create mode 100644 doc/forum/Difference_between_copy__44___move_and_get__63__/comment_1_26ee8192af3a62178c1ccf17c6da5ca5._comment create mode 100644 doc/forum/Different_annexes_pointing_to_same_special_remote__63__.mdwn create mode 100644 doc/forum/Different_annexes_pointing_to_same_special_remote__63__/comment_1_359f46805e6508d03aadd90429937546._comment create mode 100644 doc/forum/Direct_special_remotes.mdwn create mode 100644 doc/forum/Direct_special_remotes/comment_1_50357130a1c57ad2fab70f71925faf02._comment create mode 100644 doc/forum/Direct_special_remotes/comment_2_e94a722ca056a068bcc16eb822008602._comment create mode 100644 doc/forum/Direct_special_remotes/comment_4_187036bbfee0508e2914afb51ead3c71._comment create mode 100644 doc/forum/Direct_special_remotes/comment_4_6bfbf60f2061d49b7d34c844e7e1dea2._comment create mode 100644 doc/forum/Direct_special_remotes/comment_5_69c34c655e4b153dfc0d1b8580091124._comment create mode 100644 doc/forum/Direct_special_remotes/comment_6_b054cfc3d3f81873f3faae7eb4f5337c._comment create mode 100644 doc/forum/Does_Jabber_syncing_work_when_the_buddy_is_offline__63__.mdwn create mode 100644 doc/forum/Does_Jabber_syncing_work_when_the_buddy_is_offline__63__/comment_1_f290dd8547176793934f8077374e1c0a._comment create mode 100644 doc/forum/Does_Jabber_syncing_work_when_the_buddy_is_offline__63__/comment_2_c358eb51047f333e582bd824be5e0e65._comment create mode 100644 doc/forum/Does_Jabber_syncing_work_when_the_buddy_is_offline__63__/comment_3_a2332c0e7b29110b9aed2ab69ce9d8c4._comment create mode 100644 doc/forum/Does_git-annex_version_big_files__63__.mdwn create mode 100644 doc/forum/Does_git-annex_version_big_files__63__/comment_1_0b44003c1dc53adb807298ae452f8004._comment create mode 100644 doc/forum/Does_git-annex_version_big_files__63__/comment_2_ca40b67abd7bd36155d16d0396d7472c._comment create mode 100644 doc/forum/Does_git-annex_version_big_files__63__/comment_3_32de3501feedce51b43ed9dcc399c7a9._comment create mode 100644 doc/forum/Does_git-annex_version_big_files__63__/comment_4_8c65a7f8bda3c876971c2801fb6a76a1._comment create mode 100644 doc/forum/Does_migrate_ensure_data_integrity__63__.mdwn create mode 100644 doc/forum/Does_migrate_ensure_data_integrity__63__/comment_1_cef50b32c46f4406c6f918c5866ddc15._comment create mode 100644 doc/forum/Does_migrate_ensure_data_integrity__63__/comment_2_f389b924c8531b35fdf5dedd10fc8000._comment create mode 100644 doc/forum/Don__39__t_understand_how_to_delete__47__recover_files.mdwn create mode 100644 doc/forum/Don__39__t_understand_how_to_delete__47__recover_files/comment_1_b307bfb0b70d649897f411eb753bd50a._comment create mode 100644 doc/forum/Don__39__t_understand_how_to_delete__47__recover_files/comment_2_58a6a1476274b8c4feb3d43ecd998759._comment create mode 100644 doc/forum/Don__39__t_understand_how_to_delete__47__recover_files/comment_3_4b857f481db7b2437ac9f8137a8510e2._comment create mode 100644 doc/forum/Don__39__t_understand_how_to_delete__47__recover_files/comment_4_828db3bf2863d98c0b0fb4074aa7f066._comment create mode 100644 doc/forum/Don__39__t_understand_how_to_delete__47__recover_files/comment_5_cb2063d6a4e08a5c12bf3723d0fa74e0._comment create mode 100644 doc/forum/Don__39__t_understand_how_to_delete__47__recover_files/comment_6_1759bcd5708f591f91b9c410f6dc5c54._comment create mode 100644 doc/forum/Don__39__t_understand_how_to_delete__47__recover_files/comment_7_2a389f01eb5131042ea1e71a73c9787a._comment create mode 100644 doc/forum/Don__39__t_understand_local_vs._known_keys.mdwn create mode 100644 doc/forum/Don__39__t_understand_local_vs._known_keys/comment_1_10749c0d76e824217dd1ff8c8a6e42a5._comment create mode 100644 doc/forum/Don__39__t_understand_local_vs._known_keys/comment_2_db9f1b6d9638c2b0a7e241c2727e8cfb._comment create mode 100644 doc/forum/Drop_with_assistant.mdwn create mode 100644 doc/forum/Drop_with_assistant/comment_1_048f5a31c549afb19b76a65bddd0cd24._comment create mode 100644 doc/forum/Drop_with_assistant/comment_2_527d7b6a8efa85b904111f179912d926._comment create mode 100644 doc/forum/Drop_with_assistant/comment_3_c50857506869bb1cd306b66acf37fba8._comment create mode 100644 doc/forum/Drop_with_assistant/comment_4_1ea37445d5eb96c3efa182e88e07b867._comment create mode 100644 doc/forum/Drop_with_assistant/comment_5_c08908ea5232cbe067c73ecd12d0e218._comment create mode 100644 doc/forum/Drop_with_assistant/comment_6_015134228cb865f97326fbb7193636ea._comment create mode 100644 doc/forum/Drop_with_assistant/comment_7_950759930667588f21659cd6d7065fbb._comment create mode 100644 doc/forum/Drop_with_assistant/comment_8_773e540e46adc43487323e8d38ceb2d9._comment create mode 100644 doc/forum/Drop_with_assistant/comment_9_d85d120d7219ea6c179c2619a17bdae9._comment create mode 100644 doc/forum/Effectively_replicating_backup_files.mdwn create mode 100644 doc/forum/Effectively_replicating_backup_files/comment_1_b1ab0da82db076c5244b0dcc95282ddd._comment create mode 100644 doc/forum/Effectively_replicating_backup_files/comment_2_472ab9c973b475f7f3ce7e3934f94281._comment create mode 100644 doc/forum/Effectively_replicating_backup_files/comment_3_826493bd59b81786c1f6a56f1c438004._comment create mode 100644 doc/forum/Encrypted_ssh_remote__44___synced_folders.mdwn create mode 100644 doc/forum/Encrypted_ssh_remote__44___synced_folders/comment_1_7b9b4ef614c90e0b222d24678d1b9026._comment create mode 100644 doc/forum/Error_adding_ssh_remote_in_assistant.mdwn create mode 100644 doc/forum/Error_adding_ssh_remote_in_assistant/comment_1_eecc0660db4083cc91c5330587f74610._comment create mode 100644 doc/forum/Error_adding_ssh_remote_in_assistant/comment_2_3e6aad22e8020b12ff7ef914b75281d1._comment create mode 100644 doc/forum/Error_adding_ssh_remote_in_assistant/comment_3_3ea529e16502071fc0980c6d5c60a036._comment create mode 100644 doc/forum/External_drive_syncs_git-annex_branch_but_not_master_branch.mdwn create mode 100644 doc/forum/External_drive_syncs_git-annex_branch_but_not_master_branch/comment_1_9a909e3d89061adacbd8ed370520250c._comment create mode 100644 doc/forum/External_drive_syncs_git-annex_branch_but_not_master_branch/comment_2_0dd489b264374b7b1065b89e1ff7561b._comment create mode 100644 doc/forum/Feature_Request:_add_filename_to_hash_objects.mdwn create mode 100644 doc/forum/Feature_Request:_add_filename_to_hash_objects/comment_1_73dc0a9cad486cf2d34faf064c6193b1._comment create mode 100644 doc/forum/Feature_Request:_add_filename_to_hash_objects/comment_2_f818b3ecfeb1d1dd83df4668c061718a._comment create mode 100644 doc/forum/Feature_request:_Multiple_concurrent_transfers.mdwn create mode 100644 doc/forum/Feature_request:_git_annex_copy_--auto_does_the_right_thing.mdwn create mode 100644 doc/forum/Feature_request:_git_annex_copy_--auto_does_the_right_thing/comment_1_bbac7d0810a79eb1f42a01e1b31d5c4c._comment create mode 100644 doc/forum/Feature_request:_webapp_support_for_centralized_bare_repos.mdwn create mode 100644 doc/forum/First_attempt_at_an_OSX_launcher___40__.app__41__.mdwn create mode 100644 doc/forum/First_attempt_at_an_OSX_launcher___40__.app__41__/comment_1_97c261b9080c5ecc5424683066bbe05b._comment create mode 100644 doc/forum/First_attempt_at_an_OSX_launcher___40__.app__41__/comment_2_ae45f9703b635c235409682cf252d36c._comment create mode 100644 doc/forum/First_attempt_at_an_OSX_launcher___40__.app__41__/comment_3_066ca31a2e5dfe55a58092ba85231c7c._comment create mode 100644 doc/forum/First_attempt_at_an_OSX_launcher___40__.app__41__/comment_4_a0a9f7f44cadb8036fcddfc21bb0781f._comment create mode 100644 doc/forum/First_attempt_at_an_OSX_launcher___40__.app__41__/comment_5_92240b3f8629f1f2bbe1829700082a79._comment create mode 100644 doc/forum/Fixing_up_corrupt_annexes.mdwn create mode 100644 doc/forum/Fixing_up_corrupt_annexes/comment_1_cea21f96bcfb56aaab7ea03c1c804d2d._comment create mode 100644 doc/forum/Fixing_up_corrupt_annexes/comment_2_5cdd2fcfa61b3f6255e5ad63a3ab00ce._comment create mode 100644 doc/forum/Forcing_one_repo_to_contain_a_copy_of_all_files.mdwn create mode 100644 doc/forum/Forcing_one_repo_to_contain_a_copy_of_all_files/comment_1_702b1b94c735f1b9cde16daa77a80c12._comment create mode 100644 doc/forum/Forcing_one_repo_to_contain_a_copy_of_all_files/comment_2_3df7fcbcd482bb9377ead238b314995b._comment create mode 100644 doc/forum/GPG_passphrase_handling.txt create mode 100644 doc/forum/GPG_passphrase_handling/comment_1_11ba130e8bea6698858d0a1a5b01830f._comment create mode 100644 doc/forum/GPG_passphrase_handling/comment_2_ef9d58d15b7bbe0b3c7140bb01d73a31._comment create mode 100644 doc/forum/GPG_passphrase_handling/comment_3_84eb129c8483b87b3ae6ecaf8b4a8309._comment create mode 100644 doc/forum/GPG_passphrase_handling/comment_4_8724297f6d7ac140ab395a940bab0d7d._comment create mode 100644 doc/forum/Getting_started_with_Amazon_S3.mdwn create mode 100644 doc/forum/Getting_started_with_Amazon_S3/comment_1_f50883133d5d4903cc95c0dcaa52d052._comment create mode 100644 doc/forum/Getting_started_with_Amazon_S3/comment_2_e90aa3259d9a12cd67daa27d42d69ab5._comment create mode 100644 doc/forum/Getting_started_with_Amazon_S3/comment_3_c3adce7c0f29e71ed9dd07103ede2c1a._comment create mode 100644 doc/forum/Git_Annex_Assistant:_How_to_add_a_remote__63__.mdwn create mode 100644 doc/forum/Git_Annex_Assistant:_How_to_add_a_remote__63__/comment_1_d0a3d0090928790d5a05e9f8e5f05320._comment create mode 100644 doc/forum/Git_Annex_Transfer_Protocols.mdwn create mode 100644 doc/forum/Git_Annex_Transfer_Protocols/comment_1_a870ec991078c95a6bb683d6962ab56e._comment create mode 100644 doc/forum/Git_Annex_Transfer_Protocols/comment_2_71419376ef50a679ea8f0f9e16991c17._comment create mode 100644 doc/forum/Git_Annex_Transfer_Protocols/comment_3_fea43664a500111ca99f4043e0dadb14._comment create mode 100644 doc/forum/Git_Annex_Transfer_Protocols/comment_4_56fb2dab1d4030c9820be32b495afdf0._comment create mode 100644 doc/forum/Git_Annex_Transfer_Protocols/comment_5_a6ec9c5a4a3c0bac1df87f1df9be140b._comment create mode 100644 doc/forum/Git_Annex_Transfer_Protocols/comment_6_1678452fb7114aeabcf0cc3d5f6c69b0._comment create mode 100644 doc/forum/Git_annex___39__corrupting__39___itself.mdwn create mode 100644 doc/forum/Git_annex___39__corrupting__39___itself/comment_1_bcf50a215e2f8771e098aadfff4c300c._comment create mode 100644 doc/forum/Git_annex___39__corrupting__39___itself/comment_3_75f957e7be6c1ad8936c0a2a5374db3e._comment create mode 100644 doc/forum/Git_annex___39__corrupting__39___itself/comment_3_ab062b1df3b55fd49852a6220c98249e._comment create mode 100644 doc/forum/Git_annex_assistant_in_command_line.mdwn create mode 100644 doc/forum/Git_annex_assistant_in_command_line/comment_1_ce05226307ade8db90ada2dbf290bd58._comment create mode 100644 doc/forum/Git_annex_assistant_on_EC2.mdwn create mode 100644 doc/forum/Git_annex_assistant_on_EC2/comment_1_bbdb4611373117a2176c225378110a05._comment create mode 100644 doc/forum/Git_annex_assistant_on_EC2/comment_2_614ed11f7134137d6376d36a61c293f5._comment create mode 100644 doc/forum/Git_annex_on_Windows.mdwn create mode 100644 doc/forum/Git_annex_on_Windows/comment_1_da24ba0219a164f9ab93fe75dd85127e._comment create mode 100644 doc/forum/Git_annex_on_Windows/comment_2_c0880ce3ee13d388ab5b46a740170845._comment create mode 100644 doc/forum/Git_annex_on_Windows/comment_3_70c22716fde60d14fd0c7e74acf4a224._comment create mode 100644 doc/forum/Git_annex_on_Windows/comment_4_b9232deab6bc5036d7339aa202013218._comment create mode 100644 doc/forum/Git_annex_on_Windows/comment_5_27af3c431b50b540d2bd1d3af3f21080._comment create mode 100644 doc/forum/Git_annex_syncing_speed__44___possible__63__.mdwn create mode 100644 doc/forum/Git_annex_syncing_speed__44___possible__63__/comment_1_8aa224b3016dc38e4cea8ee1865a3ab6._comment create mode 100644 doc/forum/Git_repos_in_git_annex__63__.mdwn create mode 100644 doc/forum/Git_repos_in_git_annex__63__/comment_1_8aaa0d83e8fcd5997f6b0097f3b21622._comment create mode 100644 doc/forum/Git_repositories_in_the_annex__63__.mdwn create mode 100644 doc/forum/Handling_web_special_remote_when_content_changes__63__.mdwn create mode 100644 doc/forum/Handling_web_special_remote_when_content_changes__63__/comment_1_05ee6a1b1943ef3c90634e52233bde1c._comment create mode 100644 doc/forum/Handling_web_special_remote_when_content_changes__63__/comment_2_48d82e391812d8ec0d4e6562d0607fe7._comment create mode 100644 doc/forum/Help_Windows_walkthrough.mdwn create mode 100644 doc/forum/Help_Windows_walkthrough/comment_1_5fc22393a1b28235eabb2871ad83d0a7._comment create mode 100644 doc/forum/Help_on_my_usecase.mdwn create mode 100644 doc/forum/Help_on_my_usecase/comment_1_a35b35c7927640f21d47c3df4f91dabb._comment create mode 100644 doc/forum/Help_with_syncing_file_contents.mdwn create mode 100644 doc/forum/Help_with_syncing_file_contents/comment_1_7ec34de3140983739080115c82966bf5._comment create mode 100644 doc/forum/Help_with_syncing_file_contents/comment_2_7dba58d3c62d6f64a270298e4e4329a4._comment create mode 100644 doc/forum/Help_with_syncing_file_contents/comment_3_b26cfa20dc81517d93e760f4809bdc24._comment create mode 100644 doc/forum/How_do_I_cleanly_remove_an_Android_git-annex_installation__63__.mdwn create mode 100644 doc/forum/How_do_I_cleanly_remove_an_Android_git-annex_installation__63__/comment_1_e14757c2c106770c2d7069ace4987b3b._comment create mode 100644 doc/forum/How_do_I_dropunused_with_an_rsync_remote__63__.mdwn create mode 100644 doc/forum/How_do_I_dropunused_with_an_rsync_remote__63__/comment_1_8db3cb5348b845eb99c2c829957db9ea._comment create mode 100644 doc/forum/How_do_I_dropunused_with_an_rsync_remote__63__/comment_2_6cc909d9d74bc1ccb8a7b0d7d234c7cd._comment create mode 100644 doc/forum/How_do_I_dropunused_with_an_rsync_remote__63__/comment_3_f24d678e4192a70322aa164ed9b71fc8._comment create mode 100644 doc/forum/How_do_I_dropunused_with_an_rsync_remote__63__/comment_4_9233decd0aaf9211447f36e0d9346445._comment create mode 100644 doc/forum/How_do_I_dropunused_with_an_rsync_remote__63__/comment_5_e1deb110f752e5495d5c77ec444abac5._comment create mode 100644 doc/forum/How_do_you_know_when_something_fails_a_fsck__63__.mdwn create mode 100644 doc/forum/How_do_you_know_when_something_fails_a_fsck__63__/comment_1_1c14981916dd55376d5e9f95023556cb._comment create mode 100644 doc/forum/How_does_one_change_git-annex_assistant__39__s_web_browser__63__.mdwn create mode 100644 doc/forum/How_does_one_change_git-annex_assistant__39__s_web_browser__63__/comment_1_f4402eabda2327da3a0bbc64ed3baf9a._comment create mode 100644 doc/forum/How_does_one_change_git-annex_assistant__39__s_web_browser__63__/comment_2_cdb41f2c7b6bc5bf40d88582dcbf45aa._comment create mode 100644 doc/forum/How_does_one_change_git-annex_assistant__39__s_web_browser__63__/comment_3_ca75e928c245eb23a02b5f40ec69cbb1._comment create mode 100644 doc/forum/How_does_one_change_git-annex_assistant__39__s_web_browser__63__/comment_4_1635f136909711295b9b70d1255e0378._comment create mode 100644 doc/forum/How_does_one_change_git-annex_assistant__39__s_web_browser__63__/comment_5_ee0cbe9498c518de98480a2ad229f685._comment create mode 100644 doc/forum/How_does_one_change_git-annex_assistant__39__s_web_browser__63__/comment_6_799b9d9d3ffbc2c14eca8d442e2aff8c._comment create mode 100644 doc/forum/How_to_cancel_an_add__63__.mdwn create mode 100644 doc/forum/How_to_cancel_an_add__63__/comment_1_f768ce5dc7c76f96ee6eb352f167be44._comment create mode 100644 doc/forum/How_to_copy__47__duplicate_all_data_from_rsync__47__ssh_backend_to_other_backend__63__.mdwn create mode 100644 doc/forum/How_to_copy__47__duplicate_all_data_from_rsync__47__ssh_backend_to_other_backend__63__/comment_1_7973928b1aa9e0fcfeb6bf80885441f5._comment create mode 100644 doc/forum/How_to_deal_with_renamed_files_in_direct_mode__63__.mdwn create mode 100644 doc/forum/How_to_deal_with_renamed_files_in_direct_mode__63__/comment_1_fe38fedbbc9e4a9e13bf19950e63c7ac._comment create mode 100644 doc/forum/How_to_define_an_alternative_remote_url_for_a_git_remote_repository__63__.mdwn create mode 100644 doc/forum/How_to_define_an_alternative_remote_url_for_a_git_remote_repository__63__/comment_1_52918b5ec25e55837215439fe1bb1a14._comment create mode 100644 doc/forum/How_to_define_an_alternative_remote_url_for_a_git_remote_repository__63__/comment_2_3a1567c9f484b5e12e5560cdcc2cfddd._comment create mode 100644 doc/forum/How_to_define_an_alternative_remote_url_for_a_git_remote_repository__63__/comment_3_48c3a80c14a85f27d742482b2ccbe628._comment create mode 100644 doc/forum/How_to_delete_a_remote__63__.mdwn create mode 100644 doc/forum/How_to_delete_a_remote__63__/comment_1_8cba186bb67079ff41bf6d0b04613f4a._comment create mode 100644 doc/forum/How_to_delete_a_remote__63__/comment_2_33c429ffa7e9e2ed9c5fac760ee8e82c._comment create mode 100644 doc/forum/How_to_delete_a_remote__63__/comment_3_e9c5508092ca2983f458b16bf1e07082._comment create mode 100644 doc/forum/How_to_destroy_a_master_annex_and_all_remotes_with_git_annex_assistant_and_ext4.mdwn create mode 100644 doc/forum/How_to_destroy_a_master_annex_and_all_remotes_with_git_annex_assistant_and_ext4/comment_1_42ca6cfbbb79fe63514805b8119ac16b._comment create mode 100644 doc/forum/How_to_destroy_a_master_annex_and_all_remotes_with_git_annex_assistant_and_ext4/comment_2_c94ce6a9767c624e2445a7d9eea40396._comment create mode 100644 doc/forum/How_to_destroy_a_master_annex_and_all_remotes_with_git_annex_assistant_and_ext4/comment_3_bcda51053b62bbb20ce71a59469e1b26._comment create mode 100644 doc/forum/How_to_destroy_a_master_annex_and_all_remotes_with_git_annex_assistant_and_ext4/comment_4_48e5b9eae920e5f13812de8d6f6bc640._comment create mode 100644 doc/forum/How_to_destroy_a_master_annex_and_all_remotes_with_git_annex_assistant_and_ext4/comment_5_787c0bfdc1d309db1486c3a37723a957._comment create mode 100644 doc/forum/How_to_destroy_a_master_annex_and_all_remotes_with_git_annex_assistant_and_ext4/comment_6_8894beb06443f234e9200b03b5f3badf._comment create mode 100644 doc/forum/How_to_destroy_a_master_annex_and_all_remotes_with_git_annex_assistant_and_ext4/comment_7_457f62ee3e58f68a55f66c5bde6002fd._comment create mode 100644 doc/forum/How_to_destroy_a_master_annex_and_all_remotes_with_git_annex_assistant_and_ext4/comment_8_bd2b412116a66107bc0ff0efd7e39a58._comment create mode 100644 doc/forum/How_to_expire_old_versions_of_files_that_have_been_edited__63__.mdwn create mode 100644 doc/forum/How_to_expire_old_versions_of_files_that_have_been_edited__63__/comment_1_dccf4dc4483d08e5e2936b2cadeafeaf._comment create mode 100644 doc/forum/How_to_expire_old_versions_of_files_that_have_been_edited__63__/comment_2_5710294c1c8652c12b6df2233255a45e._comment create mode 100644 doc/forum/How_to_handle_the_git-annex_branch__63__.mdwn create mode 100644 doc/forum/How_to_handle_the_git-annex_branch__63__/comment_1_800bd55b322e72f229882d7fd3888b14._comment create mode 100644 doc/forum/How_to_make_Maven_releases_work_with_git_annex___63__.mdwn create mode 100644 doc/forum/How_to_make_Maven_releases_work_with_git_annex___63__/comment_1_9298aa55771b68873de02e6a7964bbdc._comment create mode 100644 doc/forum/How_to_prevent_the_assistant_from_downloading_all_data__63__.mdwn create mode 100644 doc/forum/How_to_prevent_the_assistant_from_downloading_all_data__63__/comment_1_fd8b287758ad77b3527ae71017cffabf._comment create mode 100644 doc/forum/How_to_prevent_the_assistant_from_downloading_all_data__63__/comment_2_e8e75b4451aaf55461edf2f3d68797ed._comment create mode 100644 doc/forum/How_to_rename_a_remote__63__.mdwn create mode 100644 doc/forum/How_to_rename_a_remote__63__/comment_1_a9bfbd82f7bb47661f0d9e0e0d904332._comment create mode 100644 doc/forum/How_to_restore_symlinks.mdwn create mode 100644 doc/forum/How_to_restore_symlinks/comment_1_c67e752cf7d5431096fab4b3304790a7._comment create mode 100644 doc/forum/How_to_restore_symlinks/comment_2_f9ec6096595e2c149c48924e3b54542f._comment create mode 100644 doc/forum/How_to_restore_symlinks/comment_3_4ff80729787a2a4e2baf05dd1db37da3._comment create mode 100644 doc/forum/How_to_retroactively_annex_a_file_already_in_a_git_repo.mdwn create mode 100644 doc/forum/How_to_set_up_two_assistants_with_one_shared_transfer_repository__63__.mdwn create mode 100644 doc/forum/How_to_set_up_two_assistants_with_one_shared_transfer_repository__63__/comment_1_bedaf308cfc70b9e751914a400ebcbc2._comment create mode 100644 doc/forum/How_to_set_up_two_assistants_with_one_shared_transfer_repository__63__/comment_2_d665b1514253c8aa487ebf8b2728e3b1._comment create mode 100644 doc/forum/How_to_set_up_two_assistants_with_one_shared_transfer_repository__63__/comment_3_aef42387a3673ab6710fb23e878d7e17._comment create mode 100644 doc/forum/How_to_set_up_two_assistants_with_one_shared_transfer_repository__63__/comment_4_bfbcc041db472f4808979e6b3d7c4be2._comment create mode 100644 doc/forum/Howto_remove_a_repository__63__.mdwn create mode 100644 doc/forum/Howto_remove_a_repository__63__/comment_1_b55fa4e92bb457ecaa5ca8f5cee7be1d._comment create mode 100644 doc/forum/Howto_remove_unused_files.mdwn create mode 100644 doc/forum/Howto_remove_unused_files/comment_1_f2a7948268ce3cb3967a9fdd8ccc570a._comment create mode 100644 doc/forum/Howto_remove_unused_files/comment_2_9b4d198c2d8a52adef3d166a8196fc0d._comment create mode 100644 doc/forum/Howto_remove_unused_files/comment_3_441d10901d5c055ac3ed2a6cb61c075c._comment create mode 100644 doc/forum/Import_options.txt create mode 100644 doc/forum/Import_options/comment_1_118a5f978090a3909299876a01c0adec._comment create mode 100644 doc/forum/Import_options/comment_2_21da91f08cb6b28ae3e79ade033db516._comment create mode 100644 doc/forum/Is_an_automagic_upgrade_of_the_object_directory_safe__63__.mdwn create mode 100644 doc/forum/Is_an_automagic_upgrade_of_the_object_directory_safe__63__/comment_1_c25900b9d2d62cc0b8c77150bcfebadf._comment create mode 100644 doc/forum/Is_git-annex_in_a_precarious_state_before_the_initial_commit__63__.mdwn create mode 100644 doc/forum/Is_git-annex_in_a_precarious_state_before_the_initial_commit__63__/comment_1_f9decde3955f10148febc4646fba5a68._comment create mode 100644 doc/forum/Is_git-annex_in_a_precarious_state_before_the_initial_commit__63__/comment_2_ed32a48edce4f150bedf24cfe91de254._comment create mode 100644 doc/forum/Is_git-annex_in_a_precarious_state_before_the_initial_commit__63__/comment_3_ef9618850e5e688bac3c646983f00ed8._comment create mode 100644 doc/forum/Is_git-annex_in_a_precarious_state_before_the_initial_commit__63__/comment_4_4bf460c5826c36b205e418c4f3f7d770._comment create mode 100644 doc/forum/Is_it_possible_to_make_git-sync_not_nullify_symlinks__63__.mdwn create mode 100644 doc/forum/Is_it_possible_to_make_git-sync_not_nullify_symlinks__63__/comment_1_d6f2d2cdc5f4ffde9eee9f3a8c215a06._comment create mode 100644 doc/forum/Lacking_webapp_on_Trisquel__47__Ubuntu_Precise.mdwn create mode 100644 doc/forum/Lacking_webapp_on_Trisquel__47__Ubuntu_Precise/comment_1_6bd27bd31833336c1df783253378ccae._comment create mode 100644 doc/forum/Let_watch_selectively_annex_files.mdwn create mode 100644 doc/forum/Let_watch_selectively_annex_files/comment_1_8379de87d16502d9aadf252da01e4d9a._comment create mode 100644 doc/forum/Let_watch_selectively_annex_files/comment_2_2219ff6b4dc927eb2a299cd1af90aed8._comment create mode 100644 doc/forum/Links_or_actual_files__63___Confused__33__.mdwn create mode 100644 doc/forum/Links_or_actual_files__63___Confused__33__/comment_1_779cee2448d7070b1dd636d01296c01e._comment create mode 100644 doc/forum/Links_or_actual_files__63___Confused__33__/comment_2_bccda88697ab7beec0b9fe9ee0230688._comment create mode 100644 doc/forum/Links_or_actual_files__63___Confused__33__/comment_3_c2a9da3f03b55ff294dc0d2010380119._comment create mode 100644 doc/forum/Local_and_remote_in_direct_mode.mdwn create mode 100644 doc/forum/Local_and_remote_in_direct_mode/comment_1_45f89ebcb6092d1b2582feebc8a5e9d7._comment create mode 100644 doc/forum/Looking_at_the_webapp_on_OSX.mdwn create mode 100644 doc/forum/Looking_at_the_webapp_on_OSX/comment_1_68820f2f469356633c1abb18a47e0c59._comment create mode 100644 doc/forum/Looking_at_the_webapp_on_OSX/comment_2_4ce86546d8a135df9cfab46b4612fa0b._comment create mode 100644 doc/forum/Looking_at_the_webapp_on_OSX/comment_3_6d398a2cceff14a1b774b85ee1725073._comment create mode 100644 doc/forum/Looking_at_the_webapp_on_OSX/comment_4_5e503787a4b1d3534c5e20da5480b763._comment create mode 100644 doc/forum/Looking_at_the_webapp_on_OSX/comment_5_c735841bc230efc61594ea013fc2902b._comment create mode 100644 doc/forum/Looking_at_the_webapp_on_OSX/comment_6_0e489fbfc89d282e9eb47f1b814ff70c._comment create mode 100644 doc/forum/Make_whereis_output_more_compact.mdwn create mode 100644 doc/forum/Making_git-annex_a_self-funded_project__63__.mdwn create mode 100644 doc/forum/Making_git-annex_a_self-funded_project__63__/comment_1_4a1ba95b7231ba973ddb672d2419e28c._comment create mode 100644 doc/forum/Making_git-annex_a_self-funded_project__63__/comment_2_7c476ae92e63c991f229708678874ca2._comment create mode 100644 doc/forum/Making_git-annex_less_necessary.mdwn create mode 100644 doc/forum/Making_git-annex_less_necessary/comment_1_03faaa3866778d24cd03887b85dc9954._comment create mode 100644 doc/forum/Making_git-annex_less_necessary/comment_2_2db02a94dffd525885c9d7fc6c5fa464._comment create mode 100644 doc/forum/Making_git-annex_less_necessary/comment_3_429ec656e0ac02f98843f8d7f3c02d6a._comment create mode 100644 doc/forum/Making_git-annex_less_necessary/comment_4_384813dd022dfd9c1ef14e0f1479a123._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__.mdwn create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_10_a061d300b718ad943c940e122cc57220._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_11_76529080054407570611b4357ce4f3ed._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_12_9acf5ce41a023f3848a51891cceeb51b._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_1_25e65ee3949e7d918376298cf11585f2._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_2_8a71ca048f9de29a198a6afb17d5315e._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_3_e3d1d3a3d3d831432ec940a8ab6f31e9._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_4_26a33eae98b4faaf6baf6635e3d28a8f._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_5_49ac298d39c824b0e52a239961463e09._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_6_55a4a3616ea59654da1c2f9902561e3b._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_7_92a2af3e0e328bb48bcc67a69187ee57._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_8_f6e39e71882d55cdc061166aea3e2bd3._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_9_6c45a6264d69e22800c329a0f8a2d470._comment create mode 100644 doc/forum/Managing_multiple_annexes_with_assistant__63__.mdwn create mode 100644 doc/forum/Managing_multiple_annexes_with_assistant__63__/comment_1_ba8c70e4a46441b48ad910625636eee5._comment create mode 100644 doc/forum/Managing_multiple_annexes_with_assistant__63__/comment_2_4b4f0a7d84a51ae92536e2c190256069._comment create mode 100644 doc/forum/Managing_multiple_annexes_with_assistant__63__/comment_3_86daadc565f96db5db13b6dbcbc66db3._comment create mode 100644 doc/forum/Managing_multiple_annexes_with_assistant__63__/comment_4_e43d71ddfdfdb7bcb13bfb894de6a5ec._comment create mode 100644 doc/forum/Managing_multiple_annexes_with_assistant__63__/comment_5_e94d33be83b45918d1a39d6e16fba4b4._comment create mode 100644 doc/forum/Managing_multiple_repositories_concurrently__63__.mdwn create mode 100644 doc/forum/Managing_multiple_repositories_concurrently__63__/comment_1_ebec1ddad71e961cdc9b21cbddfbcdaf._comment create mode 100644 doc/forum/Manual_Setup_of_a_Central_Repo.mdwn create mode 100644 doc/forum/Manual_Setup_of_a_Central_Repo/comment_1_3a163fd5629dc40423f1290a78ae1c07._comment create mode 100644 doc/forum/Manual_mode_option_in_assistant_auto-syncs.mdwn create mode 100644 doc/forum/Manual_mode_option_in_assistant_auto-syncs/comment_1_4a0468b6ca2ffff8ef8f19800597567d._comment create mode 100644 doc/forum/Manual_webapp_behaviour_on_ARM.mdwn create mode 100644 doc/forum/Missing_git-annex.linux__47__runshell.mdwn create mode 100644 doc/forum/Missing_git-annex.linux__47__runshell/comment_1_f29a5105649579ef15e79d983c4e1f8e._comment create mode 100644 doc/forum/Moving_large_files_within_the_repo_without_copying___63__.mdwn create mode 100644 doc/forum/Moving_large_files_within_the_repo_without_copying___63__/comment_1_9e3290138133d5a23a80f72342f47ec4._comment create mode 100644 doc/forum/Moving_large_files_within_the_repo_without_copying___63__/comment_2_232b77894dda51d02cbc34bd25d3213b._comment create mode 100644 doc/forum/Moving_large_files_within_the_repo_without_copying___63__/comment_3_d35ac1bdb3fa6e303ad92348ba174158._comment create mode 100644 doc/forum/Moving_large_files_within_the_repo_without_copying___63__/comment_4_4b443ec6b47eaabe214d0c2222083e4a._comment create mode 100644 doc/forum/Moving_older_version__39__s_file_content_without_doing_checkout.mdwn create mode 100644 doc/forum/Moving_older_version__39__s_file_content_without_doing_checkout/comment_1_f114b75b29123453758b493fae7f5167._comment create mode 100644 doc/forum/Moving_older_version__39__s_file_content_without_doing_checkout/comment_2_e377b7614c2961b460a10e285f3db274._comment create mode 100644 doc/forum/Moving_older_version__39__s_file_content_without_doing_checkout/comment_3_d251958795ab0867c65cf182e54a6ffe._comment create mode 100644 doc/forum/My_first_impressions_after_some_weeks_with_git-annex_assistant.mdwn create mode 100644 doc/forum/My_first_impressions_after_some_weeks_with_git-annex_assistant/comment_1_9d4019a54fb508e286a5d6d2660361d9._comment create mode 100644 doc/forum/My_first_impressions_after_some_weeks_with_git-annex_assistant/comment_2_109534a45881ce94a4586c8a83945f9f._comment create mode 100644 doc/forum/Need_new_build_instructions_for_Debian_stable.mdwn create mode 100644 doc/forum/Need_new_build_instructions_for_Debian_stable/comment_1_8c1eea6dfec8b7e1c7a371b6e9c26118._comment create mode 100644 doc/forum/Need_new_build_instructions_for_Debian_stable/comment_2_f6ff8306c946219dbe39bb8938a349ab._comment create mode 100644 doc/forum/Need_new_build_instructions_for_Debian_stable/comment_3_bcda70cbfc7c1a14fa82da70f9f876e2._comment create mode 100644 doc/forum/Need_some_help_to_fix_my_repository.mdwn create mode 100644 doc/forum/Need_some_help_to_fix_my_repository/comment_1_f0d279c530b796b2c93d793f85d147e8._comment create mode 100644 doc/forum/Need_some_help_to_fix_my_repository/comment_2_a3fcfa1f8eadec5fa8a9efacca174048._comment create mode 100644 doc/forum/Need_some_help_to_fix_my_repository/comment_3_7878f9b76ddfa3392c9ec6a1810cb745._comment create mode 100644 doc/forum/New_git-annex_integration_mode_for_Emacs_users.mdwn create mode 100644 doc/forum/New_special_remote_suggeston_-_clean_directory.mdwn create mode 100644 doc/forum/New_special_remote_suggeston_-_clean_directory/comment_1_4d81941fe53881eebff97109a07ba2f4._comment create mode 100644 doc/forum/New_special_remote_suggeston_-_clean_directory/comment_2_660a5b764ad42468154b2bb94f8ec004._comment create mode 100644 doc/forum/New_user_misunderstandings.mdwn create mode 100644 doc/forum/New_user_misunderstandings/comment_1_c1785924109b5d5cde9aa3d3460cf955._comment create mode 100644 doc/forum/Newbie_stuck_at___34__Unable_to_connect_to_the_Jabber_server__34__.mdwn create mode 100644 doc/forum/Newbie_stuck_at___34__Unable_to_connect_to_the_Jabber_server__34__/comment_1_59158afcedac18a7285d57491b2a468a._comment create mode 100644 doc/forum/Newbie_stuck_at___34__Unable_to_connect_to_the_Jabber_server__34__/comment_2_2a70ac08bb95774415b09dab7d7f8605._comment create mode 100644 doc/forum/Newbie_stuck_at___34__Unable_to_connect_to_the_Jabber_server__34__/comment_3_92a52b523ed4c68b70ddcabc2a050b76._comment create mode 100644 doc/forum/Newbie_stuck_at___34__Unable_to_connect_to_the_Jabber_server__34__/comment_4_c52a75761ea107f6d69c09bac64f0f0a._comment create mode 100644 doc/forum/Newbie_stuck_at___34__Unable_to_connect_to_the_Jabber_server__34__/comment_5_2685e3a87464ccd37d593516d94ba5cf._comment create mode 100644 doc/forum/No_SSL_traffic_for_S3__63__.mdwn create mode 100644 doc/forum/No_SSL_traffic_for_S3__63__/comment_1_f509bf273896180e6df8c771438dd093._comment create mode 100644 doc/forum/No_SSL_traffic_for_S3__63__/comment_2_358635d19c82202c63014ca84de7fc3b._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back.mdwn create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_10_ed35a6ec605e8f79ec107856af6d1a46._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_11_e48b6efa42159dc83e1be11bfb54abcd._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_12_b58232d0e3fa4649565c0c7d4ce2e82e._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_13_85368b60091dc3ce2efb58013ffe9f83._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_14_e65281bef23e0076936c508728a87897._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_1_fffb59ad5a197d2980dd0ec35cf4aafa._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_2_0cfcc2075bff556b9fde5acc3dc1d599._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_3_6fe2ff1282fb14a4ce26ef8dc775d07e._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_4_64338d2d77dcbabd16b55eb145f40dc6._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_5_dd66c9ea0c83388f6826751944330d10._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_6_dc0c5e395e4c443b7227afdb157194e5._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_7_3c0ea4c76cdd889707f7308576e3efa0._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_8_36519ee4499a19f0864e4fcd264e9933._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_9_85b23f375e53469fb09b24b945b3aba9._comment create mode 100644 doc/forum/OSX_Mavericks_anyone__63__.mdwn create mode 100644 doc/forum/OSX_Mavericks_anyone__63__/comment_1_3075b02aeb57adcbf4addf9fb4c123ba._comment create mode 100644 doc/forum/OSX_Mavericks_anyone__63__/comment_2_c2b6110fc4a3d3481ed8a4b48efb9635._comment create mode 100644 doc/forum/OSX_Mavericks_anyone__63__/comment_3_7df9ba63cb1f385681242b4b58d6a87c._comment create mode 100644 doc/forum/OSX_Mavericks_anyone__63__/comment_4_740fee31c4ca9d84428f97f63ffc075a._comment create mode 100644 doc/forum/OSX__39__s_default_sshd_behaviour_has_limited_paths_set.mdwn create mode 100644 doc/forum/OSX__39__s_haskell-platform_statically_links_things.mdwn create mode 100644 doc/forum/OpenOffice___47___Libre_Office.mdwn create mode 100644 doc/forum/OpenOffice___47___Libre_Office/comment_1_98ed542fedd820d47bf8deb7d3232725._comment create mode 100644 doc/forum/OpenOffice___47___Libre_Office/comment_2_f313fdaa23863c2ae99cfbfe9ec2e1e0._comment create mode 100644 doc/forum/Out_of_memory_error_in_fsck__44___whereis__44___find_and_status_cmds.mdwn create mode 100644 doc/forum/Overwriting_data_without_getting_it.mdwn create mode 100644 doc/forum/Overwriting_data_without_getting_it/comment_1_f1c0199ee9bffcc84287370b89361294._comment create mode 100644 doc/forum/Overwriting_data_without_getting_it/comment_2_6a1d08dbca206129ef6cf8aa97daeee1._comment create mode 100644 doc/forum/Overwriting_data_without_getting_it/comment_3_52958e76e506fdbb6b533681ab619b3b._comment create mode 100644 doc/forum/Permission_denied___40__publickey__41___On_second_Step_...___63__.mdwn create mode 100644 doc/forum/Permission_denied___40__publickey__41___On_second_Step_...___63__/comment_1_6c74f0b43c457fe97b2d8630ca4fde29._comment create mode 100644 doc/forum/Permission_denied___40__publickey__41___On_second_Step_...___63__/comment_2_b7a384e853e1756a684774348fad29e6._comment create mode 100644 doc/forum/Permission_denied___40__publickey__41___On_second_Step_...___63__/comment_3_3a8a7f51cb04a92c576549d379b57248._comment create mode 100644 doc/forum/Permission_denied___40__publickey__41___On_second_Step_...___63__/comment_4_582ad3ba0c62a77b08a10b37a780c670._comment create mode 100644 doc/forum/Please_fix_compatibility_with_ghc_7.0.mdwn create mode 100644 doc/forum/Please_fix_compatibility_with_ghc_7.0/comment_1_d1d10217ebd0151e947b3a6cd37399ce._comment create mode 100644 doc/forum/Please_publish_new_releases_not_shorter_than_11_days.mdwn create mode 100644 doc/forum/Please_publish_new_releases_not_shorter_than_11_days/comment_1_da3d39de5be47ebe8b25a42ed1f36510._comment create mode 100644 doc/forum/Podcast_syncing_use-case.mdwn create mode 100644 doc/forum/Podcast_syncing_use-case/comment_1_ace6f9d3a950348a3ac0ff592b62e786._comment create mode 100644 doc/forum/Podcast_syncing_use-case/comment_2_930a6620b4d516e69ed952f9da5371bb._comment create mode 100644 doc/forum/Poor_man__39__s_IMAP.mdwn create mode 100644 doc/forum/Poor_man__39__s_IMAP/comment_1_258ff23c462dc88b88ced405c4f5040f._comment create mode 100644 doc/forum/Poor_man__39__s_IMAP/comment_2_c88d1abdda4cb526a6ee45a710c75bc4._comment create mode 100644 doc/forum/Poor_man__39__s_IMAP/comment_3_3847e371db1c2788c075e7dca1fbd33e._comment create mode 100644 doc/forum/Poor_man__39__s_IMAP/comment_4_cf6cc21f2cf2aa5c949844e24a7b4075._comment create mode 100644 doc/forum/Poor_man__39__s_IMAP/comment_5_d861fa69475ce526841b3195be8ee356._comment create mode 100644 doc/forum/Poor_man__39__s_IMAP/comment_6_1e81bd4bb62652bc674cdcd7ed57ac5c._comment create mode 100644 doc/forum/Poor_man__39__s_IMAP/comment_7_b3929281dff6078d77f1b9ae42e25bb6._comment create mode 100644 doc/forum/Poor_man__39__s_IMAP/comment_8_69506e8c519196f44b9ed15b32f00106._comment create mode 100644 doc/forum/Post-Kickstarter.mdwn create mode 100644 doc/forum/Preserving_file_access_rights_in_directory_tree_below_objects__47__.mdwn create mode 100644 doc/forum/Preserving_file_access_rights_in_directory_tree_below_objects__47__/comment_1_5dd978f9b5a0771f44ab9e086bf5a07f._comment create mode 100644 doc/forum/Preserving_file_access_rights_in_directory_tree_below_objects__47__/comment_2_9f51947b35ee04e473655e20d56c740a._comment create mode 100644 doc/forum/Problem_compiling_current_master.mdwn create mode 100644 doc/forum/Problem_compiling_current_master/comment_1_135df61ec850c06e3b48ccfef7b5b031._comment create mode 100644 doc/forum/Problem_compiling_current_master/comment_2_fb3e27b6014e84bd919a7a4a95e39ef9._comment create mode 100644 doc/forum/Problem_compiling_current_master/comment_3_b737b3945103c5e2aa798b4e65fbce06._comment create mode 100644 doc/forum/Problem_compiling_current_master/comment_4_28c1b335ae388d4e1f22b711ac1c001f._comment create mode 100644 doc/forum/Problems_syncing_with_box.com.mdwn create mode 100644 doc/forum/Problems_syncing_with_box.com/comment_1_8db642849da4d42cd9a43142e2b7cb70._comment create mode 100644 doc/forum/Problems_syncing_with_box.com/comment_2_cd18f33647aebc04af5469e4ce1fbcd2._comment create mode 100644 doc/forum/Problems_using_submodules_with_git-annex__63__.mdwn create mode 100644 doc/forum/Problems_using_submodules_with_git-annex__63__/comment_1_c7a927736d419d3c31c912001ff16ee4._comment create mode 100644 doc/forum/Problems_with_large_numbers_of_files.mdwn create mode 100644 doc/forum/Problems_with_large_numbers_of_files/comment_1_08791cb78b982087c2a07316fe3ed46c._comment create mode 100644 doc/forum/Problems_with_large_numbers_of_files/comment_2_0392a11219463e40c53bae73c8188b69._comment create mode 100644 doc/forum/Problems_with_large_numbers_of_files/comment_3_537e9884c1488a7a4bcf131ea63b71f7._comment create mode 100644 doc/forum/Problems_with_large_numbers_of_files/comment_4_7cb65d013e72bd2b7e90452079d42ac9._comment create mode 100644 doc/forum/Problems_with_large_numbers_of_files/comment_5_86a42ee3173a5d38f803e64b79496ab3._comment create mode 100644 doc/forum/Problems_with_large_numbers_of_files/comment_6_4551274288383c9cc27cbf85b122d307._comment create mode 100644 doc/forum/Problems_with_large_numbers_of_files/comment_7_d18cf944352f8303799c86f2c0354e8e._comment create mode 100644 doc/forum/Pruning_out_unwanted_Git_objects.mdwn create mode 100644 doc/forum/Pruning_out_unwanted_Git_objects/comment_1_0cf7a12bfa2957260f4b2f79b0cadf2f._comment create mode 100644 doc/forum/Pruning_out_unwanted_Git_objects/comment_2_7472943c02cfe2808b0d566e06caa1a5._comment create mode 100644 doc/forum/Pruning_out_unwanted_Git_objects/comment_3_6a1e7a83d94394454fc085f6d2728cd7._comment create mode 100644 doc/forum/Purge_a_remote.txt create mode 100644 doc/forum/Purge_a_remote/comment_1_78b3b77f457c65d31fd8a5abf714905d._comment create mode 100644 doc/forum/Purge_a_remote/comment_2_dc65719157dee63b3979563ed57ee0ce._comment create mode 100644 doc/forum/Purge_a_remote/comment_3_63e0280273b816fa4b837724e102f813._comment create mode 100644 doc/forum/Purge_a_remote/comment_4_7fad1c4798ca03a4095ac3241c279f6d._comment create mode 100644 doc/forum/Push__47__Pull_with_the_Assistant.mdwn create mode 100644 doc/forum/Push__47__Pull_with_the_Assistant/comment_1_f7b63d379c2d21794adf8658f546f8a7._comment create mode 100644 doc/forum/Push__47__Pull_with_the_Assistant/comment_2_aec8cc20576e7ffd5a8be4348d1a0073._comment create mode 100644 doc/forum/Pushing_git_repo_to_AWS_S3_from_behind_proxy.mdwn create mode 100644 doc/forum/Reappearing_repos_in_webapp_and_vicfg.mdwn create mode 100644 doc/forum/Reappearing_repos_in_webapp_and_vicfg/comment_1_bd977e864ae89816fa7f4ff69879b15f._comment create mode 100644 doc/forum/Reappearing_repos_in_webapp_and_vicfg/comment_2_05749f9e75689d0111339b7126c12300._comment create mode 100644 doc/forum/Reappearing_repos_in_webapp_and_vicfg/comment_3_b1531994eea0fbbf4cb097e604378a53._comment create mode 100644 doc/forum/Reappearing_repos_in_webapp_and_vicfg/comment_4_f1eba3e8aa4116e3c20747ec1d6e24e5._comment create mode 100644 doc/forum/Recommended_number_of_repositories.mdwn create mode 100644 doc/forum/Recommended_number_of_repositories/comment_1_3ef256230756be8a9679b107cdbfd018._comment create mode 100644 doc/forum/Relocating_annex_directory.mdwn create mode 100644 doc/forum/Relocating_annex_directory/comment_1_13ff5438baa1db110beb6aab3a783def._comment create mode 100644 doc/forum/Relocating_annex_directory/comment_2_6d88ff03fcf00ae872442e8a86c968ed._comment create mode 100644 doc/forum/Removing_files_not_found_by_git_annex_unused.mdwn create mode 100644 doc/forum/Removing_files_not_found_by_git_annex_unused/comment_1_420c6230e68de0a0ac7d7da91ac60801._comment create mode 100644 doc/forum/Repo_accessible_from___34__dumb__34___client_without_git-annex.mdwn create mode 100644 doc/forum/Repo_accessible_from___34__dumb__34___client_without_git-annex/comment_1_077c492fd37d335f74a5c886ff0d524f._comment create mode 100644 doc/forum/Repo_accessible_from___34__dumb__34___client_without_git-annex/comment_2_00e6576e3e60d2650461eeb0f918e6e5._comment create mode 100644 doc/forum/Repo_accessible_from___34__dumb__34___client_without_git-annex/comment_3_c36a9562c53ac683b62fc4471405aa2a._comment create mode 100644 doc/forum/Restricting_git-annex-shell_to_a_specific_repository.mdwn create mode 100644 doc/forum/Restricting_git-annex-shell_to_a_specific_repository/comment_1_66544520bff71181e4a03ca583b0b458._comment create mode 100644 doc/forum/Restricting_git-annex-shell_to_a_specific_repository/comment_2_2a210255e8535712c71fa183e56ab600._comment create mode 100644 doc/forum/Restricting_git-annex-shell_to_a_specific_repository/comment_3_52cd4bd9694b2100b0e0dd2eafa9e828._comment create mode 100644 doc/forum/Retrieve_previous_version_in_direct_mode.mdwn create mode 100644 doc/forum/Retrieve_previous_version_in_direct_mode/comment_1_ca3a999ed64c42b8df810115de205d2f._comment create mode 100644 doc/forum/Retrieve_previous_version_in_direct_mode/comment_2_1292b34ff6d9976b2bd08748e1ba4e7a._comment create mode 100644 doc/forum/Retrieve_previous_version_in_direct_mode/comment_3_699e816c0397f6db924feeab906f1151._comment create mode 100644 doc/forum/Retrieve_previous_version_in_direct_mode/comment_4_d900388753de5870b7b9c0e8b8c06ed7._comment create mode 100644 doc/forum/Revert_file_linkage_to_original_files.mdwn create mode 100644 doc/forum/Revert_file_linkage_to_original_files/comment_1_898ca2c9976e92d22470c7404aa9813f._comment create mode 100644 doc/forum/Running_assistant_on_a_server___40__no_X_available__41__.mdwn create mode 100644 doc/forum/Running_assistant_on_a_server___40__no_X_available__41__/comment_1_dd75d78ef63f2689199a302ed1846017._comment create mode 100644 doc/forum/Running_assistant_on_a_server___40__no_X_available__41__/comment_2_df654df60c5fa6a84d786d248928a352._comment create mode 100644 doc/forum/Running_assistant_steps_manually.mdwn create mode 100644 doc/forum/Running_assistant_steps_manually/comment_1_e14e0a1d55d01cb4f67a94bbe349b872._comment create mode 100644 doc/forum/Running_assistant_steps_manually/comment_2_3192f614c929b8060d4fbde56a7adec1._comment create mode 100644 doc/forum/Running_out_of__inodes.mdwn create mode 100644 doc/forum/Running_out_of__inodes/comment_1_abc73d9ad662ef642337b683bf0a0253._comment create mode 100644 doc/forum/Same_Jabber_account_for_different_annexes.mdwn create mode 100644 doc/forum/Same_Jabber_account_for_different_annexes/comment_1_90c3954fe11980eef42b5f5d34f83488._comment create mode 100644 doc/forum/Same_Jabber_account_for_different_annexes/comment_2_802600b3568e5f94d0550092b22975db._comment create mode 100644 doc/forum/Securing_a_shared_ssh_server.mdwn create mode 100644 doc/forum/Securing_a_shared_ssh_server/comment_1_ea971b57d94db5b8d487f728faa5e9a8._comment create mode 100644 doc/forum/Securing_a_shared_ssh_server/comment_2_421a19f6e1fb40db6ee205daf8e3f867._comment create mode 100644 doc/forum/Securing_a_shared_ssh_server/comment_3_acdbf92f646dbbf691621f08b3d94c26._comment create mode 100644 doc/forum/Securing_a_shared_ssh_server/comment_4_67533d08e1b8706b844262e9c483d982._comment create mode 100644 doc/forum/Securing_a_shared_ssh_server/comment_5_bf193e02b388b4358632a169d2425b5c._comment create mode 100644 doc/forum/Securing_a_shared_ssh_server/comment_6_50d391992cd444080ebc70db30b215c5._comment create mode 100644 doc/forum/Setup_of_rsync_special_remote_with_non-standard_ssh_port.mdwn create mode 100644 doc/forum/Setup_of_rsync_special_remote_with_non-standard_ssh_port/comment_1_1eb6990e93ec92cb6fd7dbee59f31072._comment create mode 100644 doc/forum/Setup_of_rsync_special_remote_with_non-standard_ssh_port/comment_2_c85d5167e7ccce1ecf1de396e72ce7bc._comment create mode 100644 doc/forum/Share_only_certain_files_of_a_repo___40__Assistant__41__.mdwn create mode 100644 doc/forum/Share_only_certain_files_of_a_repo___40__Assistant__41__/comment_1_ec0d56cb31b918023a9184cee168b406._comment create mode 100644 doc/forum/Share_with_friend_copies_only_sym_links.mdwn create mode 100644 doc/forum/Share_with_friend_copies_only_sym_links/comment_1_a8d22dfefb219f0c9130cc294364b198._comment create mode 100644 doc/forum/Sharing_annex_with_local_clones.mdwn create mode 100644 doc/forum/Sharing_annex_with_local_clones/comment_1_2b60e13e5f7b8cee56cf2ddc6c47f64d._comment create mode 100644 doc/forum/Sharing_annex_with_local_clones/comment_2_24ff2c1eb643077daa37c01644cebcd2._comment create mode 100644 doc/forum/Sharing_annex_with_local_clones/comment_3_5359b8eada24d27be83214ac0ae62f23._comment create mode 100644 doc/forum/Simple_check_out_with_assistant__63__.mdwn create mode 100644 doc/forum/Simple_check_out_with_assistant__63__/comment_1_ade8a0743ef1ec933c8a40ed64eeac2d._comment create mode 100644 doc/forum/Slightly_finer_control_over_file_whereabouts.mdwn create mode 100644 doc/forum/Slightly_finer_control_over_file_whereabouts/comment_10_bcb883d46a637dd1a8ef9a92733d202a._comment create mode 100644 doc/forum/Slightly_finer_control_over_file_whereabouts/comment_11_b7a8b9eaf114f883866fbf2be51b622f._comment create mode 100644 doc/forum/Slightly_finer_control_over_file_whereabouts/comment_1_6236bcfa9beba705ead3ec2141c5d835._comment create mode 100644 doc/forum/Slightly_finer_control_over_file_whereabouts/comment_2_ea935b37ca93e73c85d04df7c9bf6057._comment create mode 100644 doc/forum/Slightly_finer_control_over_file_whereabouts/comment_3_f89a8e38283ac4c8c4a3b74c413d67a1._comment create mode 100644 doc/forum/Slightly_finer_control_over_file_whereabouts/comment_4_07a0a754a089c46ff69dc97ea7ba9384._comment create mode 100644 doc/forum/Slightly_finer_control_over_file_whereabouts/comment_5_e884c001a556a0c693d1cc9a97c068ac._comment create mode 100644 doc/forum/Slightly_finer_control_over_file_whereabouts/comment_6_3e8674b5857e4994dfbc26be4f4b2855._comment create mode 100644 doc/forum/Slightly_finer_control_over_file_whereabouts/comment_7_7aeabc2e52a39423e83fbd04560e8f91._comment create mode 100644 doc/forum/Slightly_finer_control_over_file_whereabouts/comment_8_53b95449cfad2fe0f72d2ad642822c03._comment create mode 100644 doc/forum/Slightly_finer_control_over_file_whereabouts/comment_9_a17c102a45e4fc3f101a79acb8eb4081._comment create mode 100644 doc/forum/Some_mounted_devices_not_detected.mdwn create mode 100644 doc/forum/Some_mounted_devices_not_detected/comment_1_0ba07b95f12f57ea63bb450b88430c45._comment create mode 100644 doc/forum/Some_mounted_devices_not_detected/comment_2_4f8c7bcd0f20dafa5635a3580ec8d1f6._comment create mode 100644 doc/forum/Some_mounted_devices_not_detected/comment_3_06c0db7d670d9b82823102d22db15a36._comment create mode 100644 doc/forum/Some_mounted_devices_not_detected/comment_4_80820a29361c5be4a94672dacfdefa6f._comment create mode 100644 doc/forum/Special_remote_without_chmod.mdwn create mode 100644 doc/forum/Special_remote_without_chmod/comment_1_4f5f9506cae72a1f321296fc5a5f339a._comment create mode 100644 doc/forum/Storing_uncontrolled_files_in_an_annex.mdwn create mode 100644 doc/forum/Storing_uncontrolled_files_in_an_annex/comment_1_175645a90be0c79221c129308adf643e._comment create mode 100644 doc/forum/Storing_uncontrolled_files_in_an_annex/comment_2_d29f214eadfe3bfd098bbc3bcf07129a._comment create mode 100644 doc/forum/Storing_uncontrolled_files_in_an_annex/comment_3_286b502e7906cca50e9e747db735bc88._comment create mode 100644 doc/forum/Stupid_mistake:_recoverable__63__.mdwn create mode 100644 doc/forum/Stupid_mistake:_recoverable__63__/comment_1_00ceb3a5e37825c4bbc806f532893706._comment create mode 100644 doc/forum/Stupid_mistake:_recoverable__63__/comment_2_cbedc29678d9b6af3b3c0bb1915d2391._comment create mode 100644 doc/forum/Stupid_mistake:_recoverable__63__/comment_3_86aa4d92a1330811862da1ba568b3037._comment create mode 100644 doc/forum/Stupid_mistake:_recoverable__63__/comment_4_6d15bf8a3c3c27cc92957070161675a9._comment create mode 100644 doc/forum/Stupid_mistake:_recoverable__63__/comment_5_f836b9b1d03d94c49e3798961790b2ba._comment create mode 100644 doc/forum/Suggestion:_Put_ssh_server_back_into_android_version.mdwn create mode 100644 doc/forum/Suggestion:_Put_ssh_server_back_into_android_version/comment_1_5c2f376a82458c6387560355940419d3._comment create mode 100644 doc/forum/Suggestion:_Put_ssh_server_back_into_android_version/comment_2_6321dec0b2f22f841f3cb986e063113f._comment create mode 100644 doc/forum/Sync_with_one_offline_peer.txt create mode 100644 doc/forum/Sync_with_one_offline_peer/comment_1_3859d842d4f7e2ef44877b05ebe881fb._comment create mode 100644 doc/forum/Sync_with_one_offline_peer/comment_2_c9ba3983b37b0c1868269616fd81e518._comment create mode 100644 doc/forum/Sync_with_one_offline_peer/comment_3_28b9c003b4560c3ce90c9ebf808b091b._comment create mode 100644 doc/forum/Sync_without_jabber_account.mdwn create mode 100644 doc/forum/Sync_without_jabber_account/comment_1_3e95ac2e67451f953cf0538094109f8b._comment create mode 100644 doc/forum/Synchronize_large_files___40__VM_images__41__.mdwn create mode 100644 doc/forum/Synchronize_large_files___40__VM_images__41__/comment_1_619f6ed2d7da5832ab253d61b6dd8044._comment create mode 100644 doc/forum/Syncing_machines_on_different_networks.mdwn create mode 100644 doc/forum/Syncing_machines_on_different_networks/comment_1_1c3523c722c178a96b096a68b9be4165._comment create mode 100644 doc/forum/Syncing_machines_on_different_networks/comment_2_d7b14ffee65072329cfe9ab08a0dba50._comment create mode 100644 doc/forum/Syncing_machines_on_different_networks/comment_3_65d1dae9b76fccb5f2b8fd8c69b60075._comment create mode 100644 doc/forum/Syncing_machines_on_different_networks/comment_4_2ec67428af69d6c0ea051c6a67d58905._comment create mode 100644 doc/forum/Syncing_machines_on_different_networks/comment_5_5ce093f82a2aad3fd8d7ccd5fdcab94f._comment create mode 100644 doc/forum/Syncing_machines_on_different_networks/comment_6_a55982c28d7b90e0b70ec2bb5e594e08._comment create mode 100644 doc/forum/Syncing_machines_on_different_networks/comment_7_c519d546e1a2a4e834609f3de3a605b0._comment create mode 100644 doc/forum/Syncing_machines_on_different_networks/comment_8_84a822238ddbaf211cce5f527c3559d3._comment create mode 100644 doc/forum/Syncing_with_an_encrypted_remote_from_a_different_computer__63__.mdwn create mode 100644 doc/forum/Syncing_with_an_encrypted_remote_from_a_different_computer__63__/comment_1_cd55d06a4065b9d3f14d50674c3fcaf7._comment create mode 100644 doc/forum/Syncing_with_an_encrypted_remote_from_a_different_computer__63__/comment_2_25cbdf478091af9923090e049c432a7d._comment create mode 100644 doc/forum/Syncing_with_an_encrypted_remote_from_a_different_computer__63__/comment_3_7e71d355457d6b1a0391d4cdae6895e6._comment create mode 100644 doc/forum/Syncing_with_an_encrypted_remote_from_a_different_computer__63__/comment_4_a73f67f2fcf0762fbd7c8366b3844af6._comment create mode 100644 doc/forum/Syncronisation_of_syncronisation_between_3_repositories__63__.mdwn create mode 100644 doc/forum/Syncronisation_of_syncronisation_between_3_repositories__63__/comment_1_ca5192a26950627a1c2efcb55d6d2fa3._comment create mode 100644 doc/forum/The_ability_to_leave_a_file_unlocked_for_a_bit_while_committing_it_repeatedly__63__.mdwn create mode 100644 doc/forum/The_ability_to_leave_a_file_unlocked_for_a_bit_while_committing_it_repeatedly__63__/comment_1_3cbe520b184d323219cb402ff046c3b4._comment create mode 100644 doc/forum/The_ability_to_leave_a_file_unlocked_for_a_bit_while_committing_it_repeatedly__63__/comment_2_6afe7f593e955db2eefe87d9fa01882b._comment create mode 100644 doc/forum/The_ability_to_leave_a_file_unlocked_for_a_bit_while_committing_it_repeatedly__63__/comment_3_209399487fc4f76b29f03ad82dbc2d6f._comment create mode 100644 doc/forum/The_ability_to_leave_a_file_unlocked_for_a_bit_while_committing_it_repeatedly__63__/comment_4_f33fd6f72cb9ad7dd20a04c82199413b._comment create mode 100644 doc/forum/Transfer_remotes.mdwn create mode 100644 doc/forum/Transfer_remotes/comment_1_c08cf3bda00d7f20a3ca3d0fdba19c9c._comment create mode 100644 doc/forum/Transfer_remotes/comment_2_98930629d398329f1161135464a966a5._comment create mode 100644 doc/forum/Trouble_installing_from_cabal_on_debian-testing.mdwn create mode 100644 doc/forum/Trouble_installing_from_cabal_on_debian-testing/comment_1_0d3e9d7cffafc34bc212557e8bbb987d._comment create mode 100644 doc/forum/Truly_purging_dead_repositories.mdwn create mode 100644 doc/forum/Truly_purging_dead_repositories/comment_1_a4c75d49714b3543a9f1617a15d4a2d1._comment create mode 100644 doc/forum/Truly_purging_dead_repositories/comment_2_3da60a02e7323a204c5c5dd02ba04d6c._comment create mode 100644 doc/forum/Truly_purging_dead_repositories/comment_3_2576e45436008ff5a7ae5a38cade658e._comment create mode 100644 doc/forum/Truly_purging_dead_repositories/comment_4_477e3c213c5a5d4a33afd42a5b94c718._comment create mode 100644 doc/forum/Two_computer_setup:___34__transfer__34___or___34__full_backup__34___repository_groups__63__.mdwn create mode 100644 doc/forum/Two_computer_setup:___34__transfer__34___or___34__full_backup__34___repository_groups__63__/comment_1_b8702892280447193e6e80be22a580a0._comment create mode 100644 doc/forum/Two_computer_setup:___34__transfer__34___or___34__full_backup__34___repository_groups__63__/comment_2_50cafde7e30b928480d1f142ddd763d2._comment create mode 100644 doc/forum/USB_backup_with_files_visible.mdwn create mode 100644 doc/forum/USB_backup_with_files_visible/comment_1_2832f8ae24dfb0f101e06f7c18283028._comment create mode 100644 doc/forum/USB_backup_with_files_visible/comment_2_6163e01aa441f8435091f026cc6da337._comment create mode 100644 doc/forum/USB_backup_with_files_visible/comment_3_ee92ff320eb5d9a031bdd1896aee0d86._comment create mode 100644 doc/forum/USB_backup_with_files_visible/comment_4_437c8342c0b65e3a89129800313eb73c._comment create mode 100644 doc/forum/USB_backup_with_files_visible/comment_5_5e10cffe8465ea4ecaa71c03a4c29ea4._comment create mode 100644 doc/forum/USB_backup_with_files_visible/comment_6_add048a16837f7940a859f21426cdbe9._comment create mode 100644 doc/forum/USB_backup_with_files_visible/comment_7_de227ca9911fe57d7a6d3e037f574fe9._comment create mode 100644 doc/forum/USB_backup_with_files_visible/comment_8_0c0ed0e038f7f0e2d2d4ed69b7b29fbc._comment create mode 100644 doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant.txt create mode 100644 doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_1_0a6f6054d70009979f4a036e24b7c500._comment create mode 100644 doc/forum/Ubuntu_PPA.mdwn create mode 100644 doc/forum/Ubuntu_PPA/comment_1_b55535258b1b4bcfc802235f0cba075d._comment create mode 100644 doc/forum/Ubuntu_PPA/comment_2_adc4d644fed058d1811acf0b35db9c18._comment create mode 100644 doc/forum/Ubuntu_PPA/comment_3_fc9cd51558c47718f243437202a11803._comment create mode 100644 doc/forum/Ubuntu_PPA/comment_4_3a8bbd0a7450a7f5323cd13144824aea._comment create mode 100644 doc/forum/Ubuntu_PPA/comment_5_2e1beaeebda0201c635db8b276cedf20._comment create mode 100644 doc/forum/Ubuntu_PPA/comment_6_bd99fb70399fc58d98781a89c6d38428._comment create mode 100644 doc/forum/Ubuntu_PPA/comment_7_c3f7ec8573934c59d70a48e36e321c13._comment create mode 100644 doc/forum/Un-git-annex__63__.mdwn create mode 100644 doc/forum/Un-git-annex__63__/comment_1_6059265afb66190d325083e0f28bcf33._comment create mode 100644 doc/forum/Un-git-annex__63__/comment_2_fac4bfb81dbbf0dc82059aace261eb51._comment create mode 100644 doc/forum/Undo_Git_Annex_Changes_To_Linked_Files.mdwn create mode 100644 doc/forum/Undo_Git_Annex_Changes_To_Linked_Files/comment_1_568dde820c2608d86d05b07444146a26._comment create mode 100644 doc/forum/Undo_Git_Annex_Changes_To_Linked_Files/comment_2_a8cf71cdf1217d9c8596cd9006eb83f5._comment create mode 100644 doc/forum/Unknown_remote_type_S3.mdwn create mode 100644 doc/forum/Unknown_remote_type_S3/comment_1_2aea2cd51286c809427d16519606cd37._comment create mode 100644 doc/forum/Unknown_remote_type_S3/comment_2_06f775062cd30767979fe56bcb3cf7bf._comment create mode 100644 doc/forum/Unlock_files_when_assistant_is_running__63__.mdwn create mode 100644 doc/forum/Unlock_files_when_assistant_is_running__63__/comment_1_3f4aadf0c856c81e15c6f5ae7f1992b4._comment create mode 100644 doc/forum/Unlock_files_when_assistant_is_running__63__/comment_2_a76797ee9e05e43af7947508cadd7bed._comment create mode 100644 doc/forum/Use_case_with_syncing_only_a_subset_possible__63__.mdwn create mode 100644 doc/forum/Use_case_with_syncing_only_a_subset_possible__63__/comment_1_a0a272a0931b27e5c94b93e42656b62c._comment create mode 100644 doc/forum/Use_local_files_instead_of_re-downloading_from_S3_remote.mdwn create mode 100644 doc/forum/Use_local_files_instead_of_re-downloading_from_S3_remote/comment_1_cfb6021a36eee087705967a69967f327._comment create mode 100644 doc/forum/Use_local_files_instead_of_re-downloading_from_S3_remote/comment_2_7268b194ba72331858bc3274996b780e._comment create mode 100644 doc/forum/Use_reflinks_on_BTRFS_instead_of_symlinks___63__.mdwn create mode 100644 doc/forum/Use_reflinks_on_BTRFS_instead_of_symlinks___63__/comment_1_85806316ed28d7a891f04fab4027141b._comment create mode 100644 doc/forum/Use_reflinks_on_BTRFS_instead_of_symlinks___63__/comment_2_ecb411a2c4d67917b734a90bd460d44b._comment create mode 100644 doc/forum/Using_Git-Annex___40__Assistant__41___to_manage_photos_with_Shotwell.mdwn create mode 100644 doc/forum/Using_Git-Annex___40__Assistant__41___to_manage_photos_with_Shotwell/comment_1_5e8d54daf6b7ff357619ac65fe39a2d7._comment create mode 100644 doc/forum/Using_Linux_static_builds.mdwn create mode 100644 doc/forum/Using_Linux_static_builds/comment_1_22fd266cbe68af3e754a10f1f1295e9b._comment create mode 100644 doc/forum/Using_Linux_static_builds/comment_2_36f69f30117ff8696425a754ab19a08b._comment create mode 100644 doc/forum/Using_Linux_static_builds/comment_3_64506833dad0202626239e00d1eb6490._comment create mode 100644 doc/forum/Using___34__sync__34___to_sink_all_branches__63__.mdwn create mode 100644 doc/forum/Using___34__sync__34___to_sink_all_branches__63__/comment_1_ef3d5c5e2600ffa36dd933c8a42cdf96._comment create mode 100644 doc/forum/Using___34__sync__34___to_sink_all_branches__63__/comment_2_424b0c6fdfe87ca08f5d408b7684ab08._comment create mode 100644 doc/forum/Using___34__sync__34___to_sink_all_branches__63__/comment_3_adaf9114c69f1268330adcebd8018fa0._comment create mode 100644 doc/forum/Using_a_single_backup_repo_for_multiple_independent_client_repos__63__.mdwn create mode 100644 doc/forum/Using_a_single_backup_repo_for_multiple_independent_client_repos__63__/comment_1_c61c28600f1079fb03ddabc950307f27._comment create mode 100644 doc/forum/Using_for_Music_repo.mdwn create mode 100644 doc/forum/Using_for_Music_repo/comment_1_3488ed85ad98f14cb17f229225ece26e._comment create mode 100644 doc/forum/Using_for_Music_repo/comment_2_c794648878cfc77558f8db862271f997._comment create mode 100644 doc/forum/Using_for_Music_repo/comment_3_8c5e820f5ff7d717d64b1fd66927941b._comment create mode 100644 doc/forum/Using_git-annex_as_a_library.mdwn create mode 100644 doc/forum/Using_git-annex_as_a_library/comment_1_1f8e74c5856f21c53d5a91892cbef0c6._comment create mode 100644 doc/forum/Using_git-annex_as_a_library/comment_2_11a243fa7d8ac947aa9a798228dbd191._comment create mode 100644 doc/forum/Using_git-annex_via_command_line_in_OS_X.mdwn create mode 100644 doc/forum/Using_git-annex_via_command_line_in_OS_X/comment_1_1c9e121f60fb6868c07f1a53b03c4ed0._comment create mode 100644 doc/forum/Using_git-annex_via_command_line_in_OS_X/comment_2_52d8ffba82e29ac2722a8e43e469cc47._comment create mode 100644 doc/forum/Using_git_annex_with_Android_tablet_which_only_has_exFAT_and_no_symlinks.mdwn create mode 100644 doc/forum/Using_git_annex_with_Android_tablet_which_only_has_exFAT_and_no_symlinks/comment_1_b9f202a30ba7e3bc264064d24454c099._comment create mode 100644 doc/forum/Using_git_annex_with_Android_tablet_which_only_has_exFAT_and_no_symlinks/comment_2_1334a8d9f4bb60f3bf3ebabc656d98d9._comment create mode 100644 doc/forum/Using_git_annex_with_Android_tablet_which_only_has_exFAT_and_no_symlinks/comment_3_076f22d05fad140068a540e4d835106f._comment create mode 100644 doc/forum/Using_git_annex_with_Android_tablet_which_only_has_exFAT_and_no_symlinks/comment_4_c8446ee1b817f1824fa0df07e742015c._comment create mode 100644 doc/forum/Using_git_annex_with_Android_tablet_which_only_has_exFAT_and_no_symlinks/comment_5_f746c1b85ee8e4b57b6819ccceabd28b._comment create mode 100644 doc/forum/Using_git_annex_with_a_SMB__47__FTP_TV_NAS_with_preconfigured_dirs.mdwn create mode 100644 doc/forum/Using_git_annex_with_a_SMB__47__FTP_TV_NAS_with_preconfigured_dirs/comment_1_bd73c8d10028e1b45da9ea8f657e5064._comment create mode 100644 doc/forum/Using_git_annex_with_a_SMB__47__FTP_TV_NAS_with_preconfigured_dirs/comment_2_16c3c994ee8fcb466e52ca0e812e5915._comment create mode 100644 doc/forum/Using_git_annex_with_a_SMB__47__FTP_TV_NAS_with_preconfigured_dirs/comment_3_ac60f6edb76bdd541711e472eec9591a._comment create mode 100644 doc/forum/Using_git_annex_with_a_SMB__47__FTP_TV_NAS_with_preconfigured_dirs/comment_4_2194f0600d9a90f0d9c947ea9cc213a3._comment create mode 100644 doc/forum/Using_git_annex_with_a_SMB__47__FTP_TV_NAS_with_preconfigured_dirs/comment_5_eb7d13f6b6fa674a2536bde51bfc3fd1._comment create mode 100644 doc/forum/Using_git_annex_with_a_SMB__47__FTP_TV_NAS_with_preconfigured_dirs/comment_6_ae323b16ddb9342e91be955408eca3b1._comment create mode 100644 doc/forum/Walkthrough_does_not_work_for_me__44___what_am_i_doing_wrong__63__.mdwn create mode 100644 doc/forum/Walkthrough_does_not_work_for_me__44___what_am_i_doing_wrong__63__/comment_1_cdac15fec6fc41d5487b7f653fa718a4._comment create mode 100644 doc/forum/Walkthrough_does_not_work_for_me__44___what_am_i_doing_wrong__63__/comment_2_82050b7dc367ca5968ab0306db9bd7e3._comment create mode 100644 doc/forum/Watch__47__assistant__47__webapp_documentation.mdwn create mode 100644 doc/forum/Watch__47__assistant__47__webapp_documentation/comment_1_adb377589dbae7fc91001df235c6b48e._comment create mode 100644 doc/forum/Webapp_on_ARM.mdwn create mode 100644 doc/forum/Webapp_on_ARM/comment_1_82ac40cef5b59070136527b8d81a5ce2._comment create mode 100644 doc/forum/Weird_behavior_with_OS_X_Finder_and_Preview.app.mdwn create mode 100644 doc/forum/Weird_behavior_with_OS_X_Finder_and_Preview.app/comment_1_8c8d86790a9d31518f9bb96a2d2dafee._comment create mode 100644 doc/forum/Weird_behavior_with_OS_X_Finder_and_Preview.app/comment_2_b538dc2c6f122b9ce5f7569de1b03f3e._comment create mode 100644 doc/forum/Weird_behavior_with_OS_X_Finder_and_Preview.app/comment_3_16e6724fa184392d4decbe0c4eb6efe6._comment create mode 100644 doc/forum/Weird_behavior_with_OS_X_Finder_and_Preview.app/comment_4_e514fe2d4d0ad6a10e281939e6ab4266._comment create mode 100644 doc/forum/Weird_behavior_with_OS_X_Finder_and_Preview.app/comment_5_e0eec765f72f7bf6f5a2a92c9b5dacad._comment create mode 100644 doc/forum/What_can_be_done_in_case_of_conflict.mdwn create mode 100644 doc/forum/What_can_be_done_in_case_of_conflict/comment_1_5ca86b099dfa08a50f656ea03bf1dcd9._comment create mode 100644 doc/forum/What_can_be_done_in_case_of_conflict/comment_2_69ee17959a92bb8359c0fd7b2a9d8dfb._comment create mode 100644 doc/forum/What_can_be_done_in_case_of_conflict/comment_3_017f4bac57a040c496e0c9d068dcfd9e._comment create mode 100644 doc/forum/What_happened_to_the_walkthrough__63__.mdwn create mode 100644 doc/forum/What_happened_to_the_walkthrough__63__/comment_1_70db0e3cfb1318e95671c23726e5541d._comment create mode 100644 doc/forum/What_happened_to_the_walkthrough__63__/comment_2_f9305dd19b9b5f35e66d915b8c30374b._comment create mode 100644 doc/forum/What_is_the_best_way_to___34__git_annex_mv__34___file__63__.mdwn create mode 100644 doc/forum/What_is_the_best_way_to___34__git_annex_mv__34___file__63__/comment_1_02d305f307b4d2ff7acd98cb36508a2f._comment create mode 100644 doc/forum/What_is_the_difference_between___34__local_computer__34___and___34__remote_server__34__.mdwn create mode 100644 doc/forum/What_is_the_difference_between___34__local_computer__34___and___34__remote_server__34__/comment_1_68734a118b7dc0c88ba67eca20953a55._comment create mode 100644 doc/forum/What_to_do_when_computer_is_lost_and_only_an_encrypted_ssh_remote_is_left__63__.mdwn create mode 100644 doc/forum/What_to_do_when_computer_is_lost_and_only_an_encrypted_ssh_remote_is_left__63__/comment_1_67ee446ca6d66e2c259ea771c2c9a2b2._comment create mode 100644 doc/forum/What_to_do_when_computer_is_lost_and_only_an_encrypted_ssh_remote_is_left__63__/comment_2_6d3cce3c8048e4aea8f0ed76473f6af1._comment create mode 100644 doc/forum/What_to_do_when_computer_is_lost_and_only_an_encrypted_ssh_remote_is_left__63__/comment_3_bd506e1ca7307660b3b9769eb97beddb._comment create mode 100644 doc/forum/Which_cloud_providers_are_supported__63___.mdwn create mode 100644 doc/forum/Which_cloud_providers_are_supported__63___/comment_1_1f9398840144e0452a2fed9336046547._comment create mode 100644 doc/forum/Why_can__39__t_encryption_be_enabled_for_removable_drives__63__.mdwn create mode 100644 doc/forum/Why_can__39__t_encryption_be_enabled_for_removable_drives__63__/comment_1_4341898d5ae4f09a5b06d24f5fe6192d._comment create mode 100644 doc/forum/Why_does_the_bup_remote_use___126____47__.bup__63__.mdwn create mode 100644 doc/forum/Why_does_the_bup_remote_use___126____47__.bup__63__/comment_1_da9c7c0e93aefc2da7409de5b138d86f._comment create mode 100644 doc/forum/Will_git-annex_solve_my_problem__63__.mdwn create mode 100644 doc/forum/Will_git-annex_solve_my_problem__63__/comment_1_35acbdd1a7727df204d776c2e8f02b53._comment create mode 100644 doc/forum/Will_git-annex_solve_my_problem__63__/comment_2_230256c19ac139dea207d89c06f70782._comment create mode 100644 doc/forum/Will_git_annex_work_on_a_FAT32_formatted_key__63__.mdwn create mode 100644 doc/forum/Will_git_annex_work_on_a_FAT32_formatted_key__63__/comment_1_426482e6eb3a27687a48f24f6ef2332f._comment create mode 100644 doc/forum/Will_git_annex_work_on_a_FAT32_formatted_key__63__/comment_2_af4f8b52526d8bea2904c95406fd2796._comment create mode 100644 doc/forum/Windows_support.mdwn create mode 100644 doc/forum/Windows_support/comment_1_23fa9aa3b00940a1c1b3876c35eef019._comment create mode 100644 doc/forum/Windows_usage_instructions.mdwn create mode 100644 doc/forum/Windows_usage_instructions/comment_1_d43dbd9406da3b9747b147715eca94ac._comment create mode 100644 doc/forum/Wishlist:_Bittorrent-like_transfers.mdwn create mode 100644 doc/forum/Wishlist:_Bittorrent-like_transfers/comment_1_13544d54fb0418af4ca9200cdb045d91._comment create mode 100644 doc/forum/Wishlist:_Bittorrent-like_transfers/comment_2_9a7dad35bf80c684ad97892420d7370c._comment create mode 100644 doc/forum/Wishlist:_Bittorrent-like_transfers/comment_3_e5de748bc5da12a4a01e08cde2407dd1._comment create mode 100644 doc/forum/Wishlist:_Bittorrent-like_transfers/comment_4_e51530178f1e034c0fdd5c9aa9945567._comment create mode 100644 doc/forum/Wishlist:_Bittorrent-like_transfers/comment_5_81ea9c129d8c02097f09ef8c68f1bb11._comment create mode 100644 doc/forum/Wishlist:_Bittorrent-like_transfers/comment_6_3b5798414f89686526da3dfa72c0c4f2._comment create mode 100644 doc/forum/Wishlist:_Don__39__t_make_files_readonly.mdwn create mode 100644 doc/forum/Wishlist:_Don__39__t_make_files_readonly/comment_1_7148527961e2d27793810966588c8d35._comment create mode 100644 doc/forum/Wishlist:_Is_it_possible_to___34__unlock__34___files_without_copying_the_file_data__63__.mdwn create mode 100644 doc/forum/Wishlist:_Is_it_possible_to___34__unlock__34___files_without_copying_the_file_data__63__/comment_1_1cf4ab29dfa2cff59b86305fc0018251._comment create mode 100644 doc/forum/Wishlist:_Is_it_possible_to___34__unlock__34___files_without_copying_the_file_data__63__/comment_2_f5ebb7f43dcef861ecc13373fb1e263f._comment create mode 100644 doc/forum/Wishlist:_Ways_of_selecting_files_based_on_meta-information.mdwn create mode 100644 doc/forum/Wishlist:_Ways_of_selecting_files_based_on_meta-information/comment_1_818f38aa988177d3a9415055e084f0fb._comment create mode 100644 doc/forum/Wishlist:_Ways_of_selecting_files_based_on_meta-information/comment_2_97e2ed48bd552d02918c4f98f963e6e1._comment create mode 100644 doc/forum/Wishlist:_automatic_reinject.mdwn create mode 100644 doc/forum/Wishlist:_getting_the_disk_used_by_a_subtree_of_files.mdwn create mode 100644 doc/forum/Wishlist:_getting_the_disk_used_by_a_subtree_of_files/comment_1_7abb1155081a23ce4829ee69b2064541._comment create mode 100644 doc/forum/Wishlist:_getting_the_disk_used_by_a_subtree_of_files/comment_2_b4c6ebada7526263e04c70eac312fda9._comment create mode 100644 doc/forum/Wishlist:_getting_the_disk_used_by_a_subtree_of_files/comment_3_ded71b270b94617a8ebb3a713d46a274._comment create mode 100644 doc/forum/Wishlist:_logging_to_file_when_running_as_a_daemon___40__for_the_assistant__41__.mdwn create mode 100644 doc/forum/Wishlist:_logging_to_file_when_running_as_a_daemon___40__for_the_assistant__41__/comment_1_42aa2b61b880f4048d874210212aa63b._comment create mode 100644 doc/forum/Wishlist:_logging_to_file_when_running_as_a_daemon___40__for_the_assistant__41__/comment_2_3e201039fa0e611554171ee30e69a414._comment create mode 100644 doc/forum/Wishlist:_logging_to_file_when_running_as_a_daemon___40__for_the_assistant__41__/comment_3_d1074724c44f3296cb438b2d526d8728._comment create mode 100644 doc/forum/Wishlist:_mark_remotes_offline.mdwn create mode 100644 doc/forum/Wishlist:_mark_remotes_offline/comment_1_9e3901f0123abb66034cce95cc5a941a._comment create mode 100644 doc/forum/Wishlist:_mark_remotes_offline/comment_2_d10e3d90cf421ae425e64ab266ea811b._comment create mode 100644 doc/forum/Wishlist:_options_for_syncing_meta-data_and_data.mdwn create mode 100644 doc/forum/Wishlist:_rename_files__47__dirs_w__47___special_characters_if_filesystem_is_FAT.mdwn create mode 100644 doc/forum/Wishlist:_rename_files__47__dirs_w__47___special_characters_if_filesystem_is_FAT/comment_1_5d33bcbd862537f53edd91dcff2b8977._comment create mode 100644 doc/forum/XBMC__44___NFS___38___git-annex_.txt create mode 100644 doc/forum/XBMC__44___NFS___38___git-annex_/comment_1_86480f31d410e903766f82e6ecf83e1c._comment create mode 100644 doc/forum/XBMC__44___NFS___38___git-annex_/comment_2_d8ed4dd51d3050db691a8abdec24cd42._comment create mode 100644 doc/forum/XBMC__44___NFS___38___git-annex_/comment_3_42b80ee51ce25775bf4532f53a8ecfe3._comment create mode 100644 doc/forum/XBMC__44___NFS___38___git-annex_/comment_4_01767f3f864954cf8080274e206da9d4._comment create mode 100644 doc/forum/XMPP_authentication_failure.mdwn create mode 100644 doc/forum/XMPP_authentication_failure/comment_1_19c7c3aa79d209d613d2e061e3129690._comment create mode 100644 doc/forum/XMPP_authentication_failure/comment_2_870059fed451e8377e5d382464ecc34b._comment create mode 100644 doc/forum/XMPP_authentication_failure/comment_3_1a7ff955e9173f13d10b75f203792384._comment create mode 100644 doc/forum/XMPP_authentication_failure/comment_4_d59031ebc0dd3abc1f4c96878328362c._comment create mode 100644 doc/forum/XMPP_authentication_failure/comment_5_c37ef477bef7efdb79dd05dce90dfde6._comment create mode 100644 doc/forum/XMPP_authentication_failure/comment_6_48cabea4c2caf5b3bd854df3aaa17d3d._comment create mode 100644 doc/forum/XMPP_authentication_failure/comment_7_14cd9b67806db93c3af055d88c9a910a._comment create mode 100644 doc/forum/XMPP_authentication_failure/comment_8_151d3fd7d3cceb30fd20a8f3bd54036c._comment create mode 100644 doc/forum/XMPP_authentication_failure/comment_9_fbb9eba65fbb72201f08511945fbcf8c._comment create mode 100644 doc/forum/XMPP_email_setup_says_wrong_password_but_it__39__s_correct._Can_I_provide_some_kind_of_debug_data__63__.mdwn create mode 100644 doc/forum/XMPP_email_setup_says_wrong_password_but_it__39__s_correct._Can_I_provide_some_kind_of_debug_data__63__/comment_1_1ba0735141fc6a21ac15913f4cacefae._comment create mode 100644 doc/forum/XMPP_email_setup_says_wrong_password_but_it__39__s_correct._Can_I_provide_some_kind_of_debug_data__63__/comment_2_16994dc86b87592fc62799e2d206d172._comment create mode 100644 doc/forum/XMPP_email_setup_says_wrong_password_but_it__39__s_correct._Can_I_provide_some_kind_of_debug_data__63__/comment_3_6afd424edc4095b8f71b136de2a9e64d._comment create mode 100644 doc/forum/XMPP_email_setup_says_wrong_password_but_it__39__s_correct._Can_I_provide_some_kind_of_debug_data__63__/comment_4_1381b6a927410642c6a93aa8354be791._comment create mode 100644 doc/forum/XMPP_email_setup_says_wrong_password_but_it__39__s_correct._Can_I_provide_some_kind_of_debug_data__63__/comment_5_c5b33c7a8aa8e6d0f9349510dac2366d._comment create mode 100644 doc/forum/XMPP_email_setup_says_wrong_password_but_it__39__s_correct._Can_I_provide_some_kind_of_debug_data__63__/comment_6_9913d2983ba2744ed24911f74988e4c7._comment create mode 100644 doc/forum/XMPP_email_setup_says_wrong_password_but_it__39__s_correct._Can_I_provide_some_kind_of_debug_data__63__/comment_7_ad6f385a2b95803eb9d81dfe76359551._comment create mode 100644 doc/forum/_Does_git_annex_find___40____38___friends__41___batch_queries_to_the_location_log__63__.mdwn create mode 100644 doc/forum/_Does_git_annex_find___40____38___friends__41___batch_queries_to_the_location_log__63__/comment_1_01cbfc513c790faef3a3ede5315d3589._comment create mode 100644 doc/forum/_Does_git_annex_find___40____38___friends__41___batch_queries_to_the_location_log__63__/comment_2_fe28dfb360caa12d5d5bc186def3eb45._comment create mode 100644 doc/forum/_Does_git_annex_find___40____38___friends__41___batch_queries_to_the_location_log__63__/comment_3_9bb30ab62febe4ef63bed49f831a473a._comment create mode 100644 doc/forum/_Does_git_annex_find___40____38___friends__41___batch_queries_to_the_location_log__63__/comment_4_7832f0347a41b8204538c01b72487803._comment create mode 100644 doc/forum/__34__Pairing__34___more_than_two_computers.mdwn create mode 100644 doc/forum/__34__Pairing__34___more_than_two_computers/comment_1_80f7a4bb3c66b11e566043407b611bbf._comment create mode 100644 doc/forum/__34__du__34___equivalent_on_an_annex__63__.mdwn create mode 100644 doc/forum/__34__du__34___equivalent_on_an_annex__63__/comment_1_a41bd02361aa961e5285aeaf1ea062be._comment create mode 100644 doc/forum/__34__du__34___equivalent_on_an_annex__63__/comment_2_28ba62a546f5cc8f416491423d743d8a._comment create mode 100644 doc/forum/__34__du__34___equivalent_on_an_annex__63__/comment_3_8d97f40c1d14b7230f3656a00a99cf80._comment create mode 100644 doc/forum/__34__du__34___equivalent_on_an_annex__63__/comment_4_baa8fbbdd5c449a0dc2bb622cb4a47ce._comment create mode 100644 doc/forum/__34__du__34___equivalent_on_an_annex__63__/comment_5_2ee6cbbfe54a2e7b6e8eb539c18e663d._comment create mode 100644 doc/forum/__34__du__34___equivalent_on_an_annex__63__/comment_6_48f6a2761a34b7f991325f1d24e2c5ff._comment create mode 100644 doc/forum/__34__du__34___equivalent_on_an_annex__63__/comment_7_d632baff41b8582f1a79bc5018c68545._comment create mode 100644 doc/forum/__34__git_annex_copy_--to___60__REMOTE__62___.__34___doesn__39__t_send_it_to_working_directory..mdwn create mode 100644 doc/forum/__34__git_annex_copy_--to___60__REMOTE__62___.__34___doesn__39__t_send_it_to_working_directory./comment_1_0c0a5999a92bf5880f2113177dc67cc2._comment create mode 100644 doc/forum/__34__git_annex_copy_--to___60__REMOTE__62___.__34___doesn__39__t_send_it_to_working_directory./comment_2_c18083d9054f66f0bd51d63452af07eb._comment create mode 100644 doc/forum/__34__git_annex_lock__34___very_slow_for_big_repo.mdwn create mode 100644 doc/forum/__34__git_annex_lock__34___very_slow_for_big_repo/comment_1_044f1c5e5f7a939315c28087495a8ba8._comment create mode 100644 doc/forum/__34__git_annex_lock__34___very_slow_for_big_repo/comment_2_e854b93415d5ab80eda8e3be3b145ec2._comment create mode 100644 doc/forum/__34__git_annex_lock__34___very_slow_for_big_repo/comment_3_95c110500bc54013bc1969c1a9c8f842._comment create mode 100644 doc/forum/__34__next_time_Im_online_I_would_like_to_have_file_x_y_z__34__.mdwn create mode 100644 doc/forum/__34__next_time_Im_online_I_would_like_to_have_file_x_y_z__34__/comment_1_bfeb1446dee4d2f52ef25fabfb8cc8f6._comment create mode 100644 doc/forum/__34__next_time_Im_online_I_would_like_to_have_file_x_y_z__34__/comment_2_e60f2bbc1c058993472fd920edbc75fc._comment create mode 100644 doc/forum/__34__permission_denied__34___in_fsck_on_shared_repo.mdwn create mode 100644 doc/forum/__34__permission_denied__34___in_fsck_on_shared_repo/comment_1_3a5202ef2116ebb5559b6f4d920755fc._comment create mode 100644 doc/forum/__34__permission_denied__34___in_fsck_on_shared_repo/comment_2_86663eeb75b0477f53c45f26c8e4b051._comment create mode 100644 doc/forum/__34__permission_denied__34___in_fsck_on_shared_repo/comment_3_c336b2b07cd006d378e5be9639ff17ec._comment create mode 100644 doc/forum/__34__permission_denied__34___in_fsck_on_shared_repo/comment_4_1339cd27ca2955f30b01ecf4da7d6fe8._comment create mode 100644 doc/forum/__34__unable_to_resolve_reference_refs__47__heads__47__git-annex__34__.mdwn create mode 100644 doc/forum/__34__unable_to_resolve_reference_refs__47__heads__47__git-annex__34__/comment_1_e50188896df347f1d92e20a52053aa14._comment create mode 100644 doc/forum/__34__unable_to_resolve_reference_refs__47__heads__47__git-annex__34__/comment_2_d67793f7c969f64943d1fd54a1208c2b._comment create mode 100644 doc/forum/__34__unable_to_resolve_reference_refs__47__heads__47__git-annex__34__/comment_3_3523884833b5fd458a35f898797bf897._comment create mode 100644 doc/forum/__34__unable_to_resolve_reference_refs__47__heads__47__git-annex__34__/comment_4_02c32c2521ba1a1eaa19eaca7281f2a6._comment create mode 100644 doc/forum/__91__Installation__93___base-3.0.3.2_requires_syb___61____61__0.1.0.2.mdwn create mode 100644 doc/forum/__91__Installation__93___base-3.0.3.2_requires_syb___61____61__0.1.0.2/comment_1_fae6e88115d175239fc55cef4c33fb2c._comment create mode 100644 doc/forum/__91__Installation__93___base-3.0.3.2_requires_syb___61____61__0.1.0.2/comment_2_4c7a75638e8717132ccde949018d6008._comment create mode 100644 doc/forum/_preferred_content:_lastpresent.mdwn create mode 100644 doc/forum/_preferred_content:_lastpresent/comment_1_7610cd866b256d36646b642eb5f8cae5._comment create mode 100644 doc/forum/_preferred_content:_lastpresent/comment_2_d25666a173b78213d583f029fd166d06._comment create mode 100644 doc/forum/advantages_of_SHA__42___over_WORM.mdwn create mode 100644 doc/forum/advantages_of_SHA__42___over_WORM/comment_1_96c354cac4b5ce5cf6664943bc84db1d._comment create mode 100644 doc/forum/android_binary-only_download.mdwn create mode 100644 doc/forum/android_binary-only_download/comment_1_aab206e0bf0bb5ff47c7cc9795f12f92._comment create mode 100644 doc/forum/annexed_file_key_for_web_remote_with_SHA256E_backend.mdwn create mode 100644 doc/forum/annexed_file_key_for_web_remote_with_SHA256E_backend/comment_1_d1605a6e3b4d6863f4089218994ce564._comment create mode 100644 doc/forum/annexed_file_key_for_web_remote_with_SHA256E_backend/comment_2_d249ff27fa3d9ac3ca32485cdef49930._comment create mode 100644 doc/forum/archaeology_of_deleted_files.mdwn create mode 100644 doc/forum/archaeology_of_deleted_files/comment_1_48f27df03ec18d2c27cf6b70dcf71dc5._comment create mode 100644 doc/forum/archaeology_of_deleted_files/comment_2_c698cd10c8038bac45bd1049506a27c3._comment create mode 100644 doc/forum/archival_and_multiple_users.mdwn create mode 100644 doc/forum/archival_and_multiple_users/comment_1_fc4ee256f03a7c189d687caf4a34e21e._comment create mode 100644 doc/forum/archival_and_multiple_users/comment_2_a96d57d4bb567ac9b0b9167d5b1be011._comment create mode 100644 doc/forum/archival_and_multiple_users/comment_3_bd44634b04732ffb91154c61ef9cf828._comment create mode 100644 doc/forum/archival_and_multiple_users/comment_4_b89a56a5f1cd641f87925c7a5f74bcec._comment create mode 100644 doc/forum/archival_and_multiple_users/comment_5_81293bf5dc8ad4552712c2083fd589c9._comment create mode 100644 doc/forum/assistant__44___direct_mode__44___large_files__44___command_line_-_how_do_these_play_together__63__.mdwn create mode 100644 doc/forum/assistant__44___direct_mode__44___large_files__44___command_line_-_how_do_these_play_together__63__/comment_1_d90d1d599ce557af03c6f0f2ea188212._comment create mode 100644 doc/forum/assistant__44___direct_mode__44___large_files__44___command_line_-_how_do_these_play_together__63__/comment_2_58b1af497cab132acb28cb5f9283ec2a._comment create mode 100644 doc/forum/assistant__44___direct_mode__44___large_files__44___command_line_-_how_do_these_play_together__63__/comment_3_37d4fd8f69e8066b5aa19454b714e443._comment create mode 100644 doc/forum/assistant__44___direct_mode__44___large_files__44___command_line_-_how_do_these_play_together__63__/comment_4_a974e2105774d4f82ad286ff0792ba84._comment create mode 100644 doc/forum/assistant_created_encrypted__backup_remote:_Howto_restore__63__.mdwn create mode 100644 doc/forum/assistant_created_encrypted__backup_remote:_Howto_restore__63__/comment_1_70200f871b9df49261f32752a6bb0e67._comment create mode 100644 doc/forum/assistant_created_encrypted__backup_remote:_Howto_restore__63__/comment_2_173da510b45f0320ae8aa2df9f14ae7b._comment create mode 100644 doc/forum/assistant_overzealously_moving_stuff_to_other_repos.mdwn create mode 100644 doc/forum/assistant_overzealously_moving_stuff_to_other_repos/comment_1_6bd240edf1868615024ff11c24c3d52c._comment create mode 100644 doc/forum/assistant_overzealously_moving_stuff_to_other_repos/comment_2_37c5e9a7669b5b94fbadb8792a765316._comment create mode 100644 doc/forum/assistant_overzealously_moving_stuff_to_other_repos/comment_3_87aa4c5942929be81ddc1e2795d56f0e._comment create mode 100644 doc/forum/assistant_without_watch__63__.mdwn create mode 100644 doc/forum/assistant_without_watch__63__/comment_1_be1f7c038426e53209a85ae1119269d5._comment create mode 100644 doc/forum/autobuilders_for_git-annex_to_aid_development.mdwn create mode 100644 doc/forum/autobuilders_for_git-annex_to_aid_development/comment_1_7e88f815e8d9652ef18ea6d54b118962._comment create mode 100644 doc/forum/autobuilders_for_git-annex_to_aid_development/comment_2_fef17a10226af5671495c2929653c337._comment create mode 100644 doc/forum/bainstorming:_git_annex_push___38___pull.mdwn create mode 100644 doc/forum/bainstorming:_git_annex_push___38___pull/comment_1_3a0bf74b51586354b7a91f8b43472376._comment create mode 100644 doc/forum/bainstorming:_git_annex_push___38___pull/comment_2_b02ca09914e788393c01196686f95831._comment create mode 100644 doc/forum/bash_completion.mdwn create mode 100644 doc/forum/bash_completion/comment_1_5c42c0c8e7fc3224bf5406880f9fd0c4._comment create mode 100644 doc/forum/bash_completion/comment_2_6cbe3c825db99bf9188a0de8bb937d5b._comment create mode 100644 doc/forum/bash_completion/comment_3_948c40f1e46ca220d61365aebcd4f6d7._comment create mode 100644 doc/forum/bash_completion/comment_4_dbae348b230b780cda91ed8576b8f9fa._comment create mode 100644 doc/forum/batch_check_on_remote_when_using_copy.mdwn create mode 100644 doc/forum/benefit_of_splitting_a_repository.mdwn create mode 100644 doc/forum/benefit_of_splitting_a_repository/comment_1_93a86cb03b66e7ab5dd7146e7b86c9e8._comment create mode 100644 doc/forum/benefit_of_splitting_a_repository/comment_2_4e2fed247298d620fee7be883a1e86a6._comment create mode 100644 doc/forum/cabal_install_fails_on_uuid.mdwn create mode 100644 doc/forum/cabal_install_fails_on_uuid/comment_1_2a3963e21bc7ff526124b902cb0b6ad2._comment create mode 100644 doc/forum/cabal_install_fails_on_uuid/comment_2_1609525998e2b36c04d67f4d988139c0._comment create mode 100644 doc/forum/can_I_only_add_my_own_files__63__.mdwn create mode 100644 doc/forum/can_I_only_add_my_own_files__63__/comment_1_767d647af9d0345f337338d6319071fa._comment create mode 100644 doc/forum/can_I_only_add_my_own_files__63__/comment_2_0c3306ffb38b97b54e1e0436d12c1876._comment create mode 100644 doc/forum/can_git-annex_replace_ddm__63__.mdwn create mode 100644 doc/forum/can_git-annex_replace_ddm__63__/comment_1_aa05008dfe800474ff76678a400099e1._comment create mode 100644 doc/forum/can_git-annex_replace_ddm__63__/comment_2_008554306dd082d7f543baf283510e92._comment create mode 100644 doc/forum/can_git-annex_replace_ddm__63__/comment_3_4c69097fe2ee81359655e59a03a9bb8d._comment create mode 100644 doc/forum/cannot_fetch_from___40__gpg-encrypted__41___rsync_remote_on_MacOSX.mdwn create mode 100644 doc/forum/cannot_fetch_from___40__gpg-encrypted__41___rsync_remote_on_MacOSX/comment_1_21f0101447623f5a0cf9e72c3ff463bb._comment create mode 100644 doc/forum/cannot_fetch_from___40__gpg-encrypted__41___rsync_remote_on_MacOSX/comment_2_6234ca64bd03a0e15efbe8f5c204338a._comment create mode 100644 doc/forum/cannot_fetch_from___40__gpg-encrypted__41___rsync_remote_on_MacOSX/comment_3_5ac2b520a907e232984eb513ce088054._comment create mode 100644 doc/forum/cannot_fetch_from___40__gpg-encrypted__41___rsync_remote_on_MacOSX/comment_4_183dd1c29f66539193e7c0b73f329430._comment create mode 100644 doc/forum/cannot_fetch_from___40__gpg-encrypted__41___rsync_remote_on_MacOSX/comment_5_c920d04ffe332caed9d223fa0ac42746._comment create mode 100644 doc/forum/cannot_fetch_from___40__gpg-encrypted__41___rsync_remote_on_MacOSX/comment_6_7a3cf0853a8ec7b996e19b5e80145d21._comment create mode 100644 doc/forum/central_non-bare_and_git_push.txt create mode 100644 doc/forum/central_non-bare_and_git_push/comment_1_76d0c73c8985e860eb86333c63be6340._comment create mode 100644 doc/forum/clear_box.com_repository.mdwn create mode 100644 doc/forum/clear_box.com_repository/comment_1_2e839d8f974269c80a9fca183712350f._comment create mode 100644 doc/forum/clear_box.com_repository/comment_2_8f9c7248a148a24ae2aba39c4a79a6d1._comment create mode 100644 doc/forum/clear_box.com_repository/comment_3_f64ad21e5abfbf4e1f925b3d651bdba3._comment create mode 100644 doc/forum/clear_box.com_repository/comment_4_f8c06ac9b23b51cf18d362c260fc47a9._comment create mode 100644 doc/forum/clear_box.com_repository/comment_5_61d401b29322802cb25896503f3e6514._comment create mode 100644 doc/forum/cloud_services_to_support.mdwn create mode 100644 doc/forum/cloudcmd.mdwn create mode 100644 doc/forum/commit_current_workdir_state_in_direct_mode.mdwn create mode 100644 doc/forum/commit_current_workdir_state_in_direct_mode/comment_1_748481ff00374f570284bd4571584874._comment create mode 100644 doc/forum/confusion_with_remotes__44___map.mdwn create mode 100644 doc/forum/confusion_with_remotes__44___map/comment_1_a38ded23b7f288292a843abcb1a56f38._comment create mode 100644 doc/forum/confusion_with_remotes__44___map/comment_2_cd1c98b1276444e859a22c3dbd6f2a79._comment create mode 100644 doc/forum/confusion_with_remotes__44___map/comment_3_18531754089c991b6caefc57a5c17fe9._comment create mode 100644 doc/forum/confusion_with_remotes__44___map/comment_4_3b89b6d1518267fcbc050c9de038b9ca._comment create mode 100644 doc/forum/confusion_with_remotes__44___map/comment_5_27801584325d259fa490f67273f2ff71._comment create mode 100644 doc/forum/confusion_with_remotes__44___map/comment_6_496b0d9b86869bbac3a1356d53a3dda4._comment create mode 100644 doc/forum/confusion_with_remotes__44___map/comment_7_9a456f61f956a3d5e81e723d5a90794c._comment create mode 100644 doc/forum/correct_way_to_add_two_preexisting_datasets.mdwn create mode 100644 doc/forum/correct_way_to_add_two_preexisting_datasets/comment_1_c5c3ff25c9f5e34db222b5f4ae58b093._comment create mode 100644 doc/forum/correct_way_to_add_two_preexisting_datasets/comment_2_ee3ecc86990ac5a8d0c4fdfb482a7594._comment create mode 100644 doc/forum/correct_way_to_add_two_preexisting_datasets/comment_3_e29bf8b848da04c761dc601ac979ac14._comment create mode 100644 doc/forum/could_not_read_from_remote_repository.mdwn create mode 100644 doc/forum/could_not_read_from_remote_repository/comment_1_27d4d1556a80c06505ed3d8a9422d082._comment create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp.mdwn create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp/comment_10_14b74438bb1e3e02cff7926d774ba09a._comment create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp/comment_11_b1f717342c1c8ea42a451caa2d936622._comment create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp/comment_12_e2c6ad99333018c8c46e736da416b8ef._comment create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp/comment_1_1a35ef8cb89e0cd392f6e9fcee1fb92c._comment create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp/comment_2_f4cc36c493d7c20fbaf949edd38e1252._comment create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp/comment_3_69268f8aa29e807a56248f1fac86aa41._comment create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp/comment_4_0ffb0c803c232a1587f956f16113aeb7._comment create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp/comment_5_c303e28825241733d69fca74f2015fc6._comment create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp/comment_6_3f0b376e37bd092b8d46c46bb1940e35._comment create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp/comment_7_615641b3dd176d4b3a5bbfb521098e38._comment create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp/comment_8_4600fa9234a787004ea0e0dbb36184b9._comment create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp/comment_9_4f5cd0d0d4db0479c1ad86ffdc5ae434._comment create mode 100644 doc/forum/dropping_files_not_working_when_using_git_annex_assistant.txt create mode 100644 doc/forum/endless_password_prompt_loop.mdwn create mode 100644 doc/forum/endless_password_prompt_loop/comment_1_cceba12ed25cd671c7cee5a28631163e._comment create mode 100644 doc/forum/endless_password_prompt_loop/comment_2_f0cb86b45eb289f35197c43f83660a8f._comment create mode 100644 doc/forum/error_in_installation_of_base-4.5.0.0.mdwn create mode 100644 doc/forum/error_in_installation_of_base-4.5.0.0/comment_1_0b2f79c014e0dd9badd52b8b6aa47e0c._comment create mode 100644 doc/forum/error_in_installation_of_base-4.5.0.0/comment_2_3badd64e48fbb174cd7de1ac9589bedf._comment create mode 100644 doc/forum/error_in_installation_of_base-4.5.0.0/comment_3_d8190061ac1c683a7b699cf42e9db694._comment create mode 100644 doc/forum/error_in_installation_of_base-4.5.0.0/comment_4_49a4fcd2dc4f97d4055b5051feea5e3b._comment create mode 100644 doc/forum/example_of_massively_disconnected_operation.mdwn create mode 100644 doc/forum/exclude_files_from_annex.mdwn create mode 100644 doc/forum/exclude_files_from_annex/comment_1_82e7de5e631bae3b347815586274a936._comment create mode 100644 doc/forum/exclude_files_from_annex/comment_2_03d4599fdceb3dff184eed82824674bc._comment create mode 100644 doc/forum/expire_files__44___move_to_other_hosts.mdwn create mode 100644 doc/forum/expire_files__44___move_to_other_hosts/comment_1_ddcc2a00be1ae96a352d75a443458bcf._comment create mode 100644 doc/forum/expire_files__44___move_to_other_hosts/comment_2_7a4c3858c5eae409d04de3f9da43b57e._comment create mode 100644 doc/forum/exporting_annexed_files.mdwn create mode 100644 doc/forum/exporting_annexed_files/comment_1_e08e4c79588e17fb2f1cdf53d9fab7ea._comment create mode 100644 doc/forum/exporting_annexed_files/comment_2_15dc3024417b5b2ff3544a08beacab34._comment create mode 100644 doc/forum/exporting_annexed_files/comment_3_86f0e0f767a84a0f583e121d36cb7d48._comment create mode 100644 doc/forum/fail_to_git_annex_add_some_files:_getFileStatus:_does_not_exist__40__v_3.20111231__41__.mdwn create mode 100644 doc/forum/fail_to_git_annex_add_some_files:_getFileStatus:_does_not_exist__40__v_3.20111231__41__/comment_1_990197bf01351dc1ccbe1940d5084adb._comment create mode 100644 doc/forum/fail_to_git_annex_add_some_files:_getFileStatus:_does_not_exist__40__v_3.20111231__41__/comment_2_3bb1d21b7f0d0bd6d59190ae9d246d46._comment create mode 100644 doc/forum/fail_to_git_annex_add_some_files:_getFileStatus:_does_not_exist__40__v_3.20111231__41__/comment_3_692f268218690437138ae0540c879425._comment create mode 100644 doc/forum/first-time_setup_git-annex.mdwn create mode 100644 doc/forum/first-time_setup_git-annex/comment_1_a58d83ee3a7c2251d9a775847223f8ca._comment create mode 100644 doc/forum/flickrannex_--_not_sure_I_get_it.mdwn create mode 100644 doc/forum/flickrannex_--_not_sure_I_get_it/comment_1_57ea9f26760f970a70f09934d31a79b5._comment create mode 100644 doc/forum/flickrannex_--_not_sure_I_get_it/comment_2_ba93563b4ce1f6497a9f1d5e6eb0d1bb._comment create mode 100644 doc/forum/flickrannex_--_not_sure_I_get_it/comment_3_74f143965f48c89a3583acf1b6a7635a._comment create mode 100644 doc/forum/flickrannex_--_not_sure_I_get_it/comment_4_493bb86dedfa91ccc0c9be4045953ee4._comment create mode 100644 doc/forum/flickrannex_--_not_sure_I_get_it/comment_5_2c410aa478b21c0e6eb0e4d54bc8c362._comment create mode 100644 doc/forum/fsck_gives_false_positives.mdwn create mode 100644 doc/forum/fsck_gives_false_positives/comment_1_b91070218b9d5fb687eeee1f244237ad._comment create mode 100644 doc/forum/fsck_gives_false_positives/comment_2_f51c53f3f6e6ee1ad463992657db5828._comment create mode 100644 doc/forum/fsck_gives_false_positives/comment_3_692d6d4cd2f75a497e7d314041a768d2._comment create mode 100644 doc/forum/fsck_gives_false_positives/comment_4_7ceb395bf8a2e6a041ccd8de63b1b6eb._comment create mode 100644 doc/forum/fsck_gives_false_positives/comment_5_86484a504c3bbcecd5876982b9c95688._comment create mode 100644 doc/forum/fsck_gives_false_positives/comment_6_1d4fbbd212fa92967abda346323031f4._comment create mode 100644 doc/forum/gadu_-_git-annex_disk_usage.mdwn create mode 100644 doc/forum/gadu_-_git-annex_disk_usage/comment_10_f632a62c4dbbf01b29f146893d7725f9._comment create mode 100644 doc/forum/gadu_-_git-annex_disk_usage/comment_11_73461da2d55d040cb43e0db286975821._comment create mode 100644 doc/forum/gadu_-_git-annex_disk_usage/comment_12_6c4fb123091bde435c18ac3dfd5a9b77._comment create mode 100644 doc/forum/gadu_-_git-annex_disk_usage/comment_1_067d0ffe8900751bd2d2743254ac4d77._comment create mode 100644 doc/forum/gadu_-_git-annex_disk_usage/comment_2_ec8b57426e4d82c3392eb7dd683f2ddc._comment create mode 100644 doc/forum/gadu_-_git-annex_disk_usage/comment_3_38296fef5a2dc5794c2dc09df676b8c1._comment create mode 100644 doc/forum/gadu_-_git-annex_disk_usage/comment_4_1bcc94f9982c6cfd0888f3dba0f9221e._comment create mode 100644 doc/forum/gadu_-_git-annex_disk_usage/comment_5_4365cd3031456fac1b563ee72984638e._comment create mode 100644 doc/forum/gadu_-_git-annex_disk_usage/comment_6_2b03d7b857497cb811e992f85700cdcc._comment create mode 100644 doc/forum/gadu_-_git-annex_disk_usage/comment_7_03a4dfaf3bd73d41c6f3c3fab0a6a922._comment create mode 100644 doc/forum/gadu_-_git-annex_disk_usage/comment_8_fc6ddb4dc075ee42368863c1b026dbf7._comment create mode 100644 doc/forum/gadu_-_git-annex_disk_usage/comment_9_f03254e518cbdda73e4b88e72476275d._comment create mode 100644 doc/forum/get_and_copy_with_bare_repositories.mdwn create mode 100644 doc/forum/get_and_copy_with_bare_repositories/comment_1_a6e4628c0770e3f5e81348a6f29dd845._comment create mode 100644 doc/forum/get_and_copy_with_bare_repositories/comment_2_652fa1bae5c2bb63dcffcbda97a567c4._comment create mode 100644 doc/forum/getting_git_annex_to_do_a_force_copy_to_a_remote.mdwn create mode 100644 doc/forum/getting_git_annex_to_do_a_force_copy_to_a_remote/comment_1_3deb2c31cad37a49896f00d600253ee3._comment create mode 100644 doc/forum/getting_git_annex_to_do_a_force_copy_to_a_remote/comment_2_627f54d158d3ca4b72e45b4da70ff5cd._comment create mode 100644 doc/forum/getting_git_annex_to_do_a_force_copy_to_a_remote/comment_3_3f49dab11aae5df0c4eb5e4b8d741379._comment create mode 100644 doc/forum/git-annex___38___ikiwiki_experiment.mdwn create mode 100644 doc/forum/git-annex___38___ikiwiki_experiment/comment_1_9f74449ec91577dbf6095f4beafac293._comment create mode 100644 doc/forum/git-annex___38___ikiwiki_experiment/comment_2_e034585c8b51cc30b35c1f7ae68205bf._comment create mode 100644 doc/forum/git-annex___38___ikiwiki_experiment/comment_3_fbbd47c3dbe8de24b0df664e4afd5cb8._comment create mode 100644 doc/forum/git-annex___38___ikiwiki_experiment/comment_4_55da5c3c41c13b08590ce1ff8117cef6._comment create mode 100644 doc/forum/git-annex___38___ikiwiki_experiment/comment_5_f67823351164ddfe7d595685c3679652._comment create mode 100644 doc/forum/git-annex___38___ikiwiki_experiment/comment_6_d5cc91164772849d027fed5f962d9000._comment create mode 100644 doc/forum/git-annex___38___ikiwiki_experiment/comment_7_cb4ec7ed3c39d0649133191a85ea6ab3._comment create mode 100644 doc/forum/git-annex___38___ikiwiki_experiment/comment_8_86565e5e1508ff1862f88975446650a2._comment create mode 100644 doc/forum/git-annex_across_two_filesystems.mdwn create mode 100644 doc/forum/git-annex_across_two_filesystems/comment_1_53167648b8b70b41d19ca662a5f3687e._comment create mode 100644 doc/forum/git-annex_across_two_filesystems/comment_2_39adeebc1af9c437f1fc2e00c07509bf._comment create mode 100644 doc/forum/git-annex_across_two_filesystems/comment_3_f4e3f28db005301adeef7ccd2c9998fb._comment create mode 100644 doc/forum/git-annex_across_two_filesystems/comment_4_53fa7ac6f80e3281768a7bfd3d438b34._comment create mode 100644 doc/forum/git-annex_across_two_filesystems/comment_5_2e1be54c01970ef3456e8af4aaf00cbf._comment create mode 100644 doc/forum/git-annex_and_tagfs.mdwn create mode 100644 doc/forum/git-annex_and_tagfs/comment_1_887c74cb61d30198322ef74ebc80f950._comment create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers.mdwn create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers/comment_10_533ade2215c879cd46782fd66a97b167._comment create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers/comment_11_c9ae51d7b772cf7a91d90925f74d2b60._comment create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers/comment_12_41fbee0ec9bc890e309bcd48a58c3851._comment create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers/comment_13_571cffc0beb8ba5fc936db6971cd3d62._comment create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers/comment_1_53a79af2d8e3abe50b983bf91972b8f2._comment create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers/comment_2_c0ba3e8b7fbf8a5ed718001cec8df676._comment create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers/comment_3_60c39bc8ef74e80e72381d514b6dd223._comment create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers/comment_4_6241120b4325c905661ef72881f4d7af._comment create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers/comment_5_cab00b8fa195340f4d3fdaf5af975b57._comment create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers/comment_6_e24df9a1c68724a912b8ac6533d9bd25._comment create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers/comment_7_ace3dc7c60c710a04b0a587206b341c4._comment create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers/comment_8_9a96bc970a17ed62b0ceb7aa3f0a6f8b._comment create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers/comment_9_ea88e0696f6e25e6904248a323f6cc36._comment create mode 100644 doc/forum/git-annex_build_for_Nokia_N9___40__Meego_Harmattan__41___and_Sailfish_OS.mdwn create mode 100644 doc/forum/git-annex_build_for_Nokia_N9___40__Meego_Harmattan__41___and_Sailfish_OS/comment_1_301a51c48c3d54f9d37feace26a772f8._comment create mode 100644 doc/forum/git-annex_communication_channels.mdwn create mode 100644 doc/forum/git-annex_communication_channels/comment_1_198325d2e9337c90f026396de89eec0e._comment create mode 100644 doc/forum/git-annex_communication_channels/comment_2_c7aeefa6ef9a2e75d8667b479ade1b7f._comment create mode 100644 doc/forum/git-annex_communication_channels/comment_3_1ff08a3e0e63fa0e560cbc9602245caa._comment create mode 100644 doc/forum/git-annex_communication_channels/comment_4_1ba6ddf54843c17c7d19a9996f2ab712._comment create mode 100644 doc/forum/git-annex_communication_channels/comment_5_404b723a681eb93fee015cea8024b6bc._comment create mode 100644 doc/forum/git-annex_communication_channels/comment_6_0d87d0e26461494b1d7f8a701a924729._comment create mode 100644 doc/forum/git-annex_communication_channels/comment_7_2c87c7a0648fe87c2bf6b4391f1cc468._comment create mode 100644 doc/forum/git-annex_on_OSX.mdwn create mode 100644 doc/forum/git-annex_on_Samba_share.mdwn create mode 100644 doc/forum/git-annex_on_Samba_share/comment_1_3e9cfdf2c088e48c967ad08f79966742._comment create mode 100644 doc/forum/git-annex_on_Samba_share/comment_2_9d3df393b7b727653598453d94dd33db._comment create mode 100644 doc/forum/git-annex_on_Ubuntu_13.04_and_13.10_not_working.mdwn create mode 100644 doc/forum/git-annex_on_Ubuntu_13.04_and_13.10_not_working/comment_1_209956f3812450a43986d4ca5e647da6._comment create mode 100644 doc/forum/git-annex_on_Ubuntu_13.04_and_13.10_not_working/comment_3_12a58b8efe545e09b64760c87849839b._comment create mode 100644 doc/forum/git-annex_on_Ubuntu_13.04_and_13.10_not_working/comment_3_e0f7328603256f25c3be3706ecc9c76c._comment create mode 100644 doc/forum/git-annex_on_Ubuntu_13.04_and_13.10_not_working/comment_4_6bb8e4522241556fb82784d9b834cbfe._comment create mode 100644 doc/forum/git-annex_on_Ubuntu_13.04_and_13.10_not_working/comment_5_89a5296b461d400b51006074a13a4560._comment create mode 100644 doc/forum/git-annex_on_Ubuntu_13.04_and_13.10_not_working/comment_6_62daef4b4392c951b914a01b3effac11._comment create mode 100644 doc/forum/git-annex_on_archlinuxarm__44___armv6.mdwn create mode 100644 doc/forum/git-annex_on_archlinuxarm__44___armv6/comment_1_88fa644df8614c2db0d092b3eb1d3156._comment create mode 100644 doc/forum/git-annex_pre-commit_eats_all_my_4GB_of_ram.mdwn create mode 100644 doc/forum/git-annex_pre-commit_eats_all_my_4GB_of_ram/comment_1_ff16c7932b60b85c744bafc48bb040e4._comment create mode 100644 doc/forum/git-annex_pre-commit_eats_all_my_4GB_of_ram/comment_2_5599cddf579d18f70cab6e48d04ae99d._comment create mode 100644 doc/forum/git-annex_pre-commit_eats_all_my_4GB_of_ram/comment_3_412941e9385f63153b23695641e71deb._comment create mode 100644 doc/forum/git-annex_pre-commit_eats_all_my_4GB_of_ram/comment_4_112ad140d9006c530db2121bec24de30._comment create mode 100644 doc/forum/git-annex_pre-commit_eats_all_my_4GB_of_ram/comment_5_9178023b95683a649355f291165a1467._comment create mode 100644 doc/forum/git-annex_pre-commit_eats_all_my_4GB_of_ram/comment_6_9251203421c1c3c3aed7828c4b97ecb8._comment create mode 100644 doc/forum/git-annex_teams___47___groups.mdwn create mode 100644 doc/forum/git-annex_teams___47___groups/comment_1_0450673ab74f184a47ac7bab568d26dc._comment create mode 100644 doc/forum/git-annex_unused_not_dropping_deleted_files.mdwn create mode 100644 doc/forum/git-annex_unused_not_dropping_deleted_files/comment_1_2152cfb09675e46e7492e198dd3ea094._comment create mode 100644 doc/forum/git-annex_unused_not_dropping_deleted_files/comment_2_97e666dbac9de2a5e688921cba8a42e9._comment create mode 100644 doc/forum/git-annex_unused_not_dropping_deleted_files/comment_3_d7b0e9515bface28f3650b8aa20ec2f4._comment create mode 100644 doc/forum/git-annex_unused_not_dropping_deleted_files/comment_4_5816f6cab42e27e724e735368f693b09._comment create mode 100644 doc/forum/git-annex_unused_not_dropping_deleted_files/comment_5_8e97f39225515f0bf8b168dfd6a0efab._comment create mode 100644 doc/forum/git-annex_unused_not_dropping_deleted_files/comment_6_bef37f8ec9c337387b79ffd6d56fe425._comment create mode 100644 doc/forum/git-assistant_clarification.mdwn create mode 100644 doc/forum/git-assistant_clarification/comment_1_8f553e59da12f798b854a457b96b5778._comment create mode 100644 doc/forum/git-assistant_clarification/comment_2_06cf62b599edea6ad8396776f0081494._comment create mode 100644 doc/forum/git-assistant_clarification/comment_3_36f0bd6e7a824e6ef40a309850bb087b._comment create mode 100644 doc/forum/git-remote-gcrypt.mdwn create mode 100644 doc/forum/git-remote-gcrypt/comment_1_175c8c35d9bbb470fcc17697eb8cc6b8._comment create mode 100644 doc/forum/git-remote-gcrypt/comment_2_fdcaf507e14c995636dd93a41e488df3._comment create mode 100644 doc/forum/git-remote-gcrypt/comment_3_f4e830f961dbe1c60ddd277b9d888133._comment create mode 100644 doc/forum/git-status_typechange_in_direct_mode.mdwn create mode 100644 doc/forum/git-status_typechange_in_direct_mode/comment_1_12c8b67aadbfa2b073e12997a55d49a7._comment create mode 100644 doc/forum/git-status_typechange_in_direct_mode/comment_2_005d1b17f3c2ae192aa30c6e5163989e._comment create mode 100644 doc/forum/git-subtree_support__63__.mdwn create mode 100644 doc/forum/git-subtree_support__63__/comment_1_4f333cb71ed1ff259bbfd86704806aa6._comment create mode 100644 doc/forum/git-subtree_support__63__/comment_2_73d2a015b1ac79ec99e071a8b1e29034._comment create mode 100644 doc/forum/git-subtree_support__63__/comment_3_c533400e22c306c033fcd56e64761b0b._comment create mode 100644 doc/forum/git-subtree_support__63__/comment_4_75b0e072e668aa46ff0a8d62a6620306._comment create mode 100644 doc/forum/git-subtree_support__63__/comment_5_f5ec9649d9f1dc122e715de5533bc674._comment create mode 100644 doc/forum/git-subtree_support__63__/comment_6_85df530f7b6d76b74ac8017c6034f95e._comment create mode 100644 doc/forum/git_annex_add_crash_and_subsequent_recovery.mdwn create mode 100644 doc/forum/git_annex_add_crash_and_subsequent_recovery/comment_1_062d0153a379c1ba1df8585b90220d3d._comment create mode 100644 doc/forum/git_annex_add_crash_and_subsequent_recovery/comment_2_6fc6be43c488c468a4811cd0a1360225._comment create mode 100644 doc/forum/git_annex_add_crash_and_subsequent_recovery/comment_3_45efaaf27d9b580c4c75cbcdc4f65b64._comment create mode 100644 doc/forum/git_annex_add_crash_and_subsequent_recovery/comment_4_c560eae40867512b0af2cbef161fc8ac._comment create mode 100644 doc/forum/git_annex_alternative.mdwn create mode 100644 doc/forum/git_annex_assistant__44___share_with_other_devices.mdwn create mode 100644 doc/forum/git_annex_copy_--fast_--to_blah_much_slower_than_--from_blah.mdwn create mode 100644 doc/forum/git_annex_copy_--fast_--to_blah_much_slower_than_--from_blah/comment_1_5b6e0b749b01a97a6b52a2c1cca6e35a._comment create mode 100644 doc/forum/git_annex_copy_--fast_--to_blah_much_slower_than_--from_blah/comment_2_8f2567f4c4f6db2078211a87689757d3._comment create mode 100644 doc/forum/git_annex_copy_--fast_--to_blah_much_slower_than_--from_blah/comment_3_ab98121076b88f351fc8cd9197e6bf64._comment create mode 100644 doc/forum/git_annex_copy_--fast_--to_blah_much_slower_than_--from_blah/comment_4_cb13328add1b7a812efd817ad3dd1a4f._comment create mode 100644 doc/forum/git_annex_failing_to_get_non-English_filenames.__Rsync_problem__63__.mdwn create mode 100644 doc/forum/git_annex_failing_to_get_non-English_filenames.__Rsync_problem__63__/comment_1_292ee7c8b37cbd13f03eb67d0359b99e._comment create mode 100644 doc/forum/git_annex_failing_to_get_non-English_filenames.__Rsync_problem__63__/comment_2_f6341119fcfde5d8160c8f603b1a6fea._comment create mode 100644 doc/forum/git_annex_failing_to_get_non-English_filenames.__Rsync_problem__63__/comment_3_8ad3a1d1fe5995d61e5e137280bc76c3._comment create mode 100644 doc/forum/git_annex_failing_to_get_non-English_filenames.__Rsync_problem__63__/comment_4_86b61b0484f3f4ecff657e46333b3d4f._comment create mode 100644 doc/forum/git_annex_failing_to_get_non-English_filenames.__Rsync_problem__63__/comment_5_5ffac00d08d26acaba8c3513b24c4d65._comment create mode 100644 doc/forum/git_annex_get_creates_a_new_uuid.mdwn create mode 100644 doc/forum/git_annex_get_creates_a_new_uuid/comment_1_004c87183968c326058bd3159a5baa0b._comment create mode 100644 doc/forum/git_annex_ls___47___metadata_in_git_annex_whereis.mdwn create mode 100644 doc/forum/git_annex_ls___47___metadata_in_git_annex_whereis/comment_1_7fba10b85f4d9289c7782eccef46949e._comment create mode 100644 doc/forum/git_annex_ls___47___metadata_in_git_annex_whereis/comment_2_7dcec124ea7d0291ed40d80e2ffd5c7e._comment create mode 100644 doc/forum/git_annex_sync_dies___40__sometimes__41__.mdwn create mode 100644 doc/forum/git_annex_sync_dies___40__sometimes__41__/comment_1_48bbac0545bf13bbf04da723e418d037._comment create mode 100644 doc/forum/git_annex_test_on_windows.mdwn create mode 100644 doc/forum/git_annex_test_on_windows/comment_1_258ac5cfa2f5d24e737d94dc48f06899._comment create mode 100644 doc/forum/git_pull_remote_git-annex.mdwn create mode 100644 doc/forum/git_pull_remote_git-annex/comment_1_9c245db3518d8b889ecdf5115ad9e053._comment create mode 100644 doc/forum/git_pull_remote_git-annex/comment_2_0f7f4a311b0ec1d89613e80847e69b42._comment create mode 100644 doc/forum/git_pull_remote_git-annex/comment_3_1aa89725b5196e40a16edeeb5ccfa371._comment create mode 100644 doc/forum/git_pull_remote_git-annex/comment_4_646f2077edcabc000a7d9cb75a93cf55._comment create mode 100644 doc/forum/git_pull_remote_git-annex/comment_5_4f2a05ef6551806dd0ec65372f183ca4._comment create mode 100644 doc/forum/git_pull_remote_git-annex/comment_6_3925d1aa56bce9380f712e238d63080f._comment create mode 100644 doc/forum/git_pull_remote_git-annex/comment_7_24c45ee981b18bc78325c768242e635d._comment create mode 100644 doc/forum/git_pull_remote_git-annex/comment_8_7e76ee9b6520cbffaf484c9299a63ad3._comment create mode 100644 doc/forum/git_tag_missing_for_3.20111011.mdwn create mode 100644 doc/forum/git_tag_missing_for_3.20111011/comment_1_7a53bf273f3078ab3351369ef2b5f2a6._comment create mode 100644 doc/forum/git_unannex_speed.mdwn create mode 100644 doc/forum/git_unannex_speed/comment_1_10cf326248f4e89e1f75bf97d7574763._comment create mode 100644 doc/forum/glacier_-_range_retrievals_and_daily_free_retrieval_allowance.mdwn create mode 100644 doc/forum/hashing_objects_directories.mdwn create mode 100644 doc/forum/hashing_objects_directories/comment_1_c55c56076be4f54251b0b7f79f28a607._comment create mode 100644 doc/forum/hashing_objects_directories/comment_2_504c96959c779176f991f4125ea22009._comment create mode 100644 doc/forum/hashing_objects_directories/comment_3_9134bde0a13aac0b6a4e5ebabd7f22e8._comment create mode 100644 doc/forum/hashing_objects_directories/comment_4_0de9170e429cbfea66f5afa8980d45ac._comment create mode 100644 doc/forum/hashing_objects_directories/comment_5_ef6cfd49d24c180c2d0a062e5bd3a0be._comment create mode 100644 doc/forum/help_running_git-annex_on_top_of_existing_repo.mdwn create mode 100644 doc/forum/help_running_git-annex_on_top_of_existing_repo/comment_1_4cb38d71c943657c5ba0896cd70d2e64._comment create mode 100644 doc/forum/help_running_git-annex_on_top_of_existing_repo/comment_2_b5e94c10ebbed9125c7e2332f75709ca._comment create mode 100644 doc/forum/help_running_git-annex_on_top_of_existing_repo/comment_3_2b3b93bbc60fbc24d436231954d6822a._comment create mode 100644 doc/forum/help_running_git-annex_on_top_of_existing_repo/comment_4_2dfda33ffa39b92b16c8bd9005e1cefe._comment create mode 100644 doc/forum/help_running_git-annex_on_top_of_existing_repo/comment_5_96b1eb1e8e9f315c646f4686870f9b52._comment create mode 100644 doc/forum/help_running_git-annex_on_top_of_existing_repo/comment_6_e85c3fa1d17f1d6ec625b9c4f9b698c3._comment create mode 100644 doc/forum/how_to_decrypt_file_from_encrypted_special_remote__63__.mdwn create mode 100644 doc/forum/how_to_decrypt_file_from_encrypted_special_remote__63__/comment_1_d4dc451892e7a6e230bf32adb7f3f9fa._comment create mode 100644 doc/forum/how_to_decrypt_file_from_encrypted_special_remote__63__/comment_2_79340bf3c0691073a9808c5ac2da0a3d._comment create mode 100644 doc/forum/how_to_decrypt_file_from_encrypted_special_remote__63__/comment_3_6302fb6e5bb7cbddf2cfe74d98d32897._comment create mode 100644 doc/forum/how_to_decrypt_file_from_encrypted_special_remote__63__/comment_4_e3d95bc09c9fb21e8e9bbacc642aa60f._comment create mode 100644 doc/forum/how_to_decrypt_file_from_encrypted_special_remote__63__/comment_5_f2f0a1c2fb0c6323707b11e2b06aa2db._comment create mode 100644 doc/forum/how_to_decrypt_file_from_encrypted_special_remote__63__/comment_6_66fe80e634a8f13cce18fe68974ec67a._comment create mode 100644 doc/forum/how_to_remove_files_and_symlinks_but_keep_historical_file_contents.mdwn create mode 100644 doc/forum/how_to_remove_files_and_symlinks_but_keep_historical_file_contents/comment_1_cba76311e146dabb8ffc789bf4c8b714._comment create mode 100644 doc/forum/how_to_remove_files_and_symlinks_but_keep_historical_file_contents/comment_2_8d99c50fc1347367ccc0714e8d1af385._comment create mode 100644 doc/forum/how_to_remove_files_and_symlinks_but_keep_historical_file_contents/comment_3_a7a9c55c2ad448179dff5d5b69976c7d._comment create mode 100644 doc/forum/howto_update_feed.mdwn create mode 100644 doc/forum/howto_update_feed/comment_1_bec356619f370a618f19a187d09d2e35._comment create mode 100644 doc/forum/howto_update_feed/comment_2_84dfb80ba3db8d41164eb97022becae3._comment create mode 100644 doc/forum/howto_update_feed/comment_3_20166db298c10074e062aecad59ffd71._comment create mode 100644 doc/forum/howto_update_feed/comment_4_f040e31b763fc9a7aa092442b4d6b8e8._comment create mode 100644 doc/forum/incompatible_versions__63__.mdwn create mode 100644 doc/forum/incompatible_versions__63__/comment_1_629f28258746d413e452cbd42a1a43f4._comment create mode 100644 doc/forum/known_and_local_annex_keys.mdwn create mode 100644 doc/forum/known_and_local_annex_keys/comment_1_3cb4828dc7116e4cf49e119f055ae9a3._comment create mode 100644 doc/forum/known_and_local_annex_keys/comment_2_68f20c881eafe986694bde10571cf1c0._comment create mode 100644 doc/forum/known_and_local_annex_keys/comment_3_e195a7091a06ce0427bb28aca9a17d04._comment create mode 100644 doc/forum/known_and_local_annex_keys/comment_4_d81f0bf7465832cb676fd89f5d53ec18._comment create mode 100644 doc/forum/linux_standalone_tarballs.mdwn create mode 100644 doc/forum/linux_standalone_tarballs/comment_1_5c3ceb845a45e50784f7098bfbf94df1._comment create mode 100644 doc/forum/location_tracking_cleanup.mdwn create mode 100644 doc/forum/location_tracking_cleanup/comment_1_7d6319e8c94dfe998af9cfcbf170efb2._comment create mode 100644 doc/forum/location_tracking_cleanup/comment_2_e7395cb6e01f42da72adf71ea3ebcde4._comment create mode 100644 doc/forum/location_tracking_cleanup/comment_3_c15428cec90e969284a5e690fb4b2fde._comment create mode 100644 doc/forum/lost_in_walkthrough....txt create mode 100644 doc/forum/lost_in_walkthrough.../comment_1_51b703b961ca762f0359e1c169f1ee75._comment create mode 100644 doc/forum/lost_in_walkthrough.../comment_2_a9de0401a103bdd4401ba2d5983dc54a._comment create mode 100644 doc/forum/making_good_use_of_my_shiny_new_rsync.net_account.mdwn create mode 100644 doc/forum/making_good_use_of_my_shiny_new_rsync.net_account/comment_1_0ebe509b768d46081db2100f5b712ef7._comment create mode 100644 doc/forum/making_good_use_of_my_shiny_new_rsync.net_account/comment_2_ef63d893531d93d2eb09f48f8baff4dd._comment create mode 100644 doc/forum/man_pages_in_the_prebuilt_linux_tarball.mdwn create mode 100644 doc/forum/man_pages_in_the_prebuilt_linux_tarball/comment_1_a7bc2e84e6d7c0e2de5900685207af78._comment create mode 100644 doc/forum/managing_multiple_repositories.mdwn create mode 100644 doc/forum/manual_update_of_.git__47__annex__47__objects.txt create mode 100644 doc/forum/manual_update_of_.git__47__annex__47__objects/comment_1_ea6ec91150c8962e2711631f2422bf3a._comment create mode 100644 doc/forum/many_remotes.mdwn create mode 100644 doc/forum/migrate_existing_git_repository_to_git-annex.mdwn create mode 100644 doc/forum/migrate_existing_git_repository_to_git-annex/comment_1_4181bf34c71e2e8845e6e5fb55d53381._comment create mode 100644 doc/forum/migrate_existing_git_repository_to_git-annex/comment_2_5f08da5e21c0b3b5a8d1e4408c0d6405._comment create mode 100644 doc/forum/migrate_existing_git_repository_to_git-annex/comment_3_f483038c006cf7dcccf1014fa771744f._comment create mode 100644 doc/forum/migration_to_git-annex_and_rsync.mdwn create mode 100644 doc/forum/mistakenly_checked___42__files__42___into_an_annex.__bummer..mdwn create mode 100644 doc/forum/mistakenly_checked___42__files__42___into_an_annex.__bummer./comment_1_752db25abb647804a1cc12c5b247378a._comment create mode 100644 doc/forum/mistakenly_checked___42__files__42___into_an_annex.__bummer./comment_2_db6f4959c35732f72e7a90bd9f4c665c._comment create mode 100644 doc/forum/multiple_routes_to_same_repository.mdwn create mode 100644 doc/forum/multiple_routes_to_same_repository/comment_1_26c1734d41d5374f18fc688d862d6b8e._comment create mode 100644 doc/forum/multiple_routes_to_same_repository/comment_2_d119ab485fb2d5512c15372efdb2327d._comment create mode 100644 doc/forum/multiple_sym_links___40__for_tagging_photos__41____63__.mdwn create mode 100644 doc/forum/multiple_sym_links___40__for_tagging_photos__41____63__/comment_1_96beb9ea895c80285748adb940b4f57d._comment create mode 100644 doc/forum/multiple_sym_links___40__for_tagging_photos__41____63__/comment_2_985065c1feed9300631dac7a2701f669._comment create mode 100644 doc/forum/multiple_urls_for_the_same_UUID.mdwn create mode 100644 doc/forum/multiple_urls_for_the_same_UUID/comment_1_de7410d8824a864c4d106c9f1afaec3f._comment create mode 100644 doc/forum/multiple_urls_for_the_same_UUID/comment_2_309a86cf7e08448be64357a30d8b56ae._comment create mode 100644 doc/forum/multiple_urls_for_the_same_UUID/comment_3_fa97a45fc1392935fd5e0714db999bc2._comment create mode 100644 doc/forum/multiple_urls_for_the_same_UUID/comment_4_139178b1ba45b62eec0c89a660c0c81e._comment create mode 100644 doc/forum/new_microfeatures.mdwn create mode 100644 doc/forum/new_microfeatures/comment_1_058bd517c6fffaf3446b1f5d5be63623._comment create mode 100644 doc/forum/new_microfeatures/comment_2_41ad904c68e89c85e1fc49c9e9106969._comment create mode 100644 doc/forum/new_microfeatures/comment_3_a1a9347b5bc517f2a89a8b292c3f8517._comment create mode 100644 doc/forum/new_microfeatures/comment_4_5a6786dc52382fff5cc42fdb05770196._comment create mode 100644 doc/forum/new_microfeatures/comment_5_3c627d275586ff499d928a8f8136babf._comment create mode 100644 doc/forum/new_microfeatures/comment_6_31ea08c008500560c0b96c6601bc6362._comment create mode 100644 doc/forum/new_microfeatures/comment_7_94045b9078b1fff877933b012d1b49e2._comment create mode 100644 doc/forum/nntp__47__usenet_special_remote.mdwn create mode 100644 doc/forum/nntp__47__usenet_special_remote/comment_1_171a0b95b1f95cfd82073e88bdefaab9._comment create mode 100644 doc/forum/nntp__47__usenet_special_remote/comment_2_48736ed17c98ffcfb13ec00b901b2dd6._comment create mode 100644 doc/forum/non-bare_repo_on_cloud_remote.mdwn create mode 100644 doc/forum/non-bare_repo_on_cloud_remote/comment_1_da0c023af7c78f1ef1cfe1143a900a9f._comment create mode 100644 doc/forum/non-bare_repo_on_cloud_remote/comment_2_71baea93f6caaf7b81a9ac00bee91e5e._comment create mode 100644 doc/forum/not_getting_file_contents.mdwn create mode 100644 doc/forum/not_getting_file_contents/comment_1_4a0f7f4de9c9bc4d13db033cb75d20af._comment create mode 100644 doc/forum/not_getting_file_contents/comment_2_dc7403e1b551552f9fd00da6a1453570._comment create mode 100644 doc/forum/one_annex_versus_many_annexes__63__.mdwn create mode 100644 doc/forum/one_or_many_annexes__63__.mdwn create mode 100644 doc/forum/one_or_many_annexes__63__/comment_1_656d96011801d67a45b0b3bb3d70fa63._comment create mode 100644 doc/forum/performance_and_multiple_replication_problems.mdwn create mode 100644 doc/forum/performance_and_multiple_replication_problems/comment_1_a2cdf1a4840f099f6bc941fd8de966c7._comment create mode 100644 doc/forum/performance_and_multiple_replication_problems/comment_2_e65b360706c66ede6e0e841b2ebbbfbc._comment create mode 100644 doc/forum/performance_improvement:_git_on_ssd__44___annex_on_spindle_disk.mdwn create mode 100644 doc/forum/performance_improvement:_git_on_ssd__44___annex_on_spindle_disk/comment_1_b3f22f9be02bc4f2d5a121db3d753ff5._comment create mode 100644 doc/forum/performance_improvement:_git_on_ssd__44___annex_on_spindle_disk/comment_2_f94abce32ef818176b42a3cc860691ae._comment create mode 100644 doc/forum/performance_improvement:_git_on_ssd__44___annex_on_spindle_disk/comment_3_0c8e77fe248e00bd990d568623e5a5c9._comment create mode 100644 doc/forum/performance_improvement:_git_on_ssd__44___annex_on_spindle_disk/comment_4_4b7e8f9521d61900d9ad418e74808ffb._comment create mode 100644 doc/forum/performance_improvement:_git_on_ssd__44___annex_on_spindle_disk/comment_5_7abbbe7db3988a2d239d11b0a4c597e7._comment create mode 100644 doc/forum/performance_improvement:_git_on_ssd__44___annex_on_spindle_disk/comment_6_46bd45fdc25d9c583f4ebe3a9730ab9f._comment create mode 100644 doc/forum/post-copy__47__sync_hook.mdwn create mode 100644 doc/forum/post-copy__47__sync_hook/comment_1_c8322d4b9bbf5eac80b48c312a42fbcf._comment create mode 100644 doc/forum/preferred_content.mdwn create mode 100644 doc/forum/preferred_content/comment_1_9c9e5f2ee5ae4d8459358ad16f879ef1._comment create mode 100644 doc/forum/preferred_content_settings_for_multiple_symlinks.mdwn create mode 100644 doc/forum/preferred_content_settings_for_multiple_symlinks/comment_1_70da012d96ab576151fe3e081ef905d1._comment create mode 100644 doc/forum/preferred_content_settings_for_multiple_symlinks/comment_2_ccea74d8b5a4de1f3cd1f6da6694ae0e._comment create mode 100644 doc/forum/preferred_content_settings_for_multiple_symlinks/comment_3_fab70c642d5aaf26de05270860281030._comment create mode 100644 doc/forum/preferred_content_settings_for_multiple_symlinks/comment_4_3cbd06de53b6a13e2741124a8e7b5b5b._comment create mode 100644 doc/forum/preferred_content_settings_for_multiple_symlinks/comment_5_963558ab261d8a6315402d371e8348f9._comment create mode 100644 doc/forum/public-web-frontend.mdwn create mode 100644 doc/forum/public-web-frontend/comment_1_c73bd2dfe020c25eaad1c0707dd2db01._comment create mode 100644 doc/forum/public-web-frontend/comment_2_0026d7be6b17e50d86b3b54985882f80._comment create mode 100644 doc/forum/pulling_from_encrypted_remote.mdwn create mode 100644 doc/forum/pulling_from_encrypted_remote/comment_1_e9d6a9a6e01d01edb41a11b0da11d74d._comment create mode 100644 doc/forum/pulling_from_encrypted_remote/comment_2_8d0db2ff65ce935c6e68044a3e0721a8._comment create mode 100644 doc/forum/pure_git-annex_only_workflow.mdwn create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_10_683768c9826b0bf0f267e8734b9eb872._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_11_6b541ed834ef45606f3b98779a25a148._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_12_ca8ca35d6cd4a9f94568536736c12adc._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_13_00c82d320c7b4bb51078beba17e14dc8._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_14_b63568b327215ef8f646a39d760fdfc0._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_15_cb7c856d8141b2de3cc95874753f1ee5._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_1_a32f7efd18d174845099a4ed59e6feae._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_2_66dc9b65523a9912411db03c039ba848._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_3_9b7d89da52f7ebb7801f9ec8545c3aba._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_4_dc8a3f75533906ad3756fcc47f7e96bb._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_5_afe5035a6b35ed2c7e193fb69cc182e2._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_6_3660d45c5656f68924acbd23790024ee._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_7_33db51096f568c65b22b4be0b5538c0d._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_8_6e5b42fdb7801daadc0b3046cbc3d51e._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_9_ace319652f9c7546883b5152ddc82591._comment create mode 100644 doc/forum/purge_files_with_no_copies.mdwn create mode 100644 doc/forum/purge_files_with_no_copies/comment_1_12b578689eb8d5d38c06261ec65e2109._comment create mode 100644 doc/forum/question_about_assistant_and___47__archive__47__.mdwn create mode 100644 doc/forum/question_about_assistant_and___47__archive__47__/comment_1_97890e26072af9277144651e3fdcada0._comment create mode 100644 doc/forum/question_about_assistant_and___47__archive__47__/comment_2_542bf265e35a976ac76767762d67d617._comment create mode 100644 doc/forum/question_about_assistant_and___47__archive__47__/comment_3_bafe99159df2adcd5fecc0d67bbf05a5._comment create mode 100644 doc/forum/question_about_assistant_and___47__archive__47__/comment_4_e77fa2992d9302a49a05f514c81612ca._comment create mode 100644 doc/forum/receiving_indirect_renames_on_direct_repo___63__.mdwn create mode 100644 doc/forum/receiving_indirect_renames_on_direct_repo___63__/comment_1_f4b0a14373c75cb752597c832e296bcc._comment create mode 100644 doc/forum/receiving_indirect_renames_on_direct_repo___63__/comment_2_8c86dfc99f0b9040402c9d746decda53._comment create mode 100644 doc/forum/receiving_indirect_renames_on_direct_repo___63__/comment_3_0246fff6c7c75f6be45bd257ec3872a5._comment create mode 100644 doc/forum/recover_deleted_files___63__.mdwn create mode 100644 doc/forum/recover_deleted_files___63__/comment_1_d7abb7c45c6ec2723a04f153ed215453._comment create mode 100644 doc/forum/recover_deleted_files___63__/comment_2_8ea2acaa30d3ee7e9f75310f4ec859b2._comment create mode 100644 doc/forum/recover_deleted_files___63__/comment_3_376de81c70799bf409be189a48234815._comment create mode 100644 doc/forum/recovering_from_repo_corruption.mdwn create mode 100644 doc/forum/recovering_from_repo_corruption/comment_1_01fc85037e24fc70e5c5329898cf6781._comment create mode 100644 doc/forum/recovering_from_repo_corruption/comment_2_3bd1c0bf25a0e892e711a60f53cd5298._comment create mode 100644 doc/forum/recovering_from_repo_corruption/comment_3_679dde8ca0081fc6854d6d2e8a42abdb._comment create mode 100644 doc/forum/reinstalled_os__44___cloned_annex__44___does_not_recognize_remote.mdwn create mode 100644 doc/forum/reinstalled_os__44___cloned_annex__44___does_not_recognize_remote/comment_1_c1962d757dd22f49e774afa13a9862ca._comment create mode 100644 doc/forum/reinstalled_os__44___cloned_annex__44___does_not_recognize_remote/comment_2_1f0f4a1dc89643cee81ff7199b55e747._comment create mode 100644 doc/forum/reliability__47__completeness_of_XMPP_updates.mdwn create mode 100644 doc/forum/reliability__47__completeness_of_XMPP_updates/comment_1_e0f7aa48d54fc0564f41c3a569c723b7._comment create mode 100644 doc/forum/reliability__47__completeness_of_XMPP_updates/comment_2_4e74039a673c16c0163f2cfb406dc4c3._comment create mode 100644 doc/forum/reliability__47__completeness_of_XMPP_updates/comment_3_41ade4fe72804b2f06cd4dbf405c1746._comment create mode 100644 doc/forum/relying_on_git_for_numcopies.mdwn create mode 100644 doc/forum/relying_on_git_for_numcopies/comment_1_8ad3cccd7f66f6423341d71241ba89fc._comment create mode 100644 doc/forum/relying_on_git_for_numcopies/comment_2_be6acbc26008a9cb54e7b8f498f2c2a2._comment create mode 100644 doc/forum/relying_on_git_for_numcopies/comment_3_43d8e1513eb9947f8a503f094c03f307._comment create mode 100644 doc/forum/remote_server_client_repositories_are_bare__33____63__.mdwn create mode 100644 doc/forum/remote_server_client_repositories_are_bare__33____63__/comment_1_234241460f6c75a8376b303b8dd4e882._comment create mode 100644 doc/forum/remote_server_client_repositories_are_bare__33____63__/comment_2_42dfc382d07af2a4f29c76016084f87c._comment create mode 100644 doc/forum/reserving_space_with_directory_special_remotes.mdwn create mode 100644 doc/forum/reserving_space_with_directory_special_remotes/comment_1_cd17b624704d93b51931023f69573323._comment create mode 100644 doc/forum/reserving_space_with_directory_special_remotes/comment_2_877ca1be23d1484a8a30cdaeb6630053._comment create mode 100644 doc/forum/reserving_space_with_directory_special_remotes/comment_3_65910eeaf3c6fcfd03f22c2957293232._comment create mode 100644 doc/forum/retrieving_previous_versions.mdwn create mode 100644 doc/forum/retrieving_previous_versions/comment_1_a4e83f688d4ec9177e7bf520f12ed26d._comment create mode 100644 doc/forum/rsync_over_ssh__63__.mdwn create mode 100644 doc/forum/rsync_over_ssh__63__/comment_1_ee21f32e90303e20339e0a568321bbbe._comment create mode 100644 doc/forum/rsync_over_ssh__63__/comment_2_aa690da6ecfb2b30fc5080ad76dc77b1._comment create mode 100644 doc/forum/rsync_remote_is_not_available_from_a_cloned_repo/comment_1_2e340c5a6473f165dc06cc35db38e5c0._comment create mode 100644 doc/forum/rsyncing_.git__47__annex__47__objects.mdwn create mode 100644 doc/forum/rsyncing_.git__47__annex__47__objects/comment_1_25eb9f7be5730337b9efd96dce9efd2e._comment create mode 100644 doc/forum/rsyncing_.git__47__annex__47__objects/comment_2_d7ceae666c8a1951021d3c6e6ac39a11._comment create mode 100644 doc/forum/s3_vs_ssh_Performance_Problems.mdwn create mode 100644 doc/forum/s3_vs_ssh_Performance_Problems/comment_1_65f064f09d7850abecab97007b0d30f0._comment create mode 100644 doc/forum/s3_vs_ssh_Performance_Problems/comment_2_baaf2384d9196077268e9ca9bbe3b871._comment create mode 100644 doc/forum/s3_vs_ssh_Performance_Problems/comment_3_dc44be42070c073d150c476406e9b425._comment create mode 100644 doc/forum/safely_dropping_git-annex_history.mdwn create mode 100644 doc/forum/safely_dropping_git-annex_history/comment_10_a4b93a3fbc98d9b86e942f95e0039862._comment create mode 100644 doc/forum/safely_dropping_git-annex_history/comment_11_383882fafd32f25ed22b5eb2fb3691b9._comment create mode 100644 doc/forum/safely_dropping_git-annex_history/comment_12_47794a2abf29bf4ea2763ff89d872ab4._comment create mode 100644 doc/forum/safely_dropping_git-annex_history/comment_1_4fd76d10a93fe01588fce7a621f9254d._comment create mode 100644 doc/forum/safely_dropping_git-annex_history/comment_2_10ecf3220ffcbbe94ba09da225458f18._comment create mode 100644 doc/forum/safely_dropping_git-annex_history/comment_3_e3beb8acb075faaeef6c052aecbf0a41._comment create mode 100644 doc/forum/safely_dropping_git-annex_history/comment_4_61a5fe2e7e47c60a8b237ea69404a37f._comment create mode 100644 doc/forum/safely_dropping_git-annex_history/comment_5_426d02e2f2a2ae4ec7eae02dfe4519b3._comment create mode 100644 doc/forum/safely_dropping_git-annex_history/comment_6_410a7296c2cee16d3d5bb618a5a41c1d._comment create mode 100644 doc/forum/safely_dropping_git-annex_history/comment_7_42cf492fc98a9eba8176387749ef12e0._comment create mode 100644 doc/forum/safely_dropping_git-annex_history/comment_8_c0327ada073d8b69535f71b4dc6aa57e._comment create mode 100644 doc/forum/safely_dropping_git-annex_history/comment_9_f83d6090aea2b7d5d54c876df940cbad._comment create mode 100644 doc/forum/seems_to_build_fine_on_haskell_platform_2011.mdwn create mode 100644 doc/forum/shared_cipher_tries_to_use_gpg.mdwn create mode 100644 doc/forum/shared_cipher_tries_to_use_gpg/comment_1_760961eaaa7d5c254dd71c5792437c9e._comment create mode 100644 doc/forum/shared_cipher_tries_to_use_gpg/comment_2_f3260aea3a5bb9b95a9bdf1d0dfce090._comment create mode 100644 doc/forum/something_really_good_happened_with_3.20130124.mdwn create mode 100644 doc/forum/something_really_good_happened_with_3.20130124/comment_1_1712bddd2f483a353f6313aa626445f1._comment create mode 100644 doc/forum/sparse_git_checkouts_with_annex.mdwn create mode 100644 doc/forum/sparse_git_checkouts_with_annex/comment_1_c7dc199c5740a0e7ba606dfb5e3e579a._comment create mode 100644 doc/forum/sparse_git_checkouts_with_annex/comment_2_e357db3ccc4079f07a291843975535eb._comment create mode 100644 doc/forum/sparse_git_checkouts_with_annex/comment_3_fcfafca994194d57dccf5319c7c9e646._comment create mode 100644 doc/forum/sparse_git_checkouts_with_annex/comment_4_04dc14880f31eee2b6d767d4d4258c5a._comment create mode 100644 doc/forum/special_remote_for_IMAP.mdwn create mode 100644 doc/forum/special_remote_for_IMAP/comment_1_7c7d4b57a1b6508fff1a6b0508c861f8._comment create mode 100644 doc/forum/special_remote_for_IMAP/comment_2_9c46fe8a857aa7a5ce797288144386bd._comment create mode 100644 doc/forum/special_remote_for_IMAP/comment_3_27e3b644df6942ce4c103236d0d5cb1b._comment create mode 100644 doc/forum/special_remote_for_iPods.mdwn create mode 100644 doc/forum/special_remote_for_iPods/comment_1_37cc3dc740341cc663074fd3bfb85947._comment create mode 100644 doc/forum/speed_up_assistant_startup_on_large_repositories.mdwn create mode 100644 doc/forum/speed_up_assistant_startup_on_large_repositories/comment_1_5ba637a0f6d01ba24fe25e6265134e0a._comment create mode 100644 doc/forum/speed_up_assistant_startup_on_large_repositories/comment_2_d65746697977f8971a4b59f5b413f926._comment create mode 100644 doc/forum/speed_up_assistant_startup_on_large_repositories/comment_3_be6c4fe5a0c745688438b716973791cc._comment create mode 100644 doc/forum/speed_up_assistant_startup_on_large_repositories/comment_4_a07472338a08c068a9b88b2176fc2bee._comment create mode 100644 doc/forum/ssh_password.mdwn create mode 100644 doc/forum/ssh_password/comment_1_a3e5a41e1d4da683d577976b134b11ee._comment create mode 100644 doc/forum/ssh_password/comment_2_fa261676a99d49d4b237b0d43048d76d._comment create mode 100644 doc/forum/ssh_remote_-_no___34__use_a_git_repository__34___option_during_setup__63__.mdwn create mode 100644 doc/forum/ssh_remote_-_no___34__use_a_git_repository__34___option_during_setup__63__/comment_1_7244794579a191a677190c60758f32e7._comment create mode 100644 doc/forum/ssh_remote_-_no___34__use_a_git_repository__34___option_during_setup__63__/comment_2_277cf12907bd7c5930eb4f137b115e29._comment create mode 100644 doc/forum/start_assistant_from_command_line.mdwn create mode 100644 doc/forum/start_assistant_from_command_line/comment_1_f8dfce1fca9f1212ccaf84e431db71a9._comment create mode 100644 doc/forum/start_assistant_from_command_line/comment_2_e769c5d09afbff85961363ddc5eb4019._comment create mode 100644 doc/forum/switching_backends.mdwn create mode 100644 doc/forum/switching_backends/comment_1_ecf4109c1148dafde3519243ae3c5a03._comment create mode 100644 doc/forum/switching_backends/comment_2_21f465a18f40b95dafd307fce0de659a._comment create mode 100644 doc/forum/switching_backends/comment_4_4c13d22c1695195e6b101bd20ef6bb42._comment create mode 100644 doc/forum/switching_backends/comment_4_e1d4a48baac23fd3f67b20eba4eee8af._comment create mode 100644 doc/forum/switching_to__47__from_direct_mode_while_assistant_is_running.mdwn create mode 100644 doc/forum/switching_to__47__from_direct_mode_while_assistant_is_running/comment_1_7832243a36613c48d0077b438dbf8b4a._comment create mode 100644 doc/forum/syncing_home_directories.mdwn create mode 100644 doc/forum/syncing_home_directories/comment_1_220a6e0ffe0ea610921a63c0a6e3beab._comment create mode 100644 doc/forum/syncing_non-git_trees_with_git-annex.mdwn create mode 100644 doc/forum/syncing_non-git_trees_with_git-annex/comment_1_7f9593bdfd95e4a8814e6cc5c44619e6._comment create mode 100644 doc/forum/syncing_non-git_trees_with_git-annex/comment_2_49f15478781a0ad5e46e75319070335c._comment create mode 100644 doc/forum/syncing_non-git_trees_with_git-annex/comment_3_6d8f399f0549eddd1d1f5c9c9a10c654._comment create mode 100644 doc/forum/taskwarrior.mdwn create mode 100644 doc/forum/taskwarrior/comment_1_1c3a29e7d292cb602d9d349f8009b51e._comment create mode 100644 doc/forum/tell_us_how_you__39__re_using_git-annex.mdwn create mode 100644 doc/forum/tell_us_how_you__39__re_using_git-annex/comment_1_4884803ddee7f642a3ac995a19967a6a._comment create mode 100644 doc/forum/tell_us_how_you__39__re_using_git-annex/comment_2_61f5054918e7b36c191454365bc7f3b7._comment create mode 100644 doc/forum/tell_us_how_you__39__re_using_git-annex/comment_3_db07e8703be606c998c831e91d300d69._comment create mode 100644 doc/forum/tell_us_how_you__39__re_using_git-annex/comment_4_a58595969cdd42ed20210e9615b42e42._comment create mode 100644 doc/forum/tips:_special__95__remotes__47__hook_with_tahoe-lafs.mdwn create mode 100644 doc/forum/tips:_special__95__remotes__47__hook_with_tahoe-lafs/comment_1_76bb33ce45ce6a91b86454147463193b._comment create mode 100644 doc/forum/tips:_special__95__remotes__47__hook_with_tahoe-lafs/comment_2_4d9b9d47d01d606a475678f630797bf9._comment create mode 100644 doc/forum/tips:_special__95__remotes__47__hook_with_tahoe-lafs/comment_3_8a812b11fcc2dc3b6fcf01cdbbb8459d._comment create mode 100644 doc/forum/tips:_special__95__remotes__47__hook_with_tahoe-lafs/comment_4_fc98c819bc5eb4d7c9e74d87fb4f6f3b._comment create mode 100644 doc/forum/tips:_special__95__remotes__47__hook_with_tahoe-lafs/comment_5_c459fb479fe7b13eaea2377cfc1923a6._comment create mode 100644 doc/forum/tips:_special__95__remotes__47__hook_with_tahoe-lafs/comment_6_2e9da5a919bbbc27b32de3b243867d4f._comment create mode 100644 doc/forum/tips:_special__95__remotes__47__hook_with_tahoe-lafs/comment_7_d636c868524b2055ee85832527437f90._comment create mode 100644 doc/forum/tips:_special__95__remotes__47__hook_with_tahoe-lafs/comment_8_39dc449cc60a787c3bfbfaaac6f9be0c._comment create mode 100644 doc/forum/ui.mdwn create mode 100644 doc/forum/ui/comment_1_f3e3446b05d6b573e29e6cad300fb635._comment create mode 100644 doc/forum/ui/comment_2_b493ee97eb2378e72c12f3d137109580._comment create mode 100644 doc/forum/unannex_alternatives.mdwn create mode 100644 doc/forum/unannex_alternatives/comment_1_dcd4cd41280b41512bbdffafaf307993._comment create mode 100644 doc/forum/unannex_alternatives/comment_2_58a72a9fe0f58c7af0b4d7927a2dd21d._comment create mode 100644 doc/forum/unannex_alternatives/comment_3_b1687fc8f9e7744327bbeb6f0635d1cd._comment create mode 100644 doc/forum/unknown_response_from_git_cat-file.mdwn create mode 100644 doc/forum/unknown_response_from_git_cat-file/comment_1_f26ba569e715fe69b6de3093930362ee._comment create mode 100644 doc/forum/unlock__47__lock_always_gets_me.mdwn create mode 100644 doc/forum/unlock__47__lock_always_gets_me/comment_1_dee73a7ea3e1a5154601adb59782831f._comment create mode 100644 doc/forum/unlock__47__lock_always_gets_me/comment_2_f89b4349dde840c355a3bc28908decdf._comment create mode 100644 doc/forum/unsynced_folder.mdwn create mode 100644 doc/forum/updating_the___34__number_of_copies__34__.mdwn create mode 100644 doc/forum/updating_the___34__number_of_copies__34__/comment_1_327bdb0d9c190c60c7147b3acf07af09._comment create mode 100644 doc/forum/updating_the___34__number_of_copies__34__/comment_2_7e11c839637e0894332e413cde02cee9._comment create mode 100644 doc/forum/updating_the___34__number_of_copies__34__/comment_3_8b7a70fb3bb41e4eda412302834730bb._comment create mode 100644 doc/forum/use_existing_ssh_keys__63__.mdwn create mode 100644 doc/forum/use_existing_ssh_keys__63__/comment_1_c420c53f022bbd1b28494bc44d076feb._comment create mode 100644 doc/forum/use_existing_ssh_keys__63__/comment_2_e4cae848e5701852073ced307832872b._comment create mode 100644 doc/forum/use_existing_ssh_keys__63__/comment_3_a97c20b6df74c49e5f57c7caf962f1e2._comment create mode 100644 doc/forum/using_git_annex_to_merge_and_synchronize_2_directories___40__like_unison__41__.mdwn create mode 100644 doc/forum/using_git_annex_to_merge_and_synchronize_2_directories___40__like_unison__41__/comment_1_5c3ee8a8aaa6d0918c0cc9683ce177ae._comment create mode 100644 doc/forum/using_git_annex_to_merge_and_synchronize_2_directories___40__like_unison__41__/comment_2_648946353c6d90c57351cce4010f1301._comment create mode 100644 doc/forum/version_3_upgrade.mdwn create mode 100644 doc/forum/version_3_upgrade/comment_1_05fc9c9cad26c520bebb98c852c71e35._comment create mode 100644 doc/forum/vlc_and_git-annex.mdwn create mode 100644 doc/forum/vlc_and_git-annex/comment_1_9c9ab8ce463cf74418aa2f385955f165._comment create mode 100644 doc/forum/vlc_and_git-annex/comment_2_037f94c1deeac873dbdb36cd4c927e45._comment create mode 100644 doc/forum/webapp___47___assistant_without_watch.mdwn create mode 100644 doc/forum/webapp___47___assistant_without_watch/comment_1_1bcd99aa81f937ded683e19a69d33dd9._comment create mode 100644 doc/forum/webapp___47___assistant_without_watch/comment_2_9f5b3f5bf7fedcd5baec519d97d3aa8c._comment create mode 100644 doc/forum/webapp_and_manual_mode.mdwn create mode 100644 doc/forum/webapp_and_manual_mode/comment_1_5b5df5ffeb6ee15779972f13fdc11729._comment create mode 100644 doc/forum/webapp_and_manual_mode/comment_2_a1f06b50d1317c78a301b47eb05d2617._comment create mode 100644 doc/forum/webapp_listen_port_with_autostart.mdwn create mode 100644 doc/forum/webapp_listen_port_with_autostart/comment_1_65dbcf3d8f6c16568f5a326242eab9c5._comment create mode 100644 doc/forum/webapp_listen_port_with_autostart/comment_2_39664f833dedc1a4fe083eec9bc4a7cd._comment create mode 100644 doc/forum/windows_port__63__.mdwn create mode 100644 doc/forum/windows_port__63__/comment_1_23fa9aa3b00940a1c1b3876c35eef019._comment create mode 100644 doc/forum/wishlist:_get__47__drop_via_webapp_file_explorer.mdwn create mode 100644 doc/forum/wishlist:_get__47__drop_via_webapp_file_explorer/comment_1_c818a6d44dc13a56460b1865f70eb97c._comment create mode 100644 doc/forum/wishlist:_make_copy_stop_on_exhausted_disk_space.mdwn create mode 100644 doc/forum/wishlist:_make_copy_stop_on_exhausted_disk_space/comment_1_467e5e3db3e836030bc4b4f15846951f._comment create mode 100644 doc/forum/wishlist:_make_copy_stop_on_exhausted_disk_space/comment_2_e3ca3db9bea11d3e085ee9c3c56b33fe._comment create mode 100644 doc/forum/wishlist:_make_copy_stop_on_exhausted_disk_space/comment_3_0ef8c37350fc192d9b784fbab1d9f318._comment create mode 100644 doc/forum/working_without_git-annex_commits.mdwn create mode 100644 doc/future_proofing.mdwn create mode 100644 doc/git-annex-shell.mdwn create mode 100644 doc/git-annex.mdwn create mode 100644 doc/git-union-merge.mdwn create mode 100644 doc/how_it_works.mdwn create mode 100644 doc/how_it_works/comment_1_b3bdd6a06d5764db521ae54878131f5f._comment create mode 100644 doc/ikiwiki/pagespec.mdwn create mode 100644 doc/index.mdwn create mode 100644 doc/install.mdwn create mode 100644 doc/install/Android.mdwn create mode 100644 doc/install/Android/comment_10_225f2c6fe255be93702cfbd4dc172f3b._comment create mode 100644 doc/install/Android/comment_11_4e970633d9073fcf4bc33f3fff2525b2._comment create mode 100644 doc/install/Android/comment_12_87da4f379a0276b662583e7e22061218._comment create mode 100644 doc/install/Android/comment_1_f9ced494a530e6ae3e76cfbaddb89f5d._comment create mode 100644 doc/install/Android/comment_2_74cccae04ea23a8600069c7e658143aa._comment create mode 100644 doc/install/Android/comment_3_82c7cb31d19d4e18ca5548da5ca19a79._comment create mode 100644 doc/install/Android/comment_4_cebaa8ee5bbed27d9b2d032ca7bdec6e._comment create mode 100644 doc/install/Android/comment_8_34f7c42050fa48769a6bfae60d72e477._comment create mode 100644 doc/install/Android/comment_9_f3d289b78d6bdb3cc65689495a8439a5._comment create mode 100644 doc/install/ArchLinux.mdwn create mode 100644 doc/install/ArchLinux/comment_1_da5919c986d2ae187bc2f73de9633978._comment create mode 100644 doc/install/ArchLinux/comment_2_e5f923e6d81cfb3fba7a72f60baaf4ab._comment create mode 100644 doc/install/ArchLinux/comment_3_8e607cd883ec174571e9dfe3b25bfd05._comment create mode 100644 doc/install/ArchLinux/comment_4_a378391dd218859f381c479259dd8fe3._comment create mode 100644 doc/install/Debian.mdwn create mode 100644 doc/install/Debian/comment_10_d5da996e106d2e4d8a822aa9bcc78596._comment create mode 100644 doc/install/Debian/comment_11_84283676da247c401bc9b4bb12c2b453._comment create mode 100644 doc/install/Debian/comment_12_0aca83b055d0a9dd8589c50250a8bbea._comment create mode 100644 doc/install/Debian/comment_13_167a091764e5e99ec0f35a65e95a22de._comment create mode 100644 doc/install/Debian/comment_14_a34e23d9aa3027012ab1236aa4f7d5cb._comment create mode 100644 doc/install/Debian/comment_15_20d8271ba3f6cfe3c8849c3d41607630._comment create mode 100644 doc/install/Debian/comment_1_029486088d098c2d4f1099f2f0e701a9._comment create mode 100644 doc/install/Debian/comment_2_648e3467e260cdf233acdb0b53313ce0._comment create mode 100644 doc/install/Debian/comment_3_4d922e11249627634ecc35bba4044d9e._comment create mode 100644 doc/install/Debian/comment_4_2a93ab18b05ccb90e7acc5885866fca2._comment create mode 100644 doc/install/Debian/comment_5_38e6399083e10a6a274f35bddc15d4ac._comment create mode 100644 doc/install/Debian/comment_6_2e7bbdbaabbfb9d89de22e913066e822._comment create mode 100644 doc/install/Debian/comment_7_1bccc7bf7a4ef61a9b30024b9b22ba7d._comment create mode 100644 doc/install/Debian/comment_8_5b5a3b0e8abe8831a6a15a4e258d14fd._comment create mode 100644 doc/install/Debian/comment_9_97eaed998ffd1ed79585075ed5cff06e._comment create mode 100644 doc/install/Fedora.mdwn create mode 100644 doc/install/Fedora/comment_1_c4db84e672ad4b45b522db735706b00f._comment create mode 100644 doc/install/Fedora/comment_2_f98c488c09bef86e2b0414589ce9e141._comment create mode 100644 doc/install/Fedora/comment_3_d872acf8865fe7c99a9b712db5b38ea4._comment create mode 100644 doc/install/Fedora/comment_4_93b3402e4c51e1a5c96f907bb528164b._comment create mode 100644 doc/install/Fedora/comment_5_0427e0503764b29e57abf9e97155136b._comment create mode 100644 doc/install/Fedora/comment_6_1b1b38a79251fe2e8c1e4debbe3bc3c5._comment create mode 100644 doc/install/FreeBSD.mdwn create mode 100644 doc/install/Gentoo.mdwn create mode 100644 doc/install/Linux_standalone.mdwn create mode 100644 doc/install/NixOS.mdwn create mode 100644 doc/install/OSX.mdwn create mode 100644 doc/install/OSX/comment_10_cd2120552ef894a37933b328136fa4cc._comment create mode 100644 doc/install/OSX/comment_11_740fa80e2e54e6fb570f820ff1f56440._comment create mode 100644 doc/install/OSX/comment_12_a84028080578a8b60115b6c4ef823627._comment create mode 100644 doc/install/OSX/comment_13_d6f1db401858ffea23c123db49f5b296._comment create mode 100644 doc/install/OSX/comment_14_035f856923276b0edad879e196e94097._comment create mode 100644 doc/install/OSX/comment_15_336e0acb00e84943715e69917643a69e._comment create mode 100644 doc/install/OSX/comment_16_1befafa862b7d07b1f6e57c0182497cf._comment create mode 100644 doc/install/OSX/comment_17_19c08b2c6c2c5cd88bf96d2bcbbd9055._comment create mode 100644 doc/install/OSX/comment_18_537fad5d8854e765499d47602d1ab398._comment create mode 100644 doc/install/OSX/comment_19_18d4377f4ded5604d395d73783ba82c9._comment create mode 100644 doc/install/OSX/comment_20_3e6a3c00444badf2cf7a9ee3d54af11e._comment create mode 100644 doc/install/OSX/comment_21_987f1302f56107c926b6daf83e124654._comment create mode 100644 doc/install/OSX/comment_22_6b5f44a98f9d37a1c6ecfe19a60fe6c5._comment create mode 100644 doc/install/OSX/comment_23_3d82a270dd4b0159f4aab5675166e1e3._comment create mode 100644 doc/install/OSX/comment_24_b9d3563a2cc3d769f27876e028dc344d._comment create mode 100644 doc/install/OSX/comment_25_db90984062a07576a4777b2d743161f1._comment create mode 100644 doc/install/OSX/comment_27_2a60108a440231ba83f5a54b6bcc5488._comment create mode 100644 doc/install/OSX/comment_27_d453510b9bb62072a4c663206c12c8a4._comment create mode 100644 doc/install/OSX/comment_28_0970bfd63137ea48701dff6aea1b4bcb._comment create mode 100644 doc/install/OSX/comment_29_8622ed56c6a8034c20fb311418d94003._comment create mode 100644 doc/install/OSX/comment_2_25552ff2942048fafe97d653757f1ad6._comment create mode 100644 doc/install/OSX/comment_30_ce58633ef5b2f8f4caa7e626358f33be._comment create mode 100644 doc/install/OSX/comment_31_09084a7b3cf06bfa3add0f4991476ffe._comment create mode 100644 doc/install/OSX/comment_32_a46d8e3e7795b9afb1e1c2be943d12af._comment create mode 100644 doc/install/OSX/comment_33_203a36322b3c453c05c8906c64e62e06._comment create mode 100644 doc/install/OSX/comment_34_c9362141d15a2f68a75df9f8bfe29da0._comment create mode 100644 doc/install/OSX/comment_35_8106196c3fef70652cb2106e2d5857db._comment create mode 100644 doc/install/OSX/comment_3_47a77a03040fe628109bd54f82f9ad7a._comment create mode 100644 doc/install/OSX/comment_4_25cac8bcd84a5210fc0a5243260b8cc7._comment create mode 100644 doc/install/OSX/comment_4_bbe99673033e4c48c8bb3db24ee419f9._comment create mode 100644 doc/install/OSX/comment_5_39b4b748b4586bf32b37edfefef84bba._comment create mode 100644 doc/install/OSX/comment_6_1a9c91ef43edc4148947f202ff604114._comment create mode 100644 doc/install/OSX/comment_7_892f7e65f95f43697164267c4b71c0d5._comment create mode 100644 doc/install/OSX/comment_8_38d9c2eea1090674de2361274eab5b0e._comment create mode 100644 doc/install/OSX/comment_9_35bf3812db6f3ef25da9b3bc84f147c5._comment create mode 100644 doc/install/OSX/old_comments.mdwn create mode 100644 doc/install/OSX/old_comments/comment_10_4d15bfc4fc26e7249953bebfbb09e0aa._comment create mode 100644 doc/install/OSX/old_comments/comment_10_798000aab19af2944b6e44dbc550c6fe._comment create mode 100644 doc/install/OSX/old_comments/comment_11_707a1a27a15b2de8dfc8d1a30420ab4c._comment create mode 100644 doc/install/OSX/old_comments/comment_12_60d13f2c8e008af1041bea565a392c83._comment create mode 100644 doc/install/OSX/old_comments/comment_13_a6f48c87c2d6eabe379d6e10a6cac453._comment create mode 100644 doc/install/OSX/old_comments/comment_14_6ef2ddb7b11ce6ad54578ae118ed346e._comment create mode 100644 doc/install/OSX/old_comments/comment_15_6fd1fad5b6d9f36620e5a0e99edd2f89._comment create mode 100644 doc/install/OSX/old_comments/comment_16_af6fe3540032cdf4400478de87771058._comment create mode 100644 doc/install/OSX/old_comments/comment_17_8d3a0596db67108041728b20f2790f31._comment create mode 100644 doc/install/OSX/old_comments/comment_1_0a1760bf0db1f1ba89bdb4c62032f631._comment create mode 100644 doc/install/OSX/old_comments/comment_2_0327c64b15249596add635d26f4ce67f._comment create mode 100644 doc/install/OSX/old_comments/comment_2_7683740a98182de06cb329792e0c0a25._comment create mode 100644 doc/install/OSX/old_comments/comment_3_47c682a779812dda77601c24a619923c._comment create mode 100644 doc/install/OSX/old_comments/comment_3_733147cebe501c60f2141b711f1d7f24._comment create mode 100644 doc/install/OSX/old_comments/comment_3_b090f40fe5a32e00b472a5ab2b850b4a._comment create mode 100644 doc/install/OSX/old_comments/comment_3_fc092412e99cf4c5f095b0ef710bc4de._comment create mode 100644 doc/install/OSX/old_comments/comment_4_d513e21512a9b207983d38abf348d00f._comment create mode 100644 doc/install/OSX/old_comments/comment_4_d68c36432c7be3f4a76f4f0d7300bac9._comment create mode 100644 doc/install/OSX/old_comments/comment_4_e6109a964064a2a799768a370e57801d._comment create mode 100644 doc/install/OSX/old_comments/comment_5_50777853f808d57b957f8ce9a0f84b3d._comment create mode 100644 doc/install/OSX/old_comments/comment_5_626a4b4bf302d4ae750174f860402f70._comment create mode 100644 doc/install/OSX/old_comments/comment_6_18a8df794aa0ddd294dbf17d3d4c7fe2._comment create mode 100644 doc/install/OSX/old_comments/comment_7_2ce7acab15403d3f993cec94ec7f3bc6._comment create mode 100644 doc/install/OSX/old_comments/comment_8_a93ad4b67c5df4243268bcf32562f6be._comment create mode 100644 doc/install/OSX/old_comments/comment_9_ae3ed5345bc84f57e44251d2e6c39342._comment create mode 100644 doc/install/OSX/old_comments/comment_9_c6b1b31d16f2144ad08abd8c767b6ab9._comment create mode 100644 doc/install/ScientificLinux5.mdwn create mode 100644 doc/install/Ubuntu.mdwn create mode 100644 doc/install/Ubuntu/comment_10_490e065314693423ab6969d8ae6978fe._comment create mode 100644 doc/install/Ubuntu/comment_11_4ebac3fb43de854ed1a3b1d2ea94011a._comment create mode 100644 doc/install/Ubuntu/comment_12_38f69dffe2db0d15e4c4e5cb47f40ef8._comment create mode 100644 doc/install/Ubuntu/comment_1_d1c511153fe94bf33e19a1281f1c92f2._comment create mode 100644 doc/install/Ubuntu/comment_2_ad13886c1c1f76d1cd995ea7b7d8471c._comment create mode 100644 doc/install/Ubuntu/comment_3_a08817322739b03cf0fec97283b16f1a._comment create mode 100644 doc/install/Ubuntu/comment_4_fe0997e56136bd30749f0995cbf19b56._comment create mode 100644 doc/install/Ubuntu/comment_5_fbb5306a162db1a1ee9efa3523aac952._comment create mode 100644 doc/install/Ubuntu/comment_6_a97e7f0e62ac685c3ded423bddeaa67f._comment create mode 100644 doc/install/Ubuntu/comment_7_921a223fd7e679b9ced3d8ba5ce688e0._comment create mode 100644 doc/install/Ubuntu/comment_8_1f943cb084fa8e21bc6ee5fc3118f02f._comment create mode 100644 doc/install/Ubuntu/comment_9_c2f8b35ada873acb1ce593b04e2899fe._comment create mode 100644 doc/install/Windows.mdwn create mode 100644 doc/install/cabal.mdwn create mode 100644 doc/install/cabal/comment_10_7ebe353b05d4df29897dc9a4f45c8a91._comment create mode 100644 doc/install/cabal/comment_11_0d06702e6e0ae3cd331cf748a9f6f273._comment create mode 100644 doc/install/cabal/comment_12_b93ca271dffca3f948645d3e1326c1d9._comment create mode 100644 doc/install/cabal/comment_13_3dac019cda71bf99878c0a1d9382323b._comment create mode 100644 doc/install/cabal/comment_14_14b46470593f84f8c3768a91cb77bdab._comment create mode 100644 doc/install/cabal/comment_15_c3a5b0aad28a90e0bb8da31a430578eb._comment create mode 100644 doc/install/cabal/comment_16_4faf214f97f9516898d7c17d743ef825._comment create mode 100644 doc/install/cabal/comment_17_2a9d6807a3a13815c824985521757167._comment create mode 100644 doc/install/cabal/comment_18_1efa0c7a963ec452fc6336fbe4964f6e._comment create mode 100644 doc/install/cabal/comment_19_6f42f9234f9ff6a2ca6bbb4d2643843e._comment create mode 100644 doc/install/cabal/comment_1_f04df6bcd50d1d01eb34868bb00ac35c._comment create mode 100644 doc/install/cabal/comment_20_0f553be2a4c666e3bed58b2bce549406._comment create mode 100644 doc/install/cabal/comment_21_f91a6ec21e96eced73ea9579fd8cbd15._comment create mode 100644 doc/install/cabal/comment_22_2f27b78215f97ade1986ca806c634cb3._comment create mode 100644 doc/install/cabal/comment_23_c34d2b1d95830a3e58671a5b566a1758._comment create mode 100644 doc/install/cabal/comment_24_40cbde8ec067b3a860e6df1a9bea5f76._comment create mode 100644 doc/install/cabal/comment_25_8a7664e6f9271718dc607a0782366c5b._comment create mode 100644 doc/install/cabal/comment_26_bd455c732639728bce2bfc39e32871d2._comment create mode 100644 doc/install/cabal/comment_27_c080e9239b6eec88d329c28da7bb4141._comment create mode 100644 doc/install/cabal/comment_28_15951dd070a675300420eea137a28ef9._comment create mode 100644 doc/install/cabal/comment_29_ac082dca67f4a29b06070c0283130f52._comment create mode 100644 doc/install/cabal/comment_2_a69d17c55e56a707ec6606d5cdddee25._comment create mode 100644 doc/install/cabal/comment_30_ad639c07cb79e89406e95c1dafce3a01._comment create mode 100644 doc/install/cabal/comment_31_4763b24a29627d55f465b9ea260ea7ec._comment create mode 100644 doc/install/cabal/comment_32_1d34c294486c85b1149675fa5861ae35._comment create mode 100644 doc/install/cabal/comment_3_55bed050bdb768543dbe1b86edec057d._comment create mode 100644 doc/install/cabal/comment_4_2ff7f8a3b03bea7e860248829d595bd1._comment create mode 100644 doc/install/cabal/comment_5_8789fc27466714faa5a3a7a6b8ec6e5d._comment create mode 100644 doc/install/cabal/comment_6_5afb2d081e8b603bc338cd460ad9317d._comment create mode 100644 doc/install/cabal/comment_7_129c4f2e404c874e5adfa52902a81104._comment create mode 100644 doc/install/cabal/comment_8_738c108f131e3aab0d720bc4fd6a81fd._comment create mode 100644 doc/install/cabal/comment_9_5ddbba419d96a7411f7edddaa4d7b739._comment create mode 100644 doc/install/fromscratch.mdwn create mode 100644 doc/install/openSUSE.mdwn create mode 100644 doc/internals.mdwn create mode 100644 doc/internals/comment_1_4b8ed353dca4f484b3b6eb463fa02fd8._comment create mode 100644 doc/internals/comment_2_c19232d5cc4976c2e5b014aef6e8d9ec._comment create mode 100644 doc/internals/hashing.mdwn create mode 100644 doc/internals/key_format.mdwn create mode 100644 doc/internals/lockdown.mdwn create mode 100644 doc/license.mdwn create mode 100644 doc/license/AGPL create mode 100644 doc/license/GPL create mode 100644 doc/license/LGPL create mode 100644 doc/links/key_concepts.mdwn create mode 100644 doc/links/other_stuff.mdwn create mode 100644 doc/links/the_details.mdwn create mode 100644 doc/location_tracking.mdwn create mode 100644 doc/logo-old-bw.svg create mode 100644 doc/logo-old.png create mode 100644 doc/logo-old.svg create mode 100644 doc/logo-old_small.png create mode 100644 doc/logo.mdwn create mode 100644 doc/logo.svg create mode 100644 doc/logo_small.png create mode 100644 doc/meta.mdwn create mode 100644 doc/news.mdwn create mode 100644 doc/news/2013_git-annex_user_survey.mdwn create mode 100644 doc/news/LWN_article.mdwn create mode 100644 doc/news/Presentation_at_FOSDEM.mdwn create mode 100644 doc/news/git_annex_fall_of_code.mdwn create mode 100644 doc/news/sharebox_a_FUSE_filesystem_for_git-annex.mdwn create mode 100644 doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_1_e238d1734238e37bb55ff952b32e06b8._comment create mode 100644 doc/news/version_4.20130827/comment_1_937cbaccf235d6d9118aacd49058bb4f._comment create mode 100644 doc/news/version_4.20130827/comment_2_faa5cf0645728b4ade850a691fa472db._comment create mode 100644 doc/news/version_4.20130827/comment_3_ad156d6199b525884114ff823d265bf7._comment create mode 100644 doc/news/version_4.20130827/comment_4_877061eb24d9d9543cc9cd229906bd64._comment create mode 100644 doc/news/version_4.20130827/comment_5_8991648dda991768e3a58477a4c3c923._comment create mode 100644 doc/news/version_4.20131024.mdwn create mode 100644 doc/news/version_4.20131101.mdwn create mode 100644 doc/news/version_4.20131106.mdwn create mode 100644 doc/news/version_5.20131118.mdwn create mode 100644 doc/news/version_5.20131120.mdwn create mode 100644 doc/not.mdwn create mode 100644 doc/not/comment_1_ab41bec1ccc884e71780cb9458439170._comment create mode 100644 doc/not/comment_2_0e19ff7deb5ed65f2bc685d4c516d816._comment create mode 100644 doc/not/comment_3_bab9584c41a25dda934ad230e3eb732d._comment create mode 100644 doc/not/comment_4_b2a0d5a45ab8ddd66c29dde9412d7a12._comment create mode 100644 doc/not/comment_5_f2829ecbe80a61aa9a8411d2403de69e._comment create mode 100644 doc/not/comment_6_547fc59b19ad66d7280c53a7f923ea08._comment create mode 100644 doc/not/comment_7_581e23cca0219711f8a4500a8d5d20fc._comment create mode 100644 doc/not/comment_8_5c61457f117de38ef487e5cc2780d554._comment create mode 100644 doc/polls.mdwn create mode 100644 doc/polls/2013.mdwn create mode 100644 doc/preferred_content.mdwn create mode 100644 doc/preferred_content/comment_10_f0bce3c67f293eaba97b92f0942876b6._comment create mode 100644 doc/preferred_content/comment_1_7d45e21dfb016e9ffa4715346dd0c1a6._comment create mode 100644 doc/preferred_content/comment_2_1ccd90b009245667ad59f4d29d2a3a37._comment create mode 100644 doc/preferred_content/comment_4_384025b5fa23a3f175985a081438149f._comment create mode 100644 doc/preferred_content/comment_4_6a9bc657bc7415f0e118357d8c6664c6._comment create mode 100644 doc/preferred_content/comment_5_f0a957e67297c4bb5a8778c11b3c9fd4._comment create mode 100644 doc/preferred_content/comment_6_b434c0e2aaa132020fd4a01551285376._comment create mode 100644 doc/preferred_content/comment_7_c4acaa237bf1a8512c5e8ea4cdbd11b9._comment create mode 100644 doc/preferred_content/comment_8_ff2a2dc9c566ebd9f570bdfcd7bfc030._comment create mode 100644 doc/preferred_content/comment_9_f82538be42428691d7cab60a7add2e74._comment create mode 100644 doc/privacy.mdwn create mode 100644 doc/related_software.mdwn create mode 100644 doc/repomap.png create mode 100644 doc/scalability.mdwn create mode 100644 doc/shortcuts.mdwn create mode 100644 doc/sidebar.mdwn create mode 100644 doc/sitemap.mdwn create mode 100644 doc/special_remotes.mdwn create mode 100644 doc/special_remotes/S3.mdwn create mode 100644 doc/special_remotes/S3/comment_10_c366f020c9b97a365e21878a33360079._comment create mode 100644 doc/special_remotes/S3/comment_11_c1da387e082d91feec13dde91ccb111a._comment create mode 100644 doc/special_remotes/S3/comment_12_59c3ecab7dbc8be53258460473cac21c._comment create mode 100644 doc/special_remotes/S3/comment_13_0789a21d980825188bb09f7fc8bba8be._comment create mode 100644 doc/special_remotes/S3/comment_14_29574a51d5831c51e2e765eb2c06e567._comment create mode 100644 doc/special_remotes/S3/comment_15_ceb9048c743135f6beca57a23505f0a3._comment create mode 100644 doc/special_remotes/S3/comment_16_7b79f8b5ef88a2775d61b5ac5774d3e0._comment create mode 100644 doc/special_remotes/S3/comment_1_4a1f7a230dad6caa84831685b236fd73._comment create mode 100644 doc/special_remotes/S3/comment_2_5b22d67de946f4d34a4a3c7449d32988._comment create mode 100644 doc/special_remotes/S3/comment_3_bcab2bd0f168954243aa9bcc9671bd94._comment create mode 100644 doc/special_remotes/S3/comment_4_38c0b062997fde1ad28facc05d973e83._comment create mode 100644 doc/special_remotes/S3/comment_5_409bc2b56382417cf26bb222fb783ba7._comment create mode 100644 doc/special_remotes/S3/comment_6_78da9e233882ec0908962882ea8c4056._comment create mode 100644 doc/special_remotes/S3/comment_7_6af9781004d982d8e6b20a83ad29eead._comment create mode 100644 doc/special_remotes/S3/comment_8_0fa68d584ee7f6b5c9058fba7e911a11._comment create mode 100644 doc/special_remotes/S3/comment_9_7ad757b3865b04967c79af0a263bb3b0._comment create mode 100644 doc/special_remotes/bup.mdwn create mode 100644 doc/special_remotes/bup/comment_10_f78c1ed97d2e4c6ebffaa7482cfe0c9b._comment create mode 100644 doc/special_remotes/bup/comment_11_b53bceb0058acf4d1ab12ea4853ee443._comment create mode 100644 doc/special_remotes/bup/comment_12_65d923226cf6120349d807c5c60f640c._comment create mode 100644 doc/special_remotes/bup/comment_1_96179a003da4444f6fc08867872cda0a._comment create mode 100644 doc/special_remotes/bup/comment_2_612b038c15206f9f3c2e23c7104ca627._comment create mode 100644 doc/special_remotes/bup/comment_3_1186def82741ddab1ade256fb2e59e6f._comment create mode 100644 doc/special_remotes/bup/comment_4_7d22a805dd2914971e7ca628ceea69be._comment create mode 100644 doc/special_remotes/bup/comment_6_5942333cde09fd98e26c4f1d389cb76f._comment create mode 100644 doc/special_remotes/bup/comment_7_cb1a0d3076e9d06e7a24204478f6fa98._comment create mode 100644 doc/special_remotes/bup/comment_8_4cbc67e5911748d13cee3c483d7ece8a._comment create mode 100644 doc/special_remotes/bup/comment_9_ca7096a759961af375e6bd49663b45b3._comment create mode 100644 doc/special_remotes/comment_10_e9881290486a1770bd260f8650ada9c6._comment create mode 100644 doc/special_remotes/comment_11_e01b5cc5a0d81b071e93e27e7b91fe2a._comment create mode 100644 doc/special_remotes/comment_12_13237170ef5b6646e0e25d3421af3fe5._comment create mode 100644 doc/special_remotes/comment_13_1a36a0483a9db04d36e0234a192ebad8._comment create mode 100644 doc/special_remotes/comment_14_a8419963dc024b1d9eb73807596012dc._comment create mode 100644 doc/special_remotes/comment_15_95ccfdd22a2391daa99e0beb04adedd6._comment create mode 100644 doc/special_remotes/comment_16_b9d238fb15ad7628e33c90b071e07bb0._comment create mode 100644 doc/special_remotes/comment_17_cc21b81a8f809f6efa5f5b6332513fc3._comment create mode 100644 doc/special_remotes/comment_18_3fe750118ff1edbe91a110b86fb5b662._comment create mode 100644 doc/special_remotes/comment_19_6794eb52bd87c28ef1df3172aa7d5780._comment create mode 100644 doc/special_remotes/comment_1_961276c18e9353ca8e25cad53e7ec51f._comment create mode 100644 doc/special_remotes/comment_20_6b7242721f2f2c77b634568cb737e3e3._comment create mode 100644 doc/special_remotes/comment_21_5c11e69c28b9ed4cbe238a36c0839a47._comment create mode 100644 doc/special_remotes/comment_2_97543acfa7434e332ebea5672e446317._comment create mode 100644 doc/special_remotes/comment_3_9229776623c234204c8b164edff95da0._comment create mode 100644 doc/special_remotes/comment_4_3bbda479d13f6bf393dcd59ed94ddeaa._comment create mode 100644 doc/special_remotes/comment_5_f7000975d38077828ab11a99095b39eb._comment create mode 100644 doc/special_remotes/comment_6_5d2bd7c1e1493d3c3784708a9b0bc001._comment create mode 100644 doc/special_remotes/comment_7_af01ee5ce31b1490af565cb087d65277._comment create mode 100644 doc/special_remotes/comment_8_3d4ffec566d68d601eafe8758a616756._comment create mode 100644 doc/special_remotes/comment_9_26af468952f0403171370b56e127830a._comment create mode 100644 doc/special_remotes/directory.mdwn create mode 100644 doc/special_remotes/directory/comment_11_86f8c1b09cbd82bcd76378dfa1b3ca07._comment create mode 100644 doc/special_remotes/directory/comment_12._comment create mode 100644 doc/special_remotes/directory/comment_12_311cd013fd8db47856d84161119e059d._comment create mode 100644 doc/special_remotes/directory/comment_1_e8a53592adb13f7d7f212a2eb5a18a31._comment create mode 100644 doc/special_remotes/directory/comment_2_d949edad6a330079f9e15f703f9091e3._comment create mode 100644 doc/special_remotes/directory/comment_3_49009f4e9e335c9a9d0422aa59c9a432._comment create mode 100644 doc/special_remotes/directory/comment_4_f5e9b0b477c4e521f8633fd274757fa3._comment create mode 100644 doc/special_remotes/directory/comment_5_e790718423c41f5ea8047ea5225bfacd._comment create mode 100644 doc/special_remotes/directory/comment_6_325aac80b86588912c4fd61339ccbd0b._comment create mode 100644 doc/special_remotes/directory/comment_7_4206db69d68d9917623ce02500387021._comment create mode 100644 doc/special_remotes/directory/comment_8_acd9023511fe43817718bc89430f96c3._comment create mode 100644 doc/special_remotes/directory/comment_9_d330eb808a990bb71034613c297a265e._comment create mode 100644 doc/special_remotes/gcrypt.mdwn create mode 100644 doc/special_remotes/glacier.mdwn create mode 100644 doc/special_remotes/glacier/comment_1_fcd856b99dc6b3f9141b65fe639ef76b._comment create mode 100644 doc/special_remotes/glacier/comment_2_38fcca87074f6ea31a12569a822aa8c9._comment create mode 100644 doc/special_remotes/glacier/comment_3_cea5bcb162e4288847ba5f25464a0406._comment create mode 100644 doc/special_remotes/glacier/comment_4_0c92cc82c7ac513130f862391a02d329._comment create mode 100644 doc/special_remotes/glacier/comment_5_8d1dcb4bf48386314bfb248ea6eeeb68._comment create mode 100644 doc/special_remotes/glacier/comment_6_adb1db354dc4941e4b004e4ba34660d7._comment create mode 100644 doc/special_remotes/glacier/comment_7_747e403aac5acaba00e220931e926951._comment create mode 100644 doc/special_remotes/hook.mdwn create mode 100644 doc/special_remotes/hook/comment_1_6a74a25891974a28a8cb42b87cb53c26._comment create mode 100644 doc/special_remotes/hook/comment_2_ee7c43b93c5b787216334f019643f6a0._comment create mode 100644 doc/special_remotes/hook/comment_3_2593291795e732994862d08bf2ed467b._comment create mode 100644 doc/special_remotes/hook/comment_4_35d79b5ffa5a19056efcdc805070bc4b._comment create mode 100644 doc/special_remotes/hook/comment_5_6fbf1e963fa3ea4b2eb8ca5a3819762d._comment create mode 100644 doc/special_remotes/hook/comment_6_e0ab48d5333e5de85f016b097e6fdac1._comment create mode 100644 doc/special_remotes/hook/comment_7_cc2b1243c2c36e63241513bcaddfea67._comment create mode 100644 doc/special_remotes/hook/comment_8_bbae315233bda48eb04662dfd48cf1ae._comment create mode 100644 doc/special_remotes/hook/comment_9_037523d1994c702239ca96791156fe65._comment create mode 100644 doc/special_remotes/rsync.mdwn create mode 100644 doc/special_remotes/rsync/comment_10_43e8fa3517c1f5935f02ad06fbed63dc._comment create mode 100644 doc/special_remotes/rsync/comment_11_8cafc1a8b37e6fb056185ec058c0c3e8._comment create mode 100644 doc/special_remotes/rsync/comment_1_9e180c397486989beab21699b8e8f103._comment create mode 100644 doc/special_remotes/rsync/comment_2_25545dc0b53f09ae73b29899c8884b02._comment create mode 100644 doc/special_remotes/rsync/comment_3_960a89b1ae7e3888ffba06baa963dc21._comment create mode 100644 doc/special_remotes/rsync/comment_4_db84816c31239953dd21f23a8c557b43._comment create mode 100644 doc/special_remotes/rsync/comment_5_ccaffa4aded9dab88c76a856b96ea5b9._comment create mode 100644 doc/special_remotes/rsync/comment_6_e687b9482b177e1351c8c65ea617d3fa._comment create mode 100644 doc/special_remotes/rsync/comment_7_e122979ea811d9ef835ba05bb936190f._comment create mode 100644 doc/special_remotes/rsync/comment_8_d566113318d0aa7500d76ffe1bd46069._comment create mode 100644 doc/special_remotes/rsync/comment_9_5dcf10a502b2d4feac46b620d43e9d00._comment create mode 100644 doc/special_remotes/web.mdwn create mode 100644 doc/special_remotes/web/comment_1_0bd570025f6cd551349ea88a4729ac8e._comment create mode 100644 doc/special_remotes/web/comment_2_333141cc9ec6c26ffd19aa95303a91e3._comment create mode 100644 doc/special_remotes/webdav.mdwn create mode 100644 doc/special_remotes/webdav/comment_1_6b523eea78eae1d19fe2a9950ee33e3a._comment create mode 100644 doc/special_remotes/webdav/comment_2_83fc4e7d9ba7a05c8500da659f561b8f._comment create mode 100644 doc/special_remotes/webdav/comment_3_239367ad639c61ecdf87a89f7ac53efe._comment create mode 100644 doc/special_remotes/webdav/comment_4_ffa52f7776cdc8caa28667b5eadae123._comment create mode 100644 doc/special_remotes/webdav/comment_5_5b8cbdb5e9a1b90d748a5074997e1cd5._comment create mode 100644 doc/special_remotes/webdav/comment_6_d3be3e588c3a2abb2025ceb82c18b0ef._comment create mode 100644 doc/special_remotes/webdav/comment_7_6fa7e11331db5a943015bd5367eb3d73._comment create mode 100644 doc/special_remotes/webdav/comment_8_2627b41f80c7511b27464e2040b128a8._comment create mode 100644 doc/special_remotes/xmpp.mdwn create mode 100644 doc/special_remotes/xmpp/comment_10_c7c2e2e81cb5b2b9a5272430c835dd39._comment create mode 100644 doc/special_remotes/xmpp/comment_1_568247938929a2934e8198fca80b7184._comment create mode 100644 doc/special_remotes/xmpp/comment_2_9fc3f512020b7eb2591d6b7b2e8de2d7._comment create mode 100644 doc/special_remotes/xmpp/comment_3_48ddbba1402d89acaea07cff747c48e0._comment create mode 100644 doc/special_remotes/xmpp/comment_4_59857879abaae22bde444a215e00bf18._comment create mode 100644 doc/special_remotes/xmpp/comment_5_583ee374bd34fcc9ae26c2fd690e8c47._comment create mode 100644 doc/special_remotes/xmpp/comment_6_8f0b5bba1271d031a67e7f0c175d67d5._comment create mode 100644 doc/special_remotes/xmpp/comment_7_ac7acbded03325b015959d82ae77faf1._comment create mode 100644 doc/special_remotes/xmpp/comment_8_81a9636a1e8a36a58185468a26f8633d._comment create mode 100644 doc/special_remotes/xmpp/comment_9_eda76b826491c96b1ce072aacf9d3adf._comment create mode 100644 doc/summary.mdwn create mode 100644 doc/sync.mdwn create mode 100644 doc/sync/comment_1_59681be5568f568f5c54eb0445163dd2._comment create mode 100644 doc/sync/comment_2_9301ff5e81d37475f594e74fbe32f24e._comment create mode 100644 doc/sync/comment_3_49560003da47490e4fabd4ab0089f2d7._comment create mode 100644 doc/sync/comment_4_cf29326408e62575085d1f980087c923._comment create mode 100644 doc/sync/comment_5_18c396c59907147bb2bf713e55392b6b._comment create mode 100644 doc/sync/comment_6_012e9d4468d0b88ee3c5dad3911c3606._comment create mode 100644 doc/sync/comment_7_6276e100d1341f1a0be368f54de0ae7b._comment create mode 100644 doc/templates/bare.tmpl create mode 100644 doc/templates/bugtemplate.mdwn create mode 100644 doc/templates/walkthrough.tmpl create mode 100644 doc/testimonials.mdwn create mode 100644 doc/testimonials/comment_1_2bf439f7a3bc3d6fab91849017946182._comment create mode 100644 doc/tips.mdwn create mode 100644 doc/tips/Building_git-annex_on_Debian_OR___37____164____35____34____164____37____38____34____35___Haskell__33__.mdwn create mode 100644 doc/tips/Building_git-annex_on_Debian_OR___37____164____35____34____164____37____38____34____35___Haskell__33__/comment_1_835a3608df3e9d044cabe822d0f3e7e4._comment create mode 100644 doc/tips/Building_git-annex_on_Debian_OR___37____164____35____34____164____37____38____34____35___Haskell__33__/comment_2_080b30cba72a718e73ea715e259e1cfb._comment create mode 100644 doc/tips/Crude_Windows_Sync.mdwn create mode 100644 doc/tips/Decentralized_repository_behind_a_Firewall.mdwn create mode 100644 doc/tips/Decentralized_repository_behind_a_Firewall/comment_1_78b9035234a690ca5a7c9f3cc78fa092._comment create mode 100644 doc/tips/Delay_Assistant_Startup_on_Login.mdwn create mode 100644 doc/tips/Delay_Assistant_Startup_on_Login/comment_1_c63917150527efab4b1106183b3aa7ef._comment create mode 100644 doc/tips/Git_annex_and_Calibre.mdwn create mode 100644 doc/tips/How_to_retroactively_annex_a_file_already_in_a_git_repo.mdwn create mode 100644 doc/tips/How_to_retroactively_annex_a_file_already_in_a_git_repo/comment_1_7eaf73fb3355bd706ab18a43790b3c10._comment create mode 100644 doc/tips/How_to_retroactively_annex_a_file_already_in_a_git_repo/comment_2_dac1a171204f30d7c906e878eb6bd461._comment create mode 100644 doc/tips/How_to_retroactively_annex_a_file_already_in_a_git_repo/comment_3_b62ec0b848d2487d68d7032682622193._comment create mode 100644 doc/tips/How_to_retroactively_annex_a_file_already_in_a_git_repo/comment_4_2423904e41a86cd1c6bc155d7b733642._comment create mode 100644 doc/tips/Internet_Archive_via_S3.mdwn create mode 100644 doc/tips/Internet_Archive_via_S3/comment_1_d53a3848c20dce61867283fc03c2adaa._comment create mode 100644 doc/tips/Internet_Archive_via_S3/comment_2_91c1472da27b00e5d682d22bc1ef04e0._comment create mode 100644 doc/tips/Internet_Archive_via_S3/comment_3_e23cf781c532f80d47d52265f2b2c87e._comment create mode 100644 doc/tips/The_perfect_preferred_content_settings_for_my_android_phone.mdwn create mode 100644 doc/tips/The_perfect_preferred_content_settings_for_my_android_phone/comment_1_393d1636bb313530be383a075bd3440a._comment create mode 100644 doc/tips/Using_Git-annex_as_a_web_browsing_assistant.mdwn create mode 100644 doc/tips/Using_Git-annex_as_a_web_browsing_assistant/comment_1_74167f9fff400f148916003468c77de4._comment create mode 100644 doc/tips/assume-unstaged.mdwn create mode 100644 doc/tips/assume-unstaged/comment_1_44abd811ef79a85e557418e17a3927be._comment create mode 100644 doc/tips/assume-unstaged/comment_2_5b589f37cfc03bf7be33a51826cc4dba._comment create mode 100644 doc/tips/automatically_getting_files_on_checkout.mdwn create mode 100644 doc/tips/beware_of_SSD_wear_when_doing_fsck_on_large_special_remotes.mdwn create mode 100644 doc/tips/beware_of_SSD_wear_when_doing_fsck_on_large_special_remotes/comment_1_e7c5c46112a2406b873d08bbf53c40d8._comment create mode 100644 doc/tips/beware_of_SSD_wear_when_doing_fsck_on_large_special_remotes/comment_2_daf45ce29fed986fa9aa8b173760d0b7._comment create mode 100644 doc/tips/beware_of_SSD_wear_when_doing_fsck_on_large_special_remotes/comment_3_72d222020af4a9c6c753eb1ee7e1f1cf._comment create mode 100644 doc/tips/centralised_repository:_starting_from_nothing.mdwn create mode 100644 doc/tips/centralised_repository:_starting_from_nothing/comment_1_b0d22822017646775869ce1292e676f4._comment create mode 100644 doc/tips/centralized_git_repository_tutorial.mdwn create mode 100644 doc/tips/centralized_git_repository_tutorial/comment_1_9072ebc0c61446d7b151fcfab616fea9._comment create mode 100644 doc/tips/centralized_git_repository_tutorial/comment_2_528e92b21f0551fde4adb956654953ae._comment create mode 100644 doc/tips/downloading_podcasts.mdwn create mode 100644 doc/tips/downloading_podcasts/comment_10_4d4f6c22070b58918ee8d34c5e7290ad._comment create mode 100644 doc/tips/downloading_podcasts/comment_11_d8d77048c7e2524968c188e1ad517873._comment create mode 100644 doc/tips/downloading_podcasts/comment_12_0859317471b43c88744dd3df95c879f7._comment create mode 100644 doc/tips/downloading_podcasts/comment_13_e8c3c97282d17e2a1d47fb9d5e2b2f7b._comment create mode 100644 doc/tips/downloading_podcasts/comment_14_05a3694052de36848fbbad6eeeada895._comment create mode 100644 doc/tips/downloading_podcasts/comment_15_21028bed8858c2dae1ac9c2d014fd2a1._comment create mode 100644 doc/tips/downloading_podcasts/comment_16_4869fb5c9f896acc477c44de06c36ca7._comment create mode 100644 doc/tips/downloading_podcasts/comment_17_2e278ff200c1c15efd27c46a3e0aed40._comment create mode 100644 doc/tips/downloading_podcasts/comment_18_382f2b970738d9b1af577955c3083e90._comment create mode 100644 doc/tips/downloading_podcasts/comment_19_f76fc6835e5787b0156380bf09fd81ca._comment create mode 100644 doc/tips/downloading_podcasts/comment_1_f04bc32a34baeeffcd691e9f7cce0230._comment create mode 100644 doc/tips/downloading_podcasts/comment_20_65ebf3a3bbf0a2aebd2b69640b757e16._comment create mode 100644 doc/tips/downloading_podcasts/comment_2_a9a98cad7358d16792853a2ee413fe6c._comment create mode 100644 doc/tips/downloading_podcasts/comment_3_5a8068a5cb0fd864581157a3aa5d1113._comment create mode 100644 doc/tips/downloading_podcasts/comment_4_e7072a9da30b4c4b4c526013144238d4._comment create mode 100644 doc/tips/downloading_podcasts/comment_5_79b3f8d678ac9f67df4c0cd649657283._comment create mode 100644 doc/tips/downloading_podcasts/comment_6_35106fee5458bdd5c21868fbc49d3616._comment create mode 100644 doc/tips/downloading_podcasts/comment_7_ceb16498b7aadbf04a27acd5d6561d46._comment create mode 100644 doc/tips/downloading_podcasts/comment_8_147397603f0b3fdb42ca387d1da7c5ef._comment create mode 100644 doc/tips/downloading_podcasts/comment_9_6a26a6cc7683d38fae0f23c5a52d1e23._comment create mode 100644 doc/tips/dropboxannex.mdwn create mode 100644 doc/tips/emacs_integration.mdwn create mode 100644 doc/tips/finding_duplicate_files.mdwn create mode 100644 doc/tips/finding_duplicate_files/comment_10_2ed5aa8c632048b13e01d358883fa383._comment create mode 100644 doc/tips/finding_duplicate_files/comment_1_ddb477ca242ffeb21e0df394d8fdf5d2._comment create mode 100644 doc/tips/finding_duplicate_files/comment_2_900eafe0a781018ff44b35ac232e3ad3._comment create mode 100644 doc/tips/finding_duplicate_files/comment_3._comment create mode 100644 doc/tips/finding_duplicate_files/comment_4_1494143a74cc1e9fbe4720c14b73d42b._comment create mode 100644 doc/tips/finding_duplicate_files/comment_5_1a35ca360468bcb84a67ad8d62a2ef7d._comment create mode 100644 doc/tips/finding_duplicate_files/comment_6_a6e88c93b31f67c933523725ff61b287._comment create mode 100644 doc/tips/finding_duplicate_files/comment_7_347b0186755a809594bd42feda6363e2._comment create mode 100644 doc/tips/finding_duplicate_files/comment_8_3af51722da0980b724facb184f0f66e9._comment create mode 100644 doc/tips/finding_duplicate_files/comment_9_7b4b78a5cd253abfe4f6001049bf64f3._comment create mode 100644 doc/tips/flickrannex.mdwn create mode 100644 doc/tips/flickrannex/comment_10_50707f259abe5829ce075dfbecd5a4ba._comment create mode 100644 doc/tips/flickrannex/comment_11_ab5bcb025381b3da4d7c6dfd0c7310dd._comment create mode 100644 doc/tips/flickrannex/comment_12_90a331275d888221bc695003c8acbe46._comment create mode 100644 doc/tips/flickrannex/comment_13_1596e70dca71c853fd1d6fc9bde02b18._comment create mode 100644 doc/tips/flickrannex/comment_2_d74c4fc7edf8e47f7482564ce0ef4d12._comment create mode 100644 doc/tips/flickrannex/comment_2_f53d0d5520e2835e9705bea4e75556f0._comment create mode 100644 doc/tips/flickrannex/comment_4_9ebba4d61140f6c2071e988c9328cf7e._comment create mode 100644 doc/tips/flickrannex/comment_5_4470dae270613dd8712623474bc80ab0._comment create mode 100644 doc/tips/flickrannex/comment_5_d395cdcf815cb430e374ff05c1a63ff4._comment create mode 100644 doc/tips/flickrannex/comment_6_8cf730097001ffe106f2c743edce9d0a._comment create mode 100644 doc/tips/flickrannex/comment_7_a80c8087c4e1562a4c98a24edc182e5a._comment create mode 100644 doc/tips/flickrannex/comment_8_94f84254c32cf0f7dd1441b7da5d2bc6._comment create mode 100644 doc/tips/flickrannex/comment_9_5299b4cab4a4cb8e8fd4d2b39f0ea59c._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt.mdwn create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_10_4440a80d64c60c7312d5c405d54e607a._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_1_5c54690586f2a781905ea4b25aa1147f._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_2_07feedb4348f8c31176cc744c19368a1._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_3_c2f873dffa015f1d72ad0c3921909316._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_4_f8a6e4415f4fe6da14f6a3b7334bc952._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_5_11b8e82d2a234f65b58b823e71c6d6a2._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_6_3e41948e1beffcf279bb05ef8e61cc07._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_7_4ce0b26b25b336f07b2e27246cdfba3e._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_8_49aa34d75d24a2066baa8a585bc9c2e9._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_9_3784e0c828cd60b6a9075c2d32d070cc._comment create mode 100644 doc/tips/googledriveannex.mdwn create mode 100644 doc/tips/imapannex.mdwn create mode 100644 doc/tips/megaannex.mdwn create mode 100644 doc/tips/migrating_data_to_a_new_backend.mdwn create mode 100644 doc/tips/migrating_two_seperate_disconnected_directories_to_git_annex.mdwn create mode 100644 doc/tips/offline_archive_drives.mdwn create mode 100644 doc/tips/offline_archive_drives/comment_1_3d4fdf42191a9d81434d00f51c3609ff._comment create mode 100644 doc/tips/offline_archive_drives/comment_2_864c752aa8d064791a4b14dbbe2e6882._comment create mode 100644 doc/tips/offline_archive_drives/comment_3_7be2ccaf70c9ecfc9a34384e0e31f490._comment create mode 100644 doc/tips/owncloudannex.mdwn create mode 100644 doc/tips/owncloudannex/comment_1_129652308c3c499462828dcaf8e747a4._comment create mode 100644 doc/tips/owncloudannex/comment_2_38604990368666f654d41891ba99ac61._comment create mode 100644 doc/tips/owncloudannex/comment_3_1bfd290d00d6536da7d31818db46f8ec._comment create mode 100644 doc/tips/owncloudannex/comment_4_492b6922a7c5bb5464fedb46b0c5303b._comment create mode 100644 doc/tips/owncloudannex/comment_5_1d48ac08714fadcb06d874570d745bd8._comment create mode 100644 doc/tips/owncloudannex/comment_6_65959f49a2f56bffd6fe48670c0c8d5a._comment create mode 100644 doc/tips/owncloudannex/comment_7_7482002991672ef67836bae43b8d0be8._comment create mode 100644 doc/tips/powerful_file_matching.mdwn create mode 100644 doc/tips/recover_data_from_lost+found.mdwn create mode 100644 doc/tips/recovering_from_a_corrupt_git_repository.mdwn create mode 100644 doc/tips/recovering_from_a_corrupt_git_repository/comment_1_f5827be97f78dbae113a5ba0c9ced896._comment create mode 100644 doc/tips/recovering_from_a_corrupt_git_repository/comment_2_e98df7275bb032308bb87e3607bdde32._comment create mode 100644 doc/tips/recovering_from_a_corrupt_git_repository/comment_3_11bece6dfac090edbcd783b266c482a3._comment create mode 100644 doc/tips/recovering_from_a_corrupt_git_repository/comment_4_86e99017f7585ac2f76753051214637e._comment create mode 100644 doc/tips/recovering_from_a_corrupt_git_repository/comment_6_c8953732ce353cdf0c4fb81ddc98c04a._comment create mode 100644 doc/tips/recovering_from_a_corrupt_git_repository/comment_6_d0da84df0241dc6ccf0aa0c7598917df._comment create mode 100644 doc/tips/recovering_from_a_corrupt_git_repository/comment_7_addf49556e4c33d55a41c393f519d0a4._comment create mode 100644 doc/tips/recovering_from_a_corrupt_git_repository/comment_8_505a2fc2b841fe8eb419801f923ef35f._comment create mode 100644 doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant.mdwn create mode 100644 doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant/comment_1_907e4032ca4a39adb846cf16dbf447dc._comment create mode 100644 doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant/comment_2_902d001ba86657ef0f8cca5b175f99ca._comment create mode 100644 doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant/comment_3_a1cf93f9b29658f0f26e9e0ae6057ee3._comment create mode 100644 doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant/comment_4_e10671908b58c554375787d0f76e2366._comment create mode 100644 doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant/comment_5_4114380f66b6376c851e93f6876d590b._comment create mode 100644 doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant/comment_6_6a5d6af107b297afd008b021f73d787b._comment create mode 100644 doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant/comment_7_74d57cf503a86d8f7ace2d769dbb58be._comment create mode 100644 doc/tips/setup_a_public_repository_on_a_web_site.mdwn create mode 100644 doc/tips/setup_a_public_repository_on_a_web_site/comment_1_1d0fa6da33e401df1d7ff31979247fec._comment create mode 100644 doc/tips/setup_a_public_repository_on_a_web_site/comment_2_b98b761dee9d923153e3c288c1d987ee._comment create mode 100644 doc/tips/shared_git_annex_directory_between_multiple_users.mdwn create mode 100644 doc/tips/skydriveannex.mdwn create mode 100644 doc/tips/untrusted_repositories.mdwn create mode 100644 doc/tips/using_Amazon_Glacier.mdwn create mode 100644 doc/tips/using_Amazon_S3.mdwn create mode 100644 doc/tips/using_Amazon_S3/comment_1_666a26f95024760c99c627eed37b1966._comment create mode 100644 doc/tips/using_Amazon_S3/comment_2_f5a0883be7dbb421b584c6dc0165f1ef._comment create mode 100644 doc/tips/using_Google_Cloud_Storage.mdwn create mode 100644 doc/tips/using_Google_Cloud_Storage/comment_1_c576182f39563ae68767391c4227a177._comment create mode 100644 doc/tips/using_box.com_as_a_special_remote.mdwn create mode 100644 doc/tips/using_git_annex_with_no_fixed_hostname_and_optimising_ssh.mdwn create mode 100644 doc/tips/using_git_annex_with_no_fixed_hostname_and_optimising_ssh/comment_1_c0b7682a2b6f3078457b85683c825baf._comment create mode 100644 doc/tips/using_gitolite_with_git-annex.mdwn create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_10_8767bc8014b459a3cd76f275fd4fa8d6._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_11_00715e0b47f09130e0e536e29f7b9258._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_12_7027ce60265b8f24c8ab54553e544068._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_13_75218b7409c0e281cb01c9b2791e8cdf._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_14_7d4d4515218d1259d32be3baeb5ee56e._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_15_dc6f21b5a3d5931c8d949a9753411b9e._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_16_8e5039e6655fc80dc863b6cdf44ef02a._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_17_9c40e1da8bb44f7207e802377f5cf923._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_1_9a2a2a8eac9af97e0c984ad105763a73._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_2_d8efea4ab9576555fadbb47666ecefa9._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_3_807035f38509ccb9f93f1929ecd37417._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_4_eb81f824aadc97f098379c5f7e4fba4c._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_5_f688309532d2993630e9e72e87fb9c46._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_6_3e203e010a4df5bf03899f867718adc5._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_7_f8fd08b6ab47378ad88c87348057220d._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_8_8249772c142117f88e37975d058aa936._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_9_28418635a6ed7231b89e02211cd3c236._comment create mode 100644 doc/tips/using_the_SHA1_backend.mdwn create mode 100644 doc/tips/using_the_web_as_a_special_remote.mdwn create mode 100644 doc/tips/using_the_web_as_a_special_remote/comment_1_321a41d611c6fe45e047af9c96c5176c._comment create mode 100644 doc/tips/using_the_web_as_a_special_remote/comment_2_dfe9c8c49aadff80d2020288584e0390._comment create mode 100644 doc/tips/using_the_web_as_a_special_remote/comment_3_ed8dd3bbd9b9ae7f2309b72b94f61eb1._comment create mode 100644 doc/tips/using_the_web_as_a_special_remote/comment_4_c1133a524989a940f1b5db588707157a._comment create mode 100644 doc/tips/visualizing_repositories_with_gource.mdwn create mode 100644 doc/tips/visualizing_repositories_with_gource/screenshot.jpg create mode 100644 doc/tips/what_to_do_when_a_repository_is_corrupted.mdwn create mode 100644 doc/tips/what_to_do_when_you_lose_a_repository.mdwn create mode 100644 doc/tips/what_to_do_when_you_lose_a_repository/comment_1_cf19b8dc304dc37c26717174c4a98aa4._comment create mode 100644 doc/tips/what_to_do_when_you_lose_a_repository/comment_3_fa9ca81668f5faebf2f61b10f82c97d2._comment create mode 100644 doc/tips/yet_another_simple_disk_usage_like_utility.mdwn create mode 100644 doc/tips/yet_another_simple_disk_usage_like_utility/comment_1_41b212bde8bc88d2a5dea93bd0dc75f1._comment create mode 100644 doc/tips/yet_another_simple_disk_usage_like_utility/comment_2_73698913837bfd5a58cf15721211e43e._comment create mode 100644 doc/todo.mdwn create mode 100644 doc/todo/A_really_simple_way_to_pair_devices_like_bittorent_sync.mdwn create mode 100644 doc/todo/A_really_simple_way_to_pair_devices_like_bittorent_sync/comment_1_d828bc374e50a49101c0b863f9b33080._comment create mode 100644 doc/todo/A_really_simple_way_to_pair_devices_like_bittorent_sync/comment_2_a4badfc248be428e6426a936212cc896._comment create mode 100644 doc/todo/A_really_simple_way_to_pair_devices_like_bittorent_sync/comment_3_0b04089d3d33fdb48eeb46bf168e9a3c._comment create mode 100644 doc/todo/A_really_simple_way_to_pair_devices_like_bittorent_sync/comment_4_2bcab1b7998b4df08fca41b8d810f115._comment create mode 100644 doc/todo/A_really_simple_way_to_pair_devices_like_bittorent_sync/comment_5_677e958c3f2effec7528b484aeb6478d._comment create mode 100644 doc/todo/A_really_simple_way_to_pair_devices_like_bittorent_sync/comment_6_56e53803fdede895cba717e6b6e9a1bb._comment create mode 100644 doc/todo/Bittorrent-like_features.mdwn create mode 100644 doc/todo/Bittorrent-like_features/comment_1_f4c110ef35ebf4fd89f06edf2c4f0c48._comment create mode 100644 doc/todo/Build_for_Synology_DSM.mdwn create mode 100644 doc/todo/Build_for_Synology_DSM/comment_10_e351084d9a83db3fd6d9d983227a6410._comment create mode 100644 doc/todo/Build_for_Synology_DSM/comment_11_cc67a584f5c460a6fb63cf099c20e573._comment create mode 100644 doc/todo/Build_for_Synology_DSM/comment_12_94023593d294b9cf69090fcfd6ca0e5a._comment create mode 100644 doc/todo/Build_for_Synology_DSM/comment_13_314255fd503d125b5aeae2f62acfd592._comment create mode 100644 doc/todo/Build_for_Synology_DSM/comment_15_9525cd0d75ff4c15182d10a855774b69._comment create mode 100644 doc/todo/Build_for_Synology_DSM/comment_1_4059016fa8da6af7a3eba8966821e8eb._comment create mode 100644 doc/todo/Build_for_Synology_DSM/comment_2_8900c2985ab68b3b566c9f5d326471d6._comment create mode 100644 doc/todo/Build_for_Synology_DSM/comment_3_f2b77368473d42b7f21e9d51d6415b58._comment create mode 100644 doc/todo/Build_for_Synology_DSM/comment_4_a55fea734044c270ceb10adf9c8d9a76._comment create mode 100644 doc/todo/Build_for_Synology_DSM/comment_5_59865ada057c640ac29855c65cf45dd9._comment create mode 100644 doc/todo/Build_for_Synology_DSM/comment_6_6d860b1ad8816077b5fa596a71b12d5c._comment create mode 100644 doc/todo/Build_for_Synology_DSM/comment_7_19ef2d293ba3bc7ece443d7278371c3f._comment create mode 100644 doc/todo/Build_for_Synology_DSM/comment_8_609b7ad87dfbba49ec1f8c6fc2739ccd._comment create mode 100644 doc/todo/Build_for_Synology_DSM/comment_9_d94a73b9a07c5cadf191005f817fd59a._comment create mode 100644 doc/todo/Check_if_an_upgrade_is_available_in_the_webapp.mdwn create mode 100644 doc/todo/Check_if_an_upgrade_is_available_in_the_webapp/comment_1_c904182f6bff8b1a42070bbc038eb34e._comment create mode 100644 doc/todo/Deleting_Unused_Files_by_Age.mdwn create mode 100644 doc/todo/Move_ssh_config_to___126____47__ssh__47__git-annex__47__config.mdwn create mode 100644 doc/todo/Move_ssh_config_to___126____47__ssh__47__git-annex__47__config/comment_1_284c806e83a32af81b02aea7c7bc285a._comment create mode 100644 doc/todo/Move_ssh_config_to___126____47__ssh__47__git-annex__47__config/comment_2_1f55ad6b39906458779b2d604b003ffe._comment create mode 100644 doc/todo/Move_ssh_config_to___126____47__ssh__47__git-annex__47__config/comment_3_b00dce2374aac6968317d05d23bcfaf7._comment create mode 100644 doc/todo/Move_ssh_config_to___126____47__ssh__47__git-annex__47__config/comment_4_743d0b077110c5cac1e2f47187b75333._comment create mode 100644 doc/todo/Not_working_on_Android-x86.mdwn create mode 100644 doc/todo/Not_working_on_Android-x86/comment_1_5eec4d7530c9df68f1bd1b1ca7021ef5._comment create mode 100644 doc/todo/Option_for_browser_to_launch_webapp_with.mdwn create mode 100644 doc/todo/Please_abort_build_if___34__make_test__34___fails.mdwn create mode 100644 doc/todo/Please_add_support_for_monad-control_0.3.x.mdwn create mode 100644 doc/todo/S3.mdwn create mode 100644 doc/todo/Show_repo_type_in_repo_list.mdwn create mode 100644 doc/todo/Show_repo_type_in_repo_list/comment_1_ac6eb1072ef902a094b79dd8e0917c4d._comment create mode 100644 doc/todo/Show_repo_type_in_repo_list/comment_2_6979c487f707a724a048d20e2e5744e6._comment create mode 100644 doc/todo/Show_repo_type_in_repo_list/comment_3_529254a6cc20de7259d60a3cbc5ccaf7._comment create mode 100644 doc/todo/Slow_transfer_for_a_lot_of_small_files..mdwn create mode 100644 doc/todo/Sync_repo_names__63__.mdwn create mode 100644 doc/todo/Use_MediaScannerConnection_on_Android.mdwn create mode 100644 doc/todo/Use_a_remote_as_a_sharing_site_for_files_with_obfuscated_URLs.mdwn create mode 100644 doc/todo/Use_a_remote_as_a_sharing_site_for_files_with_obfuscated_URLs/comment_1_1a1f34f4f389267d67e79409c0ca8b1d._comment create mode 100644 doc/todo/Wishlist:_additional_environment_variables_for_hooks.mdwn create mode 100644 doc/todo/Wishlist:_sanitychecker_fix_wrong_UUID__47__duplicate_remote.mdwn create mode 100644 doc/todo/__96__git_annex_import_--lazy__96___--_Delete_everything_that__39__s_in_the_source_directory_and_also_in_the_target_annex.mdwn create mode 100644 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 create mode 100644 doc/todo/__96__git_annex_status__47__version__96___should_print_the_local_OS.mdwn create mode 100644 doc/todo/__96__git_annex_sync_--auto__96___or___96__git_annex_auto__96___--_synchronize_symlinks__44___tracking_info__44___and_actual_data.mdwn create mode 100644 doc/todo/add_--exclude_option_to_git_annex_find.mdwn create mode 100644 doc/todo/add_-all_option.mdwn create mode 100644 doc/todo/add_a_git_backend.mdwn create mode 100644 doc/todo/add_an_icon_for_the_.desktop_file.mdwn create mode 100644 doc/todo/add_metadata_to_annexed_files.mdwn create mode 100644 doc/todo/add_metadata_to_annexed_files/comment_1_38af9b352020194e9ace34d7dde188cf._comment create mode 100644 doc/todo/assistant_cannot_set_up_remote_repo_via_an_ssh_alias_or_an_ip_address.mdwn create mode 100644 doc/todo/assistant_git_sync_laddering.mdwn create mode 100644 doc/todo/assistant_parallel_file_transfers.txt create mode 100644 doc/todo/assistant_smarter_archive_directory_handling.mdwn create mode 100644 doc/todo/assistant_threaded_runtime.mdwn create mode 100644 doc/todo/auto_remotes.mdwn create mode 100644 doc/todo/auto_remotes/discussion.mdwn create mode 100644 doc/todo/automatic_bookkeeping_watch_command.mdwn create mode 100644 doc/todo/automatic_merge_of_synced_branches_upon___34__git_annex_sync__34__.mdwn create mode 100644 doc/todo/avoid_unnecessary_union_merges.mdwn create mode 100644 doc/todo/backendSHA1.mdwn create mode 100644 doc/todo/branching.mdwn create mode 100644 doc/todo/cache_key_info.mdwn create mode 100644 doc/todo/cache_key_info/comment_1_578df1b3b2cbfdc4aa1805378f35dc48._comment create mode 100644 doc/todo/checkout.mdwn create mode 100644 doc/todo/checksum_verification_on_transfer.mdwn create mode 100644 doc/todo/checksum_verification_on_transfer/comment_1_30f77e631608b9751f9032f97d58cc30._comment create mode 100644 doc/todo/direct_mode_guard.mdwn create mode 100644 doc/todo/direct_mode_guard/comment_1_431b6e1577bbd30b07dce9002a8fe1a2._comment create mode 100644 doc/todo/direct_mode_guard/comment_2_85bdb9dc601b87bd7c77150d7b0a5cde._comment create mode 100644 doc/todo/done.mdwn create mode 100644 doc/todo/dumb_plaindir_remote___40__e.g._for_NAS_mounts__41__.mdwn create mode 100644 doc/todo/dumb_plaindir_remote___40__e.g._for_NAS_mounts__41__/comment_1_5ed9a2336b432b842c1805add6d96509._comment create mode 100644 doc/todo/dumb_plaindir_remote___40__e.g._for_NAS_mounts__41__/comment_2_e6ba58c5c31ba23a4575f1189689946f._comment create mode 100644 doc/todo/exclude_files_on_a_given_remote.mdwn create mode 100644 doc/todo/faster_gnupg_cipher.mdwn create mode 100644 doc/todo/faster_gnupg_cipher/comment_1_8f61f7c724a8224e61c015be68f43db7._comment create mode 100644 doc/todo/faster_gnupg_cipher/comment_2_36e1f227a320527653500b445f7c001c._comment create mode 100644 doc/todo/faster_gnupg_cipher/comment_3_bd0c975494333dfe558de048d888ace8._comment create mode 100644 doc/todo/faster_rsync_remotes.mdwn create mode 100644 doc/todo/faster_rsync_remotes/comment_1_0bc3ee0ae563357675eeccf42461e59a._comment create mode 100644 doc/todo/faster_rsync_remotes/comment_2_ccf6f75450c89ca498c8130054f8d32d._comment create mode 100644 doc/todo/faster_rsync_remotes/comment_3_2f6a9d23cb8351fbf0f60ed93752e76e._comment create mode 100644 doc/todo/faster_rsync_remotes/comment_4_3a2f45defebae3dde336ee5f40c26d7e._comment create mode 100644 doc/todo/file_copy_progress_bar.mdwn create mode 100644 doc/todo/free_space_checking_for_local_special_remotes.mdwn create mode 100644 doc/todo/free_space_checking_for_local_special_remotes/comment_1_47c254cec58cbbb3ea84c93ef8282f01._comment create mode 100644 doc/todo/fsck.mdwn create mode 100644 doc/todo/fsck_special_remotes.mdwn create mode 100644 doc/todo/git-annex-shell.mdwn create mode 100644 doc/todo/git-annex_unused_eats_memory.mdwn create mode 100644 doc/todo/git_annex_init_:_include_repo_description_and__47__or_UUID_in_commit_message.mdwn create mode 100644 doc/todo/gitolite_and_gitosis_support.mdwn create mode 100644 doc/todo/gitrm.mdwn create mode 100644 doc/todo/hidden_files.mdwn create mode 100644 doc/todo/http_git_annex_404_retry.mdwn create mode 100644 doc/todo/http_headers.mdwn create mode 100644 doc/todo/immutable_annexed_files.mdwn create mode 100644 doc/todo/importfeed:_allow___36____123__itemdate__125___with_--template.mdwn create mode 100644 doc/todo/importfeed:_allow___36____123__itemdate__125___with_--template/comment_1_62752c760fc12eca0c34d67d58753d00._comment create mode 100644 doc/todo/importfeed:_allow___36____123__itemdate__125___with_--template/comment_2_21672360060f48bc2eacfa535ff4c94d._comment create mode 100644 doc/todo/incremental_fsck.mdwn create mode 100644 doc/todo/incremental_fsck/comment_1_609b21141dd5686b2c0eaef2b8d63229._comment create mode 100644 doc/todo/keep_annexed_files_for_a_while.mdwn create mode 100644 doc/todo/link_file_to_remote_repo_feature.mdwn create mode 100644 doc/todo/makefile:_respect___36__PREFIX.mdwn create mode 100644 doc/todo/mdwn2man:_make_backticks_bold.mdwn create mode 100644 doc/todo/network_remotes.mdwn create mode 100644 doc/todo/nicer_whereis_output.mdwn create mode 100644 doc/todo/object_dir_reorg_v2.mdwn create mode 100644 doc/todo/object_dir_reorg_v2/comment_1_ba03333dc76ff49eccaba375e68cb525._comment create mode 100644 doc/todo/object_dir_reorg_v2/comment_2_81276ac309959dc741bc90101c213ab7._comment create mode 100644 doc/todo/object_dir_reorg_v2/comment_3_79bdf9c51dec9f52372ce95b53233bb2._comment create mode 100644 doc/todo/object_dir_reorg_v2/comment_4_93aada9b1680fed56cc6f0f7c3aca5e5._comment create mode 100644 doc/todo/object_dir_reorg_v2/comment_5_821c382987f105da72a50e0a5ce61fdc._comment create mode 100644 doc/todo/object_dir_reorg_v2/comment_6_8834c3a3f1258c4349d23aff8549bf35._comment create mode 100644 doc/todo/object_dir_reorg_v2/comment_7_42501404c82ca07147e2cce0cff59474._comment create mode 100644 doc/todo/optimise_git-annex_merge.mdwn create mode 100644 doc/todo/optinally_transfer_file_unencryptedly.mdwn create mode 100644 doc/todo/optinally_transfer_file_unencryptedly/comment_1_4be47e7ac85d0f4e7029a96b615545a7._comment create mode 100644 doc/todo/parallel_possibilities.mdwn create mode 100644 doc/todo/parallel_possibilities/comment_1_d8e34fc2bc4e5cf761574608f970d496._comment create mode 100644 doc/todo/parallel_possibilities/comment_2_adb76f06a7997abe4559d3169a3181c3._comment create mode 100644 doc/todo/parallel_possibilities/comment_3_145fb974f45da99b7d4b117a3699cccf._comment create mode 100644 doc/todo/pushpull.mdwn create mode 100644 doc/todo/quvi_0.9_support.mdwn create mode 100644 doc/todo/redundancy_stats_in_status.mdwn create mode 100644 doc/todo/redundancy_stats_in_status/comment_1_9f1c10f8cea4fa60a99cbcc8306dd5de._comment create mode 100644 doc/todo/redundancy_stats_in_status/comment_2_686ced0684d10511caf07953c64cd5b6._comment create mode 100644 doc/todo/resuming_encrypted_uploads.mdwn create mode 100644 doc/todo/resuming_encrypted_uploads/comment_1_1832a6fb78e8ad7c838582f46731ac3b._comment create mode 100644 doc/todo/resuming_encrypted_uploads/comment_2_2ecc8e782f49e90ed1549e9179eb1a1e._comment create mode 100644 doc/todo/rsync.mdwn create mode 100644 doc/todo/smudge.mdwn create mode 100644 doc/todo/smudge/comment_1_4ea616bcdbc9e9a6fae9f2e2795c31c9._comment create mode 100644 doc/todo/smudge/comment_2_e04b32caa0d2b4c577cdaf382a3ff7f6._comment create mode 100644 doc/todo/smudge/comment_3_4e7c25fe24a1e71f58a8354fa64f41c2._comment create mode 100644 doc/todo/special_remote_for_amazon_glacier.mdwn create mode 100644 doc/todo/special_remote_for_amazon_glacier/comment_1_68f129441eefcbfebf7a9db680f52759._comment create mode 100644 doc/todo/special_remote_for_amazon_glacier/comment_2_c5eeaf8ceee414fa0379831ca52e290c._comment create mode 100644 doc/todo/speed_up_fsck.mdwn create mode 100644 doc/todo/stream_feature__63__.mdwn create mode 100644 doc/todo/support-non-utf8-locales.mdwn create mode 100644 doc/todo/support_S3_multipart_uploads.mdwn create mode 100644 doc/todo/support_for_lossy_remotes.mdwn create mode 100644 doc/todo/support_for_lossy_remotes/comment_1_f5cd9f9deab13ab2d2290ad763906dd3._comment create mode 100644 doc/todo/support_for_writing_external_special_remotes.mdwn create mode 100644 doc/todo/support_fsck_in_bare_repos.mdwn create mode 100644 doc/todo/symlink_farming_commit_hook.mdwn create mode 100644 doc/todo/sync_my_local_git-annex_from_a_dump_remote.mdwn create mode 100644 doc/todo/sync_my_local_git-annex_from_a_dump_remote/comment_1_81d63854f89f00855cda5ace0fc8262a._comment create mode 100644 doc/todo/sync_my_local_git-annex_from_a_dump_remote/comment_2_66822b72b1450e79e8edd0c6c21d5aa6._comment create mode 100644 doc/todo/sync_my_local_git-annex_from_a_dump_remote/comment_3_b9f73375e2c732e798495f8ee6970c7c._comment create mode 100644 doc/todo/tahoe_lfs_for_reals.mdwn create mode 100644 doc/todo/tahoe_lfs_for_reals/comment_1_0a4793ce6a867638f6e510e71dd4bb44._comment create mode 100644 doc/todo/tahoe_lfs_for_reals/comment_2_80b9e848edfdc7be21baab7d0cef0e3a._comment create mode 100644 doc/todo/union_mounting.mdwn create mode 100644 doc/todo/union_mounting/comment_1_cb08435812dd7766de26199c73f38e8b._comment create mode 100644 doc/todo/union_mounting/comment_2_240b1736f6bd4fbf87c372d3a46e661b._comment create mode 100644 doc/todo/untracked_remotes.mdwn create mode 100644 doc/todo/use_cp_reflink.mdwn create mode 100644 doc/todo/using_url_backend.mdwn create mode 100644 doc/todo/whishlist:_git_annex_drop_--dry-run.mdwn create mode 100644 doc/todo/whishlist:_git_annex_drop_--dry-run/comment_1_20ecfa8ffa52c238d21b904076ac69a2._comment create mode 100644 doc/todo/whishlist:_git_annex_drop_--dry-run/comment_2_d19bc268c9467d24baa8d8f77a6e5e09._comment create mode 100644 doc/todo/windows_support.mdwn create mode 100644 doc/todo/windows_support/comment_10_394127e34e07ab3dc0e7b94ee6898866._comment create mode 100644 doc/todo/windows_support/comment_1_3cc26ad8101a22e95a8c60cf0c4dedcc._comment create mode 100644 doc/todo/windows_support/comment_2_8acae818ce468967499050bbe3c532ea._comment create mode 100644 doc/todo/windows_support/comment_3_bd0a12f4c9b884ab8a06082842381a01._comment create mode 100644 doc/todo/windows_support/comment_4_ad06b98b2ddac866ffee334e41fee6a8._comment create mode 100644 doc/todo/windows_support/comment_5_444fc7251f57db241b6e80abae41851c._comment create mode 100644 doc/todo/windows_support/comment_6_34f1f60b570c389bb1e741b990064a7e._comment create mode 100644 doc/todo/windows_support/comment_7_a5ca56c487257434650420acfa60e39f._comment create mode 100644 doc/todo/windows_support/comment_8_61214de7d967740d42905f3823ce2f65._comment create mode 100644 doc/todo/windows_support/comment_9_259a0b1a6f4d8d1944173380adc5e7c8._comment create mode 100644 doc/todo/wishlist:_Add_to_Android_version_to_Google_Play.mdwn create mode 100644 doc/todo/wishlist:_Advanced_settings_for_xmpp_and_webdav.mdwn create mode 100644 doc/todo/wishlist:_Advanced_settings_for_xmpp_and_webdav/comment_1_11c7444ab4988c60732af505b52bde3c._comment create mode 100644 doc/todo/wishlist:_An_--all_option_for_dropunused.mdwn create mode 100644 doc/todo/wishlist:_An_--all_option_for_dropunused/comment_1_d8726d108b3b40116b4ec3c9935f2dff._comment create mode 100644 doc/todo/wishlist:_An_--all_option_for_dropunused/comment_2_578248f7686ba2d80d7dc8b17c0cdf52._comment create mode 100644 doc/todo/wishlist:_An_option_like_--git-dir.mdwn create mode 100644 doc/todo/wishlist:_An_option_like_--git-dir/comment_1_5d877d90b8bdf21d4b8649744d229efd._comment create mode 100644 doc/todo/wishlist:_An_option_like_--git-dir/comment_2_462264821cbc48a433330cbf7ec6044d._comment create mode 100644 doc/todo/wishlist:_An_option_like_--git-dir/comment_3_0c3709b07a0a1091ceeee73b69e0f7ac._comment create mode 100644 doc/todo/wishlist:_Freeing_X_space_on_remote_Y.mdwn create mode 100644 doc/todo/wishlist:_GnuPG_options.mdwn create mode 100644 doc/todo/wishlist:_GnuPG_options/comment_1_6662e8a71ce20acc62147ef41ecffa50._comment create mode 100644 doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size.mdwn create mode 100644 doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size/comment_1_019a2457e07377510feaa089a93bd76c._comment create mode 100644 doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size/comment_3_29a154699339bf040af0ee8aa24034f1._comment create mode 100644 doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size/comment_3_8f7e1c4a5c714cbd719ee170354d79fa._comment create mode 100644 doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size/comment_4_c7335f757e5546aa841cab38fffe7605._comment create mode 100644 doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size/comment_5_d2a845354f23d07880612740cf99ddd4._comment create mode 100644 doc/todo/wishlist:_Option_to_specify_max_transfer_rate.mdwn create mode 100644 doc/todo/wishlist:_Option_to_specify_max_transfer_rate/comment_1_4fd870e14b5b70c8a6ade41406294387._comment create mode 100644 doc/todo/wishlist:_Option_to_specify_max_transfer_rate/comment_2_dd854f297ad6a94b54be9f3edfd0f766._comment create mode 100644 doc/todo/wishlist:_Option_to_specify_max_transfer_rate/comment_3_a8b7e90a473d5937807cc7eb456efe33._comment create mode 100644 doc/todo/wishlist:_Prevent_repeated_password_prompts_for_one_command.mdwn create mode 100644 doc/todo/wishlist:_Prevent_repeated_password_prompts_for_one_command/comment_1_3f9c0d08932c2ede61c802a91261a1f7._comment create mode 100644 doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates.mdwn create mode 100644 doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_10_d78d79fb2f3713aa69f45d2691cf8dfe._comment create mode 100644 doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_11_4316d9d74312112dc4c823077af7febe._comment create mode 100644 doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_12_ed6d07f16a11c6eee7e3d5005e8e6fa3._comment create mode 100644 doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_1_fd213310ee548d8726791d2b02237fde._comment create mode 100644 doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_2_4394bde1c6fd44acae649baffe802775._comment create mode 100644 doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_3_076cb22057583957d5179d8ba9004605._comment create mode 100644 doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_4_f120d1e83c1a447f2ecce302fc69cf74._comment create mode 100644 doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_5_5c30294b3c59fdebb1eef0ae5da4cd4f._comment create mode 100644 doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_6_f24541ada1c86d755acba7e9fa7cff24._comment create mode 100644 doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_7_c39f1bb7c61a89b238c61bee1c049767._comment create mode 100644 doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_8_221ed2e53420278072a6d879c6f251d1._comment create mode 100644 doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_9_aecfa896c97b9448f235bce18a40621d._comment create mode 100644 doc/todo/wishlist:_Restore_s3_files_moved_to_Glacier.mdwn create mode 100644 doc/todo/wishlist:_Tell_git_annex___40__assistant__41___which_files___40__not__41___to_annex_via_.gitattributes.mdwn create mode 100644 doc/todo/wishlist:___34__git_annex_add__34___multiple_processes.mdwn create mode 100644 doc/todo/wishlist:___34__git_annex_add__34___multiple_processes/comment_1_85b14478411a33e6186a64bd41f0910d._comment create mode 100644 doc/todo/wishlist:___34__git_annex_add__34___multiple_processes/comment_2_82e857f463cfdf73c70f6c0a9f9a31d6._comment create mode 100644 doc/todo/wishlist:___34__git_annex_add__34___multiple_processes/comment_3_8af85eba7472d9025c6fae4f03e3ad75._comment create mode 100644 doc/todo/wishlist:___34__quiet__34___annex_get_for_centralized_use_case.mdwn create mode 100644 doc/todo/wishlist:___34__quiet__34___annex_get_for_centralized_use_case/comment_1_5c8812973cf91b046e7fc44d7e86c78e._comment create mode 100644 doc/todo/wishlist:___34__quiet__34___annex_get_for_centralized_use_case/comment_2_f36b6a5b128423211aac91a252ecf85f._comment create mode 100644 doc/todo/wishlist:___34__quiet__34___annex_get_for_centralized_use_case/comment_3_ad1569b2405acacd2e37f42b82f24c88._comment create mode 100644 doc/todo/wishlist:___34__quiet__34___annex_get_for_centralized_use_case/comment_4_8aba90150fe178ce9712ad951628f3d6._comment create mode 100644 doc/todo/wishlist:___34__quiet__34___annex_get_for_centralized_use_case/comment_5_6f42d240e0021f4dfa37146bea3f5d7e._comment create mode 100644 doc/todo/wishlist:___34__quiet__34___annex_get_for_centralized_use_case/comment_6_5fda455febf728b079f26fe42bf7bcab._comment create mode 100644 doc/todo/wishlist:___34__quiet__34___annex_get_for_centralized_use_case/comment_7_f1052ab997f1a2cccbabfd1533fc0a59._comment create mode 100644 doc/todo/wishlist:___34__quiet__34___annex_get_for_centralized_use_case/comment_8_07804647b6023436878756bd97a23f32._comment create mode 100644 doc/todo/wishlist:___39__get__39___queue_and_schedule..mdwn create mode 100644 doc/todo/wishlist:___39__whereis__39___support_in_the_webapp.mdwn create mode 100644 doc/todo/wishlist:___96__git_annex_drop_--relaxed__96__.mdwn create mode 100644 doc/todo/wishlist:___96__git_annex_drop_--relaxed__96__/comment_1_c83a6cddd0ce222205a149cfa41ca395._comment create mode 100644 doc/todo/wishlist:___96__git_annex_drop_--relaxed__96__/comment_2_353fbc2bcc40cb8c9af42907a34c6e5a._comment create mode 100644 doc/todo/wishlist:___96__git_annex_fsck_--checksums__96___--_verify_checksums_but_disregard_annex.numcopies.mdwn create mode 100644 doc/todo/wishlist:___96__git_annex_fsck_--checksums__96___--_verify_checksums_but_disregard_annex.numcopies/comment_1_6bcf067e4860bdfeb1d7b9fd1702a43a._comment create mode 100644 doc/todo/wishlist:___96__git_annex_import__96___--_An_easy_way_to_get_data_into_an_annex.mdwn create mode 100644 doc/todo/wishlist:___96__git_annex_import__96___--_An_easy_way_to_get_data_into_an_annex/comment_1_b9fd1bfaf9a3d238fdb7bc9c2d75fe5f._comment create mode 100644 doc/todo/wishlist:___96__git_annex_import__96___--_An_easy_way_to_get_data_into_an_annex/comment_2_56f6972413c6f0d9f414245b6f4d27b9._comment create mode 100644 doc/todo/wishlist:___96__git_annex_import__96___--_An_easy_way_to_get_data_into_an_annex/comment_3_2c094bef802a2182de4fcd0def1ad29b._comment create mode 100644 doc/todo/wishlist:___96__git_annex_import__96___--_An_easy_way_to_get_data_into_an_annex/comment_4_14915c43001f7f72c9fe5119a104ef5c._comment create mode 100644 doc/todo/wishlist:___96__git_annex_sync_-m__96__.mdwn create mode 100644 doc/todo/wishlist:_a_spec.remote_for_network_directories_that_would_mount_them_whenever_needed___40__e.g.__44___with_WebDAV__41__.mdwn create mode 100644 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 create mode 100644 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 create mode 100644 doc/todo/wishlist:_add_systemd_services_file_samples_for_assistant_and_webapp.mdwn create mode 100644 doc/todo/wishlist:_add_systemd_services_file_samples_for_assistant_and_webapp/comment_1_b89e90f9a70748c95aaf81740a40b76e._comment create mode 100644 doc/todo/wishlist:_add_systemd_services_file_samples_for_assistant_and_webapp/comment_2_d64361380cb18b98ddb43ada1c9f540a._comment create mode 100644 doc/todo/wishlist:_addurl_https:.mdwn create mode 100644 doc/todo/wishlist:_addurl_https:/comment_1_4e8f5e1fc52c3000eb2a1dad0624906e._comment create mode 100644 doc/todo/wishlist:_allow_configuration_of_downloader_for_addurl.mdwn create mode 100644 doc/todo/wishlist:_allow_the_same_remote_to_be_accissable_via_different_methods.mdwn create mode 100644 doc/todo/wishlist:_allow_the_same_remote_to_be_accissable_via_different_methods/comment_1_abb6263f3807160222bba1122475c89c._comment create mode 100644 doc/todo/wishlist:_allow_users_to_provide_UUID_when_running___96__git_annex_init__96__.mdwn create mode 100644 doc/todo/wishlist:_an___34__assistant__34___for_web-browsing_--_tracking_the_sources_of_the_downloads.mdwn create mode 100644 doc/todo/wishlist:_an___34__assistant__34___for_web-browsing_--_tracking_the_sources_of_the_downloads/comment_1_36ae3c75053d5ec278b5e6eb2084d57a._comment create mode 100644 doc/todo/wishlist:_an___34__assistant__34___for_web-browsing_--_tracking_the_sources_of_the_downloads/comment_3_be8eb800523db8cf7a2c68a28fbf5ea5._comment create mode 100644 doc/todo/wishlist:_an___34__assistant__34___for_web-browsing_--_tracking_the_sources_of_the_downloads/comment_3_d9f725de41a8572c85e4c6d9b4bcc927._comment create mode 100644 doc/todo/wishlist:_an___34__assistant__34___for_web-browsing_--_tracking_the_sources_of_the_downloads/comment_4_f52492e4cc6f965515800bd1c0e05c90._comment create mode 100644 doc/todo/wishlist:_an___34__assistant__34___for_web-browsing_--_tracking_the_sources_of_the_downloads/comment_5_5b36656fc5fa124e763f06711d9da32b._comment create mode 100644 doc/todo/wishlist:_an___34__assistant__34___for_web-browsing_--_tracking_the_sources_of_the_downloads/comment_6_285215a4466806baf85b8606f680494a._comment create mode 100644 doc/todo/wishlist:_an___34__assistant__34___for_web-browsing_--_tracking_the_sources_of_the_downloads/comment_7_15bf62e46db4b84ed3156f550f03de42._comment create mode 100644 doc/todo/wishlist:_annex.largefiles_configuration_in_webapp_and_sync.mdwn create mode 100644 doc/todo/wishlist:_annex.largefiles_configuration_in_webapp_and_sync/comment_1_db632de391ce9fce42af51a770ed3aeb._comment create mode 100644 doc/todo/wishlist:_annex.largefiles_configuration_in_webapp_and_sync/comment_2_4a0931d9884054d764fde315d4fe4851._comment create mode 100644 doc/todo/wishlist:_annex.largefiles_support_for_mimetypes.mdwn create mode 100644 doc/todo/wishlist:_annex.largefiles_support_for_mimetypes/comment_1_304431bb62b5b8a64edc37a11bbaff59._comment create mode 100644 doc/todo/wishlist:_archive_from_remote_with_the_least_free_space.mdwn create mode 100644 doc/todo/wishlist:_archive_from_remote_with_the_least_free_space/comment_1_6813fdc7ecc98765a5d35d34163a1712._comment create mode 100644 doc/todo/wishlist:_archive_from_remote_with_the_least_free_space/comment_2_21a249cedca1ceb80d10784004735524._comment create mode 100644 doc/todo/wishlist:_assistant_autostart_port_and_secret_configuration.mdwn create mode 100644 doc/todo/wishlist:_assistant_autostart_port_and_secret_configuration/comment_1_be53b8456eed7eadad5d4b8465c8a42b._comment create mode 100644 doc/todo/wishlist:_command_options_changes.mdwn create mode 100644 doc/todo/wishlist:_command_options_changes/comment_1_bfba72a696789bf21b2435dea15f967a._comment create mode 100644 doc/todo/wishlist:_command_options_changes/comment_2_f6a637c78c989382e3c22d41b7fb4cc2._comment create mode 100644 doc/todo/wishlist:_command_options_changes/comment_3_bf1114533d2895804e531e76eb6b8095._comment create mode 100644 doc/todo/wishlist:_define_remotes_that_must_have_all_files.mdwn create mode 100644 doc/todo/wishlist:_define_remotes_that_must_have_all_files/comment_1_cceccc1a1730ac688d712b81a44e31c3._comment create mode 100644 doc/todo/wishlist:_define_remotes_that_must_have_all_files/comment_2_eec848fcf3979c03cbff2b7407c75a7a._comment create mode 100644 doc/todo/wishlist:_detection_of_merge_conflicts.mdwn create mode 100644 doc/todo/wishlist:_disable_automatic_commits.mdwn create mode 100644 doc/todo/wishlist:_display_name_of_object_when_addWatcher_gets_a_permission_denied.mdwn create mode 100644 doc/todo/wishlist:_display_name_of_object_when_addWatcher_gets_a_permission_denied/comment_1_d2665e7347689b520d37561cfddf0aa8._comment create mode 100644 doc/todo/wishlist:_display_name_of_object_when_addWatcher_gets_a_permission_denied/comment_2_db153571a32fb072453ed583e3e9ccf4._comment create mode 100644 doc/todo/wishlist:_display_status_of_remotes_in_the_webapp.mdwn create mode 100644 doc/todo/wishlist:_do_round_robin_downloading_of_data.mdwn create mode 100644 doc/todo/wishlist:_do_round_robin_downloading_of_data/comment_1_460335b0e59ad03871c524f1fe812357._comment create mode 100644 doc/todo/wishlist:_dropping_git-annex_history.mdwn create mode 100644 doc/todo/wishlist:_dropping_git-annex_history/comment_1_a4bee2e26b22a9bdaadc05b7227769ef._comment create mode 100644 doc/todo/wishlist:_dropping_git-annex_history/comment_2_f6d750bfe0c9d8a2aa6bc218ca5c49cc._comment create mode 100644 doc/todo/wishlist:_encrypted_git_remote_on_hosting_site_from_webapp.mdwn create mode 100644 doc/todo/wishlist:_generic_annex.cost-command.mdwn create mode 100644 doc/todo/wishlist:_git-annex_replicate.mdwn create mode 100644 doc/todo/wishlist:_git-annex_replicate/comment_1_9926132ec6052760cdf28518a24e2358._comment create mode 100644 doc/todo/wishlist:_git-annex_replicate/comment_2_c43932f4194aba8fb2470b18e0817599._comment create mode 100644 doc/todo/wishlist:_git-annex_replicate/comment_3_c13f4f9c3d5884fc6255fd04feadc2b1._comment create mode 100644 doc/todo/wishlist:_git-annex_replicate/comment_4_63f24abf086d644dced8b01e1a9948c9._comment create mode 100644 doc/todo/wishlist:_git_annex_diff.mdwn create mode 100644 doc/todo/wishlist:_git_annex_put_--_same_as_get__44___but_for_defaults.mdwn create mode 100644 doc/todo/wishlist:_git_annex_put_--_same_as_get__44___but_for_defaults/comment_1_d5413c8acce308505e4e2bec82fb1261._comment create mode 100644 doc/todo/wishlist:_git_annex_put_--_same_as_get__44___but_for_defaults/comment_2_0aa227c85d34dfff4e94febca44abea8._comment create mode 100644 doc/todo/wishlist:_git_annex_put_--_same_as_get__44___but_for_defaults/comment_3_2082f4d708a584a1403cc1d4d005fb56._comment create mode 100644 doc/todo/wishlist:_git_annex_status.mdwn create mode 100644 doc/todo/wishlist:_git_annex_status/comment_1_994bfd12c5d82e08040d6116915c5090._comment create mode 100644 doc/todo/wishlist:_git_annex_status/comment_2_c2b0ce025805b774dc77ce264a222824._comment create mode 100644 doc/todo/wishlist:_git_annex_status/comment_3_d1fd70c67243971c96d59e1ffb7ef6e7._comment create mode 100644 doc/todo/wishlist:_git_annex_status/comment_4_9aeeb83d202dc8fb33ff364b0705ad94._comment create mode 100644 doc/todo/wishlist:_git_backend_for_git-annex.mdwn create mode 100644 doc/todo/wishlist:_git_backend_for_git-annex/comment_1_04319051fedc583e6c326bb21fcce5a5._comment create mode 100644 doc/todo/wishlist:_git_backend_for_git-annex/comment_2_7f529f19a47e10b571f65ab382e97fd5._comment create mode 100644 doc/todo/wishlist:_git_backend_for_git-annex/comment_3_a077bbad3e4b07cce019eb55a45330e7._comment create mode 100644 doc/todo/wishlist:_git_backend_for_git-annex/comment_4_ecca429e12d734b509c671166a676c9d._comment create mode 100644 doc/todo/wishlist:_git_backend_for_git-annex/comment_5_3459f0b41d818c23c8fb33edb89df634._comment create mode 100644 doc/todo/wishlist:_history_of_operations.mdwn create mode 100644 doc/todo/wishlist:_history_of_operations/comment_1_f9a77ce83c6f39b6272d5c577ffbb9f9._comment create mode 100644 doc/todo/wishlist:_incremental_unannex___40__currently_requires_twice_the_size_of_repo_to_complete__41__.mdwn create mode 100644 doc/todo/wishlist:_incremental_unannex___40__currently_requires_twice_the_size_of_repo_to_complete__41__/comment_1_067b29fc47d26b9da0766f9810684ae8._comment create mode 100644 doc/todo/wishlist:_make_git_annex_reinject_work_in_direct_mode.mdwn create mode 100644 doc/todo/wishlist:_make_partial_files_available_during_transfer.mdwn create mode 100644 doc/todo/wishlist:_make_partial_files_available_during_transfer/comment_3_1304a721da6f5133fdfa1dac507f1ecb._comment create mode 100644 doc/todo/wishlist:_more_descriptive_commit_messages_in_git-annex_branch.mdwn create mode 100644 doc/todo/wishlist:_more_info_in_the_standard_commit_message_of___96__sync__96__.mdwn create mode 100644 doc/todo/wishlist:_move_pending_transfers_for_a_host_to_the_end_of_the_queue_when_one_fails.mdwn create mode 100644 doc/todo/wishlist:_move_pending_transfers_for_a_host_to_the_end_of_the_queue_when_one_fails/comment_1_82ee9de610a0ac55cd1c27c211079e5b._comment create mode 100644 doc/todo/wishlist:_move_pending_transfers_for_a_host_to_the_end_of_the_queue_when_one_fails/comment_2_bea55156bd32cf9e6dd9b946ba1bb8c1._comment create mode 100644 doc/todo/wishlist:_option_to_disable_url_checking_with_addurl.mdwn create mode 100644 doc/todo/wishlist:_option_to_disable_url_checking_with_addurl/comment_1_868a380faa1e55faa3c2d314e3258e86._comment create mode 100644 doc/todo/wishlist:_option_to_print_more_info_with___39__unused__39__.mdwn create mode 100644 doc/todo/wishlist:_perform_fsck_remotely.mdwn create mode 100644 doc/todo/wishlist:_perform_fsck_remotely/comment_1_db92311dcdb1ef0ab0413f83e191c70c._comment create mode 100644 doc/todo/wishlist:_perform_fsck_remotely/comment_2_2f0dbaf143d94290bfbebb6869eb7241._comment create mode 100644 doc/todo/wishlist:_print_locations_for_files_in_rsync_remote.mdwn create mode 100644 doc/todo/wishlist:_push_to_cia.vc_from_the_website__39__s_repo__44___not_your_personal_one.mdwn create mode 100644 doc/todo/wishlist:_push_to_cia.vc_from_the_website__39__s_repo__44___not_your_personal_one/comment_1_3480b0ec629ef29a151408d869186bf8._comment create mode 100644 doc/todo/wishlist:_query_things_like_description__44___trust_level.mdwn create mode 100644 doc/todo/wishlist:_query_things_like_description__44___trust_level/comment_1_14311384788312b96e550749ab7de9ea._comment create mode 100644 doc/todo/wishlist:_query_things_like_description__44___trust_level/comment_2_342d1ac07573c7ef4e27f003a692e261._comment create mode 100644 doc/todo/wishlist:_recursive_directory_remote_setup__47__addurl.mdwn create mode 100644 doc/todo/wishlist:_recursive_directory_remote_setup__47__addurl/comment_1_b79976afc2242791523e63831f30af71._comment create mode 100644 doc/todo/wishlist:_recursive_directory_remote_setup__47__addurl/comment_2_1741d2392006a9af9cfd1f3b847600b9._comment create mode 100644 doc/todo/wishlist:_simple_url_for_webapp.mdwn create mode 100644 doc/todo/wishlist:_simple_url_for_webapp/comment_1_552aad504fbb68d1f85abfde8c535e69._comment create mode 100644 doc/todo/wishlist:_simpler_gpg_usage.mdwn create mode 100644 doc/todo/wishlist:_simpler_gpg_usage/comment_1_6923fa6ebc0bbe7d93edb1d01d7c46c5._comment create mode 100644 doc/todo/wishlist:_simpler_gpg_usage/comment_2_6fc874b6c391df242bd2592c4a65eae8._comment create mode 100644 doc/todo/wishlist:_simpler_gpg_usage/comment_3_012f340c8c572fe598fc860c1046dabd._comment create mode 100644 doc/todo/wishlist:_simpler_gpg_usage/comment_4_e0c2a13217b795964f3b630c001661ef._comment create mode 100644 doc/todo/wishlist:_simpler_gpg_usage/comment_5_9668b58eb71901e1db8da7db38e068ca._comment create mode 100644 doc/todo/wishlist:_spec.remotes_for_other_peer_network_data_stores___40__gnunet__44___freenet__41__.mdwn create mode 100644 doc/todo/wishlist:_spec.remotes_for_other_peer_network_data_stores___40__gnunet__44___freenet__41__/comment_1_e2c2047e7401cb95a82ffb686a732859._comment create mode 100644 doc/todo/wishlist:_spec.remotes_for_other_peer_network_data_stores___40__gnunet__44___freenet__41__/comment_2_472b576afdb169b233edd01adcb2123d._comment create mode 100644 doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote.mdwn create mode 100644 doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote/comment_1_1a383c30df4fb1767f13d8c670b0c0b5._comment create mode 100644 doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote/comment_2_81f7f893ac36c145b31f02db6a682a17._comment create mode 100644 doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote/comment_3_a7e3cd68c5e5f05139151a58f358df95._comment create mode 100644 doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote/comment_4_a57947ed257b28bbe995a68bfeb5eeaa._comment create mode 100644 doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote/comment_5_a0612ae05dbda7f7935be648b42b30fc._comment create mode 100644 doc/todo/wishlist:_special_remote_Ubuntu_One.mdwn create mode 100644 doc/todo/wishlist:_special_remote_for_sftp_or_rsync.mdwn create mode 100644 doc/todo/wishlist:_special_remote_for_sftp_or_rsync/comment_1_6f07d9cc92cf8b4927b3a7d1820c9140._comment create mode 100644 doc/todo/wishlist:_special_remote_for_sftp_or_rsync/comment_2_84e4414c88ae91c048564a2cdc2d3250._comment create mode 100644 doc/todo/wishlist:_special_remote_for_sftp_or_rsync/comment_3_79de7ac44e3c0f0f5691a56d3fb88897._comment create mode 100644 doc/todo/wishlist:_special_remote_mega.co.nz.mdwn create mode 100644 doc/todo/wishlist:_special_remote_mega.co.nz/comment_2_6ca08ef808d4336fc42d0f279d6627b5._comment create mode 100644 doc/todo/wishlist:_support_copy_--from__61__x_--to__61__y.mdwn create mode 100644 doc/todo/wishlist:_support_copy_--from__61__x_--to__61__y/comment_1_cf8e0f16b723516374c95a93e4da42fc._comment create mode 100644 doc/todo/wishlist:_support_copy_--from__61__x_--to__61__y/comment_2_d35359c9dd4dd4365d9a7caf695ff833._comment create mode 100644 doc/todo/wishlist:_support_drop__44___find_on_special_remotes.mdwn create mode 100644 doc/todo/wishlist:_support_drop__44___find_on_special_remotes/comment_1_f11ed642a83d965076778a162f701e84._comment create mode 100644 doc/todo/wishlist:_support_for_more_ssh_urls_.mdwn create mode 100644 doc/todo/wishlist:_swift_backend.mdwn create mode 100644 doc/todo/wishlist:_swift_backend/comment_1_e6efbb35f61ee521b473a92674036788._comment create mode 100644 doc/todo/wishlist:_swift_backend/comment_2_5d8c83b0485112e98367b7abaab3f4e3._comment create mode 100644 doc/todo/wishlist:_swift_backend/comment_3_bf8625b909c3a7321cae40e6f145e874._comment create mode 100644 doc/todo/wishlist:_swift_backend/comment_4_4d97d12ddd99834788e94648c8eebef9._comment create mode 100644 doc/todo/wishlist:_traffic_accounting_for_git-annex.mdwn create mode 100644 doc/todo/wishlist:_unify_directory_scheme_for_the_store.mdwn create mode 100644 doc/todo/wishlist:_unify_directory_scheme_for_the_store/comment_1_44da58beaaab359ecaba7fb905ca4ae1._comment create mode 100644 doc/todo/wishlist:_unify_directory_scheme_for_the_store/comment_2_bc698c501ecdb56df57171f4f3bb831a._comment create mode 100644 doc/todo/wishlist:_unify_directory_scheme_for_the_store/comment_3_e555d0dbbaa05528806905c6a940724b._comment create mode 100644 doc/todo/wishlist:_use_hardlinks_for_local_clones.mdwn create mode 100644 doc/todo/wishlist:_use_hardlinks_for_local_clones/comment_1_85064fafe472a5bd395d60ce8f7acb56._comment create mode 100644 doc/todo/wishlist:_vicfg_possible_repo_group_names.mdwn create mode 100644 doc/todo/wishlist:alias_system.mdwn create mode 100644 doc/todo/wishlist_degraded_files.mdwn create mode 100644 doc/transferring_data.mdwn create mode 100644 doc/trust.mdwn create mode 100644 doc/upgrades.mdwn create mode 100644 doc/upgrades/SHA_size.mdwn create mode 100644 doc/upgrades/SHA_size/comment_1_20f9b7b75786075de666b2146dc13a60._comment create mode 100644 doc/upgrades/gcrypt.mdwn create mode 100644 doc/upgrades/gcrypt/comment_1_606c1527735996ae671f78948e4ad84b._comment create mode 100644 doc/use_case/Alice.mdwn create mode 100644 doc/use_case/Bob.mdwn create mode 100644 doc/users.mdwn create mode 100644 doc/users/anarcat.mdwn create mode 100644 doc/users/chrysn.mdwn create mode 100644 doc/users/clacke.mdwn create mode 100644 doc/users/fmarier.mdwn create mode 100644 doc/users/gebi.mdwn create mode 100644 doc/users/joey.mdwn create mode 100644 doc/users/tobiastheviking.mdwn create mode 100644 doc/videos.mdwn create mode 100644 doc/videos/FOSDEM2012.mdwn create mode 100644 doc/videos/LCA2013.mdwn create mode 100644 doc/videos/git-annex_assistant_archiving.mdwn create mode 100644 doc/videos/git-annex_assistant_introduction.mdwn create mode 100644 doc/videos/git-annex_assistant_introduction/comment_1_f42ad4183c2c28319d3705a82fceb82f._comment create mode 100644 doc/videos/git-annex_assistant_introduction/comment_2_b62f4eeeac1138570f7cb8c98d41c2cb._comment create mode 100644 doc/videos/git-annex_assistant_remote_sharing.mdwn create mode 100644 doc/videos/git-annex_assistant_sync_demo.mdwn create mode 100644 doc/videos/git-annex_watch_demo.mdwn create mode 100644 doc/videos/git-annex_weppapp_demo.mdwn create mode 100644 doc/walkthrough.mdwn create mode 100644 doc/walkthrough/adding_a_remote.mdwn create mode 100644 doc/walkthrough/adding_a_remote/comment_1_0a59355bd33a796aec97173607e6adc9._comment create mode 100644 doc/walkthrough/adding_a_remote/comment_2_f8cd79ef1593a8181a7f1086a87713e8._comment create mode 100644 doc/walkthrough/adding_a_remote/comment_3_60691af4400521b5a8c8d75efe3b44cb._comment create mode 100644 doc/walkthrough/adding_a_remote/comment_4_6f7cf5c330272c96b3abeb6612075c9d._comment create mode 100644 doc/walkthrough/adding_files.mdwn create mode 100644 doc/walkthrough/automatically_managing_content.mdwn create mode 100644 doc/walkthrough/backups.mdwn create mode 100644 doc/walkthrough/creating_a_repository.mdwn create mode 100644 doc/walkthrough/fsck:_verifying_your_data.mdwn create mode 100644 doc/walkthrough/fsck:_when_things_go_wrong.mdwn create mode 100644 doc/walkthrough/getting_file_content.mdwn create mode 100644 doc/walkthrough/modifying_annexed_files.mdwn create mode 100644 doc/walkthrough/modifying_annexed_files/comment_1_624b4a0b521b553d68ab6049f7dbaf8c._comment create mode 100644 doc/walkthrough/modifying_annexed_files/comment_2_b000622304535d32b69db17d51156b21._comment create mode 100644 doc/walkthrough/more.mdwn create mode 100644 doc/walkthrough/moving_file_content_between_repositories.mdwn create mode 100644 doc/walkthrough/moving_file_content_between_repositories/comment_1_4c30ade91fc7113a95960aa3bd1d5427._comment create mode 100644 doc/walkthrough/moving_file_content_between_repositories/comment_2_7d90e1e150e7524ba31687108fcc38d6._comment create mode 100644 doc/walkthrough/moving_file_content_between_repositories/comment_3_558d80384434207b9cfc033763863de3._comment create mode 100644 doc/walkthrough/moving_file_content_between_repositories/comment_4_a2f343eceed9e9fba1670f21e0fc6af4._comment create mode 100644 doc/walkthrough/removing_files.mdwn create mode 100644 doc/walkthrough/removing_files/comment_1_cb65e7c510b75be1c51f655b058667c6._comment create mode 100644 doc/walkthrough/removing_files/comment_2_64709ea4558915edd5c8ca4486965b07._comment create mode 100644 doc/walkthrough/removing_files:_When_things_go_wrong.mdwn create mode 100644 doc/walkthrough/renaming_files.mdwn create mode 100644 doc/walkthrough/syncing.mdwn create mode 100644 doc/walkthrough/transferring_files:_When_things_go_wrong.mdwn create mode 100644 doc/walkthrough/unused_data.mdwn create mode 100644 doc/walkthrough/unused_data/comment_1_684b7b652d3a8ec04f32129c5528f1ab._comment create mode 100644 doc/walkthrough/using_bup.mdwn create mode 100644 doc/walkthrough/using_ssh_remotes.mdwn create mode 100644 doc/walkthrough/using_ssh_remotes/comment_10_98e97c4d7fbbcd449eddf683967a71d6._comment create mode 100644 doc/walkthrough/using_ssh_remotes/comment_11_f2775a151ed50caba27057bd9c38bae2._comment create mode 100644 doc/walkthrough/using_ssh_remotes/comment_12_a8bc6110128431ca2a8624ddc75ea364._comment create mode 100644 doc/walkthrough/using_ssh_remotes/comment_2_365db5820d96d5daa62c19fd76fcdf1e._comment create mode 100644 doc/walkthrough/using_ssh_remotes/comment_2_451fd0c6a25ee61ef137e8e5be0c286b._comment create mode 100644 doc/walkthrough/using_ssh_remotes/comment_3_b2f15a46620385da26d5fe8f11ebfc1a._comment create mode 100644 doc/walkthrough/using_ssh_remotes/comment_4_433ccc87fbb0a13e32d59d77f0b4e56c._comment create mode 100644 doc/walkthrough/using_ssh_remotes/comment_5_a9805c7965da0b88a1c9f7f207c450a1._comment create mode 100644 doc/walkthrough/using_ssh_remotes/comment_6_9d5c12c056892b706cf100ea01866685._comment create mode 100644 doc/walkthrough/using_ssh_remotes/comment_7_725e7dbb2d0a74a035127cb01ee0442c._comment create mode 100644 doc/walkthrough/using_ssh_remotes/comment_8_8448e55026d2c2b50d8da41707686bea._comment create mode 100644 doc/walkthrough/using_ssh_remotes/comment_9_61833299a9878f23ac57598fa6da8839._comment create mode 100644 doc/walkthrough/using_tags_and_branches.mdwn create mode 100755 ghci create mode 100644 git-annex.cabal create mode 100644 git-annex.hs create mode 100644 git-union-merge.hs create mode 100644 standalone/android/Makefile create mode 100644 standalone/android/abiversion create mode 100755 standalone/android/buildchroot create mode 100755 standalone/android/buildchroot-inchroot create mode 100755 standalone/android/buildchroot-inchroot-asuser create mode 100644 standalone/android/busybox_config create mode 100755 standalone/android/clean-haskell-packages create mode 100644 standalone/android/dropbear.patch create mode 100644 standalone/android/evilsplicer-headers.hs create mode 100644 standalone/android/haskell-patches/DAV_build-without-TH.patch create mode 100644 standalone/android/haskell-patches/HTTP_4000.2.8-0001-build-with-base-4.8.patch create mode 100644 standalone/android/haskell-patches/MissingH_1.2.0.0_0001-fix-build-not-Android-specific.patch create mode 100644 standalone/android/haskell-patches/MonadCatchIO-transformers_hack-to-get-to-build-with-new-ghc.patch create mode 100644 standalone/android/haskell-patches/SafeSemaphore_fix-build-with-new-base.patch create mode 100644 standalone/android/haskell-patches/async_fix-build-with-new-ghc.patch create mode 100644 standalone/android/haskell-patches/bloomfilter_fix-build-with-newer-base.patch create mode 100644 standalone/android/haskell-patches/comonad_cross-build.patch create mode 100644 standalone/android/haskell-patches/crypto-numbers_build-fix.patch create mode 100644 standalone/android/haskell-patches/distributive_0.3-0001-fixes-for-cross-build.patch create mode 100644 standalone/android/haskell-patches/entropy_cross-build.patch create mode 100644 standalone/android/haskell-patches/gnuidn_fix-build-with-new-base.patch create mode 100644 standalone/android/haskell-patches/gnutls_0.1.4-0001-statically-link-with-gnutls.patch create mode 100644 standalone/android/haskell-patches/gsasl_0.3.5-0001-link-with-libgsasl.patch create mode 100644 standalone/android/haskell-patches/iproute_1.2.11_0001-build-without-IPv6-stuff.patch create mode 100644 standalone/android/haskell-patches/language-javascript_fix-build-with-new-ghc.patch create mode 100644 standalone/android/haskell-patches/lens_various-hacking-to-cross-build.patch create mode 100644 standalone/android/haskell-patches/lifted-base_crossbuild.patch create mode 100644 standalone/android/haskell-patches/network_2.4.1.0_0001-android-port-fixes.patch create mode 100644 standalone/android/haskell-patches/network_2.4.1.0_0002-remove-Network.BSD-symbols-not-available-in-bionic.patch create mode 100644 standalone/android/haskell-patches/network_2.4.1.0_0003-configure-misdetects-accept4.patch create mode 100644 standalone/android/haskell-patches/network_2.4.1.0_0004-getprotobyname-hack-for-tcp-and-udp.patch create mode 100644 standalone/android/haskell-patches/persistent-template_stub-out.patch create mode 100644 standalone/android/haskell-patches/persistent_1.1.5.1_0001-disable-TH.patch create mode 100644 standalone/android/haskell-patches/primitive_0.5.0.1_0001-disable-i386-opt-stuff-to-allow-cross-compilation.patch create mode 100644 standalone/android/haskell-patches/process_fix-build-with-new-ghc.patch create mode 100644 standalone/android/haskell-patches/profunctors_3.3-0001-fix-cross-build.patch create mode 100644 standalone/android/haskell-patches/shakespeare-css_1.0.2_0001-remove-TH.patch create mode 100644 standalone/android/haskell-patches/shakespeare-css_1.0.2_0002-expose-modules-used-by-TH.patch create mode 100644 standalone/android/haskell-patches/shakespeare_1.0.3_0001-export-symbol-used-by-TH-splices.patch create mode 100644 standalone/android/haskell-patches/skein_hardcode_little-endian.patch create mode 100644 standalone/android/haskell-patches/socks_0.4.2_0001-remove-IPv6-stuff.patch create mode 100644 standalone/android/haskell-patches/stm-chans_cross-build.patch create mode 100644 standalone/android/haskell-patches/unix-time_hack-for-Bionic.patch create mode 100644 standalone/android/haskell-patches/uuid_build-without-v1-uuid-which-needs-network-info.patch create mode 100644 standalone/android/haskell-patches/vector_hack-to-build-with-new-ghc.patch create mode 100644 standalone/android/haskell-patches/wai-app-static_deal-with-TH.patch create mode 100644 standalone/android/haskell-patches/yesod-auth_don-t-really-build.patch create mode 100644 standalone/android/haskell-patches/yesod-core_expand_TH.patch create mode 100644 standalone/android/haskell-patches/yesod-form_spliced-TH.patch create mode 100644 standalone/android/haskell-patches/yesod-persistent_do-not-really-build.patch create mode 100644 standalone/android/haskell-patches/yesod-routes_export-module-referenced-by-TH-splices.patch create mode 100644 standalone/android/haskell-patches/yesod_001_hacked-up-for-Android.patch create mode 100644 standalone/android/haskell-patches/yesod_002_hack-around-missing-symbols.patch create mode 100644 standalone/android/haskell-patches/zlib_0.5.4.0_0001-hack-to-build-on-Android.patch create mode 100644 standalone/android/icons/drawable-hdpi/ic_launcher.png create mode 100644 standalone/android/icons/drawable-hdpi/ic_stat_service_notification_icon.png create mode 100644 standalone/android/icons/drawable-ldpi/ic_launcher.png create mode 100644 standalone/android/icons/drawable-ldpi/ic_stat_service_notification_icon.png create mode 100644 standalone/android/icons/drawable-mdpi/ic_launcher.png create mode 100644 standalone/android/icons/drawable-mdpi/ic_stat_service_notification_icon.png create mode 100644 standalone/android/icons/drawable-xhdpi/ic_launcher.png create mode 100644 standalone/android/icons/drawable-xhdpi/ic_stat_service_notification_icon.png create mode 120000 standalone/android/icons/drawable/ic_launcher.png create mode 120000 standalone/android/icons/drawable/ic_stat_service_notification_icon.png create mode 100755 standalone/android/install-haskell-packages create mode 100644 standalone/android/openssh.config.h create mode 100644 standalone/android/openssh.patch create mode 100644 standalone/android/rsync.patch create mode 100755 standalone/android/runshell create mode 100755 standalone/android/start create mode 100644 standalone/android/start.c create mode 100644 standalone/android/term.patch create mode 100644 standalone/licences.gz create mode 100644 standalone/linux/README create mode 100755 standalone/linux/git-annex create mode 100755 standalone/linux/git-annex-shell create mode 100755 standalone/linux/git-annex-webapp create mode 100644 standalone/linux/glibc-libs create mode 100755 standalone/linux/runshell create mode 100644 standalone/osx/git-annex.app/Contents/Info.plist create mode 100644 standalone/osx/git-annex.app/Contents/MacOS/README create mode 100755 standalone/osx/git-annex.app/Contents/MacOS/git-annex create mode 100755 standalone/osx/git-annex.app/Contents/MacOS/git-annex-shell create mode 100755 standalone/osx/git-annex.app/Contents/MacOS/git-annex-webapp create mode 100755 standalone/osx/git-annex.app/Contents/MacOS/runshell create mode 100644 standalone/osx/git-annex.app/Contents/Resources/git-annex.icns create mode 100644 standalone/windows/build.sh create mode 100644 static/activityicon.gif create mode 100644 static/css/bootstrap-responsive.css create mode 100644 static/css/bootstrap.css create mode 100644 static/favicon.ico create mode 100644 static/img/glyphicons-halflings-white.png create mode 100644 static/img/glyphicons-halflings.png create mode 100644 static/jquery.full.js create mode 100644 static/jquery.ui.core.js create mode 100644 static/jquery.ui.mouse.js create mode 100644 static/jquery.ui.sortable.js create mode 100644 static/jquery.ui.widget.js create mode 100644 static/js/bootstrap-collapse.js create mode 100644 static/js/bootstrap-dropdown.js create mode 100644 static/js/bootstrap-modal.js create mode 100644 static/longpolling.js create mode 100644 static/syncicon.gif create mode 100644 templates/README create mode 100644 templates/actionbutton.hamlet create mode 100644 templates/bootstrap.hamlet create mode 100644 templates/configurators/addbox.com.hamlet create mode 100644 templates/configurators/adddrive.hamlet create mode 100644 templates/configurators/adddrive/combine.hamlet create mode 100644 templates/configurators/adddrive/encrypt.hamlet create mode 100644 templates/configurators/adddrive/setupmodal.hamlet create mode 100644 templates/configurators/addglacier.hamlet create mode 100644 templates/configurators/addia.hamlet create mode 100644 templates/configurators/addrepository.hamlet create mode 100644 templates/configurators/addrepository/archive.hamlet create mode 100644 templates/configurators/addrepository/cloud.hamlet create mode 100644 templates/configurators/addrepository/misc.hamlet create mode 100644 templates/configurators/adds3.hamlet create mode 100644 templates/configurators/delete/currentrepository.hamlet create mode 100644 templates/configurators/delete/finished.hamlet create mode 100644 templates/configurators/delete/start.hamlet create mode 100644 templates/configurators/edit/nonannexremote.hamlet create mode 100644 templates/configurators/edit/repository.hamlet create mode 100644 templates/configurators/enableaws.hamlet create mode 100644 templates/configurators/enabledirectory.hamlet create mode 100644 templates/configurators/enableia.hamlet create mode 100644 templates/configurators/enablewebdav.hamlet create mode 100644 templates/configurators/fsck.cassius create mode 100644 templates/configurators/fsck.hamlet create mode 100644 templates/configurators/fsck/form.hamlet create mode 100644 templates/configurators/fsck/formcontent.hamlet create mode 100644 templates/configurators/fsck/preferencesform.hamlet create mode 100644 templates/configurators/fsck/status.hamlet create mode 100644 templates/configurators/genkeymodal.hamlet create mode 100644 templates/configurators/main.hamlet create mode 100644 templates/configurators/needgcrypt.hamlet create mode 100644 templates/configurators/needglaciercli.hamlet create mode 100644 templates/configurators/newrepository.hamlet create mode 100644 templates/configurators/newrepository/combine.hamlet create mode 100644 templates/configurators/newrepository/first.hamlet create mode 100644 templates/configurators/newrepository/form.hamlet create mode 100644 templates/configurators/pairing/disabled.hamlet create mode 100644 templates/configurators/pairing/local/inprogress.hamlet create mode 100644 templates/configurators/pairing/local/prompt.hamlet create mode 100644 templates/configurators/pairing/xmpp/end.hamlet create mode 100644 templates/configurators/pairing/xmpp/friend/confirm.hamlet create mode 100644 templates/configurators/pairing/xmpp/friend/prompt.hamlet create mode 100644 templates/configurators/pairing/xmpp/self/prompt.hamlet create mode 100644 templates/configurators/pairing/xmpp/self/retry.hamlet create mode 100644 templates/configurators/preferences.hamlet create mode 100644 templates/configurators/rsync.net/add.hamlet create mode 100644 templates/configurators/rsync.net/encrypt.hamlet create mode 100644 templates/configurators/ssh/add.hamlet create mode 100644 templates/configurators/ssh/combine.hamlet create mode 100644 templates/configurators/ssh/confirm.hamlet create mode 100644 templates/configurators/ssh/enable.hamlet create mode 100644 templates/configurators/ssh/error.hamlet create mode 100644 templates/configurators/ssh/setupmodal.hamlet create mode 100644 templates/configurators/ssh/testmodal.hamlet create mode 100644 templates/configurators/upgrade/android.hamlet create mode 100644 templates/configurators/xmpp.hamlet create mode 100644 templates/configurators/xmpp/buddylist.hamlet create mode 100644 templates/configurators/xmpp/disabled.hamlet create mode 100644 templates/configurators/xmpp/needcloudrepo.hamlet create mode 100644 templates/control/log.hamlet create mode 100644 templates/control/notrunning.hamlet create mode 100644 templates/control/notrunning.julius create mode 100644 templates/control/repairrepository.hamlet create mode 100644 templates/control/repairrepository/done.hamlet create mode 100644 templates/control/repositoryswitcher.hamlet create mode 100644 templates/control/shutdown.hamlet create mode 100644 templates/controlmenu.hamlet create mode 100644 templates/dashboard/main.hamlet create mode 100644 templates/dashboard/metarefresh.hamlet create mode 100644 templates/dashboard/transfers.cassius create mode 100644 templates/dashboard/transfers.hamlet create mode 100644 templates/documentation/about.hamlet create mode 100644 templates/documentation/license.hamlet create mode 100644 templates/documentation/repogroup.hamlet create mode 100644 templates/error.cassius create mode 100644 templates/error.hamlet create mode 100644 templates/notifications/longpolling.julius create mode 100644 templates/page.cassius create mode 100644 templates/page.hamlet create mode 100644 templates/page.julius create mode 100644 templates/repolist.hamlet create mode 100644 templates/repolist.julius create mode 100644 templates/sidebar/alert.hamlet create mode 100644 templates/sidebar/main.hamlet diff --git a/.ghci b/.ghci new file mode 100644 index 0000000000..c5550cee6e --- /dev/null +++ b/.ghci @@ -0,0 +1 @@ +:load Common diff --git a/Annex.hs b/Annex.hs new file mode 100644 index 0000000000..583cb0e023 --- /dev/null +++ b/Annex.hs @@ -0,0 +1,252 @@ +{- git-annex monad + - + - Copyright 2010-2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE GeneralizedNewtypeDeriving, PackageImports #-} + +module Annex ( + Annex, + AnnexState(..), + PreferredContentMap, + new, + run, + eval, + getState, + changeState, + setFlag, + setField, + setOutput, + getFlag, + getField, + addCleanup, + gitRepo, + inRepo, + fromRepo, + calcRepo, + getGitConfig, + changeGitConfig, + changeGitRepo, + withCurrentState, +) where + +import "mtl" Control.Monad.Reader +import "MonadCatchIO-transformers" Control.Monad.CatchIO +import System.Posix.Types (Fd) +import Control.Concurrent + +import Common +import qualified Git +import qualified Git.Config +import Annex.Direct.Fixup +import Git.CatFile +import Git.CheckAttr +import Git.CheckIgnore +import Git.SharedRepository +import qualified Git.Queue +import Types.Backend +import Types.GitConfig +import qualified Types.Remote +import Types.Crypto +import Types.BranchState +import Types.TrustLevel +import Types.Group +import Types.Messages +import Types.UUID +import Types.FileMatcher +import qualified Utility.Matcher +import qualified Data.Map as M +import qualified Data.Set as S + +{- 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. + -} +newtype Annex a = Annex { runAnnex :: ReaderT (MVar AnnexState) IO a } + deriving ( + Monad, + MonadIO, + MonadReader (MVar AnnexState), + MonadCatchIO, + 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 -> FileInfo -> Annex Bool)) + +-- internal state storage +data AnnexState = AnnexState + { repo :: Git.Repo + , gitconfig :: GitConfig + , backends :: [BackendA Annex] + , remotes :: [Types.Remote.RemoteA Annex] + , output :: MessageState + , force :: Bool + , fast :: Bool + , auto :: Bool + , daemon :: Bool + , branchstate :: BranchState + , repoqueue :: Maybe Git.Queue.Queue + , catfilehandles :: M.Map FilePath CatFileHandle + , checkattrhandle :: Maybe CheckAttrHandle + , checkignorehandle :: Maybe (Maybe CheckIgnoreHandle) + , forcebackend :: Maybe String + , forcenumcopies :: Maybe Int + , limit :: Matcher (FileInfo -> Annex Bool) + , uuidmap :: Maybe UUIDMap + , preferredcontentmap :: Maybe PreferredContentMap + , shared :: Maybe SharedRepository + , forcetrust :: TrustMap + , trustmap :: Maybe TrustMap + , groupmap :: Maybe GroupMap + , ciphers :: M.Map StorableCipher Cipher + , lockpool :: M.Map FilePath Fd + , flags :: M.Map String Bool + , fields :: M.Map String String + , cleanup :: M.Map String (Annex ()) + , inodeschanged :: Maybe Bool + , useragent :: Maybe String + } + +newState :: GitConfig -> Git.Repo -> AnnexState +newState c r = AnnexState + { repo = r + , gitconfig = c + , backends = [] + , remotes = [] + , output = defaultMessageState + , force = False + , fast = False + , auto = False + , daemon = False + , branchstate = startBranchState + , repoqueue = Nothing + , catfilehandles = M.empty + , checkattrhandle = Nothing + , checkignorehandle = Nothing + , forcebackend = Nothing + , forcenumcopies = Nothing + , limit = Left [] + , uuidmap = Nothing + , preferredcontentmap = Nothing + , shared = Nothing + , forcetrust = M.empty + , trustmap = Nothing + , groupmap = Nothing + , ciphers = M.empty + , lockpool = M.empty + , flags = M.empty + , fields = M.empty + , cleanup = M.empty + , inodeschanged = Nothing + , useragent = Nothing + } + +{- 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 + let c = extractGitConfig r' + newState c <$> if annexDirect c then fixupDirect r' else return r' + +{- Performs an action in the Annex monad from a starting state, + - returning a new state. -} +run :: AnnexState -> Annex a -> IO (a, AnnexState) +run s a = do + mvar <- newMVar s + r <- runReaderT (runAnnex a) mvar + s' <- takeMVar mvar + return (r, s') + +{- Performs an action in the Annex monad from a starting state, + - and throws away the new state. -} +eval :: AnnexState -> Annex a -> IO a +eval s a = do + mvar <- newMVar s + runReaderT (runAnnex a) mvar + +getState :: (AnnexState -> v) -> Annex v +getState selector = do + mvar <- ask + s <- liftIO $ readMVar mvar + return $ selector s + +changeState :: (AnnexState -> AnnexState) -> Annex () +changeState modifier = do + mvar <- ask + liftIO $ modifyMVar_ mvar $ return . modifier + +{- Sets a flag to True -} +setFlag :: String -> Annex () +setFlag flag = changeState $ \s -> + s { flags = M.insertWith' const flag True $ flags s } + +{- Sets a field to a value -} +setField :: String -> String -> Annex () +setField field value = changeState $ \s -> + s { fields = M.insertWith' const field value $ fields s } + +{- Adds a cleanup action to perform. -} +addCleanup :: String -> Annex () -> Annex () +addCleanup uid a = changeState $ \s -> + s { cleanup = M.insertWith' const uid a $ cleanup s } + +{- Sets the type of output to emit. -} +setOutput :: OutputType -> Annex () +setOutput o = changeState $ \s -> + s { output = (output s) { outputType = o } } + +{- Checks if a flag was set. -} +getFlag :: String -> Annex Bool +getFlag flag = fromMaybe False . M.lookup flag <$> getState flags + +{- Gets the value of a field. -} +getField :: String -> Annex (Maybe String) +getField field = M.lookup field <$> getState fields + +{- Returns the annex's git repository. -} +gitRepo :: Annex Git.Repo +gitRepo = getState repo + +{- Runs an IO action in the annex's git repository. -} +inRepo :: (Git.Repo -> IO a) -> Annex a +inRepo a = liftIO . a =<< gitRepo + +{- Extracts a value from the annex's git repisitory. -} +fromRepo :: (Git.Repo -> a) -> Annex a +fromRepo a = a <$> gitRepo + +{- Calculates a value from an annex's git repository and its GitConfig. -} +calcRepo :: (Git.Repo -> GitConfig -> IO a) -> Annex a +calcRepo a = do + s <- getState id + liftIO $ a (repo s) (gitconfig s) + +{- Gets the GitConfig settings. -} +getGitConfig :: Annex GitConfig +getGitConfig = getState gitconfig + +{- Modifies a GitConfig setting. -} +changeGitConfig :: (GitConfig -> GitConfig) -> Annex () +changeGitConfig a = changeState $ \s -> s { gitconfig = a (gitconfig s) } + +{- Changing the git Repo data also involves re-extracting its GitConfig. -} +changeGitRepo :: Git.Repo -> Annex () +changeGitRepo r = changeState $ \s -> s + { repo = r + , gitconfig = extractGitConfig r + } + +{- Converts an Annex action into an IO action, that runs with a copy + - of the current Annex state. + - + - Use with caution; the action should not rely on changing the + - state, as it will be thrown away. -} +withCurrentState :: Annex a -> Annex (IO a) +withCurrentState a = do + s <- getState id + return $ eval s a diff --git a/Annex/Branch.hs b/Annex/Branch.hs new file mode 100644 index 0000000000..9838af25f3 --- /dev/null +++ b/Annex/Branch.hs @@ -0,0 +1,533 @@ +{- management of the git-annex branch + - + - Copyright 2011-2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Annex.Branch ( + fullname, + name, + hasOrigin, + hasSibling, + siblingBranches, + create, + update, + forceUpdate, + updateTo, + get, + change, + commit, + forceCommit, + files, + withIndex, + performTransitions, +) where + +import qualified Data.ByteString.Lazy.Char8 as L +import qualified Data.Set as S +import qualified Data.Map as M +import qualified Control.Exception as E + +import Common.Annex +import Annex.BranchState +import Annex.Journal +import qualified Git +import qualified Git.Command +import qualified Git.Ref +import qualified Git.Sha +import qualified Git.Branch +import qualified Git.UnionMerge +import qualified Git.UpdateIndex +import Git.HashObject +import Git.Types +import Git.FilePath +import Annex.CatFile +import Annex.Perms +import qualified Annex +import Utility.Env +import Logs +import Logs.Transitions +import Logs.Trust.Pure +import Annex.ReplaceFile +import qualified Annex.Queue +import Annex.Branch.Transitions +import Annex.Exception + +{- Name of the branch that is used to store git-annex's information. -} +name :: Git.Ref +name = Git.Ref "git-annex" + +{- Fully qualified name of the branch. -} +fullname :: Git.Ref +fullname = Git.Ref $ "refs/heads/" ++ show name + +{- Branch's name in origin. -} +originname :: Git.Ref +originname = Git.Ref $ "origin/" ++ show name + +{- Does origin/git-annex exist? -} +hasOrigin :: Annex Bool +hasOrigin = inRepo $ Git.Ref.exists originname + +{- Does the git-annex branch or a sibling foo/git-annex branch exist? -} +hasSibling :: Annex Bool +hasSibling = not . null <$> siblingBranches + +{- List of git-annex (refs, branches), including the main one and any + - from remotes. Duplicate refs are filtered out. -} +siblingBranches :: Annex [(Git.Ref, Git.Branch)] +siblingBranches = inRepo $ Git.Ref.matchingUniq [name] + +{- Creates the branch, if it does not already exist. -} +create :: Annex () +create = void getBranch + +{- Returns the ref of the branch, creating it first if necessary. -} +getBranch :: Annex Git.Ref +getBranch = maybe (hasOrigin >>= go >>= use) return =<< branchsha + where + go True = do + inRepo $ Git.Command.run + [Param "branch", Param $ show name, Param $ show originname] + fromMaybe (error $ "failed to create " ++ show name) + <$> branchsha + go False = withIndex' True $ + inRepo $ Git.Branch.commit "branch created" fullname [] + use sha = do + setIndexSha sha + return sha + branchsha = inRepo $ Git.Ref.sha fullname + +{- Ensures that the branch and index are up-to-date; should be + - called before data is read from it. Runs only once per git-annex run. -} +update :: Annex () +update = runUpdateOnce $ void $ updateTo =<< siblingBranches + +{- Forces an update even if one has already been run. -} +forceUpdate :: Annex Bool +forceUpdate = updateTo =<< siblingBranches + +{- Merges the specified Refs into the index, if they have any changes not + - already in it. The Branch names are only used in the commit message; + - it's even possible that the provided Branches have not been updated to + - point to the Refs yet. + - + - The branch is fast-forwarded if possible, otherwise a merge commit is + - made. + - + - Before Refs are merged into the index, it's important to first stage the + - journal into the index. Otherwise, any changes in the journal would + - later get staged, and might overwrite changes made during the merge. + - This is only done if some of the Refs do need to be merged. + - + - Also handles performing any Transitions that have not yet been + - performed, in either the local branch, or the Refs. + - + - Returns True if any refs were merged in, False otherwise. + -} +updateTo :: [(Git.Ref, Git.Branch)] -> Annex Bool +updateTo pairs = do + -- ensure branch exists, and get its current ref + branchref <- getBranch + dirty <- journalDirty + ignoredrefs <- getIgnoredRefs + (refs, branches) <- unzip <$> filterM (isnewer ignoredrefs) pairs + if null refs + {- Even when no refs need to be merged, the index + - may still be updated if the branch has gotten ahead + - of the index. -} + then whenM (needUpdateIndex branchref) $ lockJournal $ \jl -> do + forceUpdateIndex jl branchref + {- When there are journalled changes + - as well as the branch being updated, + - a commit needs to be done. -} + when dirty $ + go branchref True [] [] jl + else lockJournal $ go branchref dirty refs branches + return $ not $ null refs + where + isnewer ignoredrefs (r, _) + | S.member r ignoredrefs = return False + | otherwise = inRepo $ Git.Branch.changed fullname r + go branchref dirty refs branches jl = withIndex $ do + cleanjournal <- if dirty then stageJournal jl else return noop + let merge_desc = if null branches + then "update" + else "merging " ++ + unwords (map Git.Ref.describe branches) ++ + " into " ++ show name + localtransitions <- parseTransitionsStrictly "local" + <$> getLocal transitionsLog + unless (null branches) $ do + showSideAction merge_desc + mergeIndex jl refs + let commitrefs = nub $ fullname:refs + unlessM (handleTransitions jl localtransitions commitrefs) $ do + ff <- if dirty + then return False + else inRepo $ Git.Branch.fastForward fullname refs + if ff + then updateIndex jl branchref + else commitIndex jl branchref merge_desc commitrefs + liftIO cleanjournal + +{- Gets the content of a file, which may be in the journal, or in the index + - (and committed to the branch). + - + - Updates the branch if necessary, to ensure the most up-to-date available + - content is returned. + - + - Returns an empty string if the file doesn't exist yet. -} +get :: FilePath -> Annex String +get file = do + update + getLocal file + +{- Like get, but does not merge the branch, so the info returned may not + - reflect changes in remotes. + - (Changing the value this returns, and then merging is always the + - same as using get, and then changing its value.) -} +getLocal :: FilePath -> Annex String +getLocal file = go =<< getJournalFileStale file + where + go (Just journalcontent) = return journalcontent + go Nothing = getRaw file + +getRaw :: FilePath -> Annex String +getRaw file = withIndex $ L.unpack <$> catFile fullname file + +{- Applies a function to modifiy the content of a file. + - + - Note that this does not cause the branch to be merged, it only + - modifes the current content of the file on the branch. + -} +change :: FilePath -> (String -> String) -> Annex () +change file a = lockJournal $ \jl -> a <$> getLocal file >>= set jl file + +{- Records new content of a file into the journal -} +set :: JournalLocked -> FilePath -> String -> Annex () +set = setJournalFile + +{- Stages the journal, and commits staged changes to the branch. -} +commit :: String -> Annex () +commit = whenM journalDirty . forceCommit + +{- Commits the current index to the branch even without any journalleda + - changes. -} +forceCommit :: String -> Annex () +forceCommit message = lockJournal $ \jl -> do + cleanjournal <- stageJournal jl + ref <- getBranch + withIndex $ commitIndex jl ref message [fullname] + liftIO cleanjournal + +{- Commits the staged changes in the index to the branch. + - + - Ensures that the branch's index file is first updated to 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. + -} +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 + updateIndex jl branchref + committedref <- inRepo $ Git.Branch.commit message fullname parents + setIndexSha committedref + parentrefs <- commitparents <$> catObject committedref + when (racedetected branchref parentrefs) $ do + liftIO $ print ("race detected", branchref, parentrefs, "committing", (branchref, parents)) + fixrace committedref parentrefs + where + -- look for "parent ref" lines and return the refs + commitparents = map (Git.Ref . snd) . filter isparent . + map (toassoc . L.unpack) . L.lines + toassoc = separate (== ' ') + isparent (k,_) = k == "parent" + + {- The race can be detected by checking the commit's + - parent, which will be the newly pushed branch, + - instead of the expected ref that the index was updated to. -} + racedetected expectedref parentrefs + | expectedref `elem` parentrefs = False -- good parent + | otherwise = True -- race! + + {- To recover from the race, union merge the lost refs + - into the index, and recommit on top of the bad commit. -} + fixrace committedref lostrefs = do + mergeIndex jl lostrefs + commitIndex jl committedref racemessage [committedref] + + racemessage = message ++ " (recovery from race)" + +{- Lists all files on the branch. There may be duplicates in the list. -} +files :: Annex [FilePath] +files = do + update + (++) + <$> branchFiles + <*> getJournalledFilesStale + +{- Files in the branch, not including any from journalled changes, + - and without updating the branch. -} +branchFiles :: Annex [FilePath] +branchFiles = withIndex $ inRepo $ Git.Command.pipeNullSplitZombie + [ Params "ls-tree --name-only -r -z" + , Param $ show fullname + ] + +{- Populates the branch's index file with the current branch contents. + - + - This is only done when the index doesn't yet exist, and the index + - is used to build up changes to be commited to the branch, and merge + - in changes from other branches. + -} +genIndex :: Git.Repo -> IO () +genIndex g = Git.UpdateIndex.streamUpdateIndex g + [Git.UpdateIndex.lsTree fullname g] + +{- Merges the specified refs into the index. + - Any changes staged in the index will be preserved. -} +mergeIndex :: JournalLocked -> [Git.Ref] -> Annex () +mergeIndex jl branches = do + prepareModifyIndex jl + h <- catFileHandle + inRepo $ \g -> Git.UnionMerge.mergeIndex h g branches + +{- Removes any stale git lock file, to avoid git falling over when + - updating the index. + - + - Since all modifications of the index are performed inside this module, + - and only when the journal is locked, the fact that the journal has to be + - locked when this is called ensures that no other process is currently + - modifying the index. So any index.lock file must be stale, caused + - by git running when the system crashed, or the repository's disk was + - removed, etc. + -} +prepareModifyIndex :: JournalLocked -> Annex () +prepareModifyIndex _jl = do + index <- fromRepo gitAnnexIndex + void $ liftIO $ tryIO $ removeFile $ index ++ ".lock" + +{- Runs an action using the branch's index file. -} +withIndex :: Annex a -> Annex a +withIndex = withIndex' False +withIndex' :: Bool -> Annex a -> Annex a +withIndex' bootstrapping a = do + f <- fromRepo gitAnnexIndex + 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 +#else + e <- liftIO getEnvironment +#endif + let g' = g { gitEnv = Just $ ("GIT_INDEX_FILE", f):e } + + r <- tryAnnex $ do + Annex.changeState $ \s -> s { Annex.repo = g' } + checkIndexOnce $ unlessM (liftIO $ doesFileExist f) $ do + unless bootstrapping create + createAnnexDirectory $ takeDirectory f + unless bootstrapping $ inRepo genIndex + a + Annex.changeState $ \s -> s { Annex.repo = (Annex.repo s) { gitEnv = gitEnv g} } + either E.throw return r + +{- Updates the branch's index to reflect the current contents of the branch. + - Any changes staged in the index will be preserved. + - + - Compares the ref stored in the lock file with the current + - ref of the branch to see if an update is needed. + -} +updateIndex :: JournalLocked -> Git.Ref -> Annex () +updateIndex jl branchref = whenM (needUpdateIndex branchref) $ + forceUpdateIndex jl branchref + +forceUpdateIndex :: JournalLocked -> Git.Ref -> Annex () +forceUpdateIndex jl branchref = do + withIndex $ mergeIndex jl [fullname] + setIndexSha branchref + +{- Checks if the index needs to be updated. -} +needUpdateIndex :: Git.Ref -> Annex Bool +needUpdateIndex branchref = do + f <- fromRepo gitAnnexIndexStatus + committedref <- Git.Ref . firstLine <$> + liftIO (catchDefaultIO "" $ readFileStrict f) + return (committedref /= branchref) + +{- Record that the branch's index has been updated to correspond to a + - given ref of the branch. -} +setIndexSha :: Git.Ref -> Annex () +setIndexSha ref = do + f <- fromRepo gitAnnexIndexStatus + liftIO $ writeFile f $ show ref ++ "\n" + setAnnexFilePerm f + +{- Stages the journal into the index and returns an action that will + - clean up the staged journal files, which should only be run once + - the index has been committed to the branch. + - + - Before staging, this removes any existing git index file lock. + - This is safe to do because stageJournal is the only thing that + - modifies this index file, and only one can run at a time, because + - the journal is locked. So any existing git index file lock must be + - stale, and the journal must contain any data that was in the process + - of being written to the index file when it crashed. + -} +stageJournal :: JournalLocked -> Annex (IO ()) +stageJournal jl = withIndex $ do + prepareModifyIndex jl + g <- gitRepo + let dir = gitAnnexJournalDir g + fs <- getJournalFiles jl + liftIO $ do + h <- hashObjectStart g + Git.UpdateIndex.streamUpdateIndex g + [genstream dir h fs] + hashObjectStop h + return $ liftIO $ mapM_ (removeFile . (dir )) fs + 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) + +{- This is run after the refs have been merged into the index, + - but before the result is committed to the branch. + - (Which is why it's passed the contents of the local branches's + - transition log before that merge took place.) + - + - When the refs contain transitions that have not yet been done locally, + - the transitions are performed on the index, and a new branch + - is created from the result. + - + - When there are transitions recorded locally that have not been done + - to the remote refs, the transitions are performed in the index, + - and committed to the existing branch. In this case, the untransitioned + - remote refs cannot be merged into the branch (since transitions + - throw away history), so they are added to the list of refs to ignore, + - to avoid re-merging content from them again. + -} +handleTransitions :: JournalLocked -> Transitions -> [Git.Ref] -> Annex Bool +handleTransitions jl localts refs = do + m <- M.fromList <$> mapM getreftransition refs + let remotets = M.elems m + if all (localts ==) remotets + then return False + else do + let allts = combineTransitions (localts:remotets) + let (transitionedrefs, untransitionedrefs) = + partition (\r -> M.lookup r m == Just allts) refs + performTransitionsLocked jl allts (localts /= allts) transitionedrefs + ignoreRefs untransitionedrefs + return True + where + getreftransition ref = do + ts <- parseTransitionsStrictly "remote" . L.unpack + <$> catFile ref transitionsLog + return (ref, ts) + +ignoreRefs :: [Git.Ref] -> Annex () +ignoreRefs rs = do + old <- getIgnoredRefs + let s = S.unions [old, S.fromList rs] + f <- fromRepo gitAnnexIgnoredRefs + replaceFile f $ \tmp -> liftIO $ writeFile tmp $ + unlines $ map show $ S.elems s + +getIgnoredRefs :: Annex (S.Set Git.Ref) +getIgnoredRefs = S.fromList . mapMaybe Git.Sha.extractSha . lines <$> content + where + content = do + f <- fromRepo gitAnnexIgnoredRefs + liftIO $ catchDefaultIO "" $ readFile f + +{- Performs the specified transitions on the contents of the index file, + - commits it to the branch, or creates a new branch. + -} +performTransitions :: Transitions -> Bool -> [Ref] -> Annex () +performTransitions ts neednewlocalbranch transitionedrefs = lockJournal $ \jl -> + performTransitionsLocked jl ts neednewlocalbranch transitionedrefs +performTransitionsLocked :: JournalLocked -> Transitions -> Bool -> [Ref] -> Annex () +performTransitionsLocked jl ts neednewlocalbranch transitionedrefs = do + -- For simplicity & speed, we're going to use the Annex.Queue to + -- update the git-annex branch, while it usually holds changes + -- for the head branch. Flush any such changes. + Annex.Queue.flush + withIndex $ do + prepareModifyIndex jl + run $ mapMaybe getTransitionCalculator $ transitionList ts + Annex.Queue.flush + if neednewlocalbranch + then do + committedref <- inRepo $ Git.Branch.commit message fullname transitionedrefs + setIndexSha committedref + else do + ref <- getBranch + commitIndex jl ref message (nub $ fullname:transitionedrefs) + where + message + | neednewlocalbranch && null transitionedrefs = "new branch for transition " ++ tdesc + | otherwise = "continuing transition " ++ tdesc + tdesc = show $ map describeTransition $ transitionList ts + + {- The changes to make to the branch are calculated and applied to + - the branch directly, rather than going through the journal, + - which would be innefficient. (And the journal is not designed + - to hold changes to every file in the branch at once.) + - + - When a file in the branch is changed by transition code, + - that value is remembered and fed into the code for subsequent + - transitions. + -} + run [] = noop + run changers = do + trustmap <- calcTrustMap <$> getRaw trustLog + fs <- branchFiles + hasher <- inRepo hashObjectStart + forM_ fs $ \f -> do + content <- getRaw f + apply changers hasher f content trustmap + liftIO $ hashObjectStop hasher + apply [] _ _ _ _ = return () + apply (changer:rest) hasher file content trustmap = + case changer file content trustmap of + RemoveFile -> do + Annex.Queue.addUpdateIndex + =<< inRepo (Git.UpdateIndex.unstageFile file) + -- File is deleted; can't run any other + -- transitions on it. + return () + ChangeFile content' -> do + sha <- inRepo $ hashObject BlobObject content' + Annex.Queue.addUpdateIndex $ Git.UpdateIndex.pureStreamer $ + Git.UpdateIndex.updateIndexLine sha FileBlob (asTopFilePath file) + apply rest hasher file content' trustmap + PreserveFile -> + apply rest hasher file content trustmap diff --git a/Annex/Branch/Transitions.hs b/Annex/Branch/Transitions.hs new file mode 100644 index 0000000000..90002de624 --- /dev/null +++ b/Annex/Branch/Transitions.hs @@ -0,0 +1,53 @@ +{- git-annex branch transitions + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Annex.Branch.Transitions ( + FileTransition(..), + getTransitionCalculator +) where + +import Logs +import Logs.Transitions +import Logs.UUIDBased as UUIDBased +import Logs.Presence.Pure as Presence +import Types.TrustLevel +import Types.UUID + +import qualified Data.Map as M + +data FileTransition + = ChangeFile String + | RemoveFile + | PreserveFile + +type TransitionCalculator = FilePath -> String -> TrustMap -> FileTransition + +getTransitionCalculator :: Transition -> Maybe TransitionCalculator +getTransitionCalculator ForgetGitHistory = Nothing +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 (PresenceLog _) -> + let newlog = Presence.compactLog $ dropDeadFromPresenceLog trustmap $ Presence.parseLog content + in if null newlog + then RemoveFile + else ChangeFile $ Presence.showLog newlog + Nothing -> PreserveFile + +dropDeadFromUUIDBasedLog :: TrustMap -> UUIDBased.Log String -> UUIDBased.Log String +dropDeadFromUUIDBasedLog trustmap = M.filterWithKey $ notDead trustmap . const + +{- Presence logs can contain UUIDs or other values. Any line that matches + - a dead uuid is dropped; any other values are passed through. -} +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 diff --git a/Annex/BranchState.hs b/Annex/BranchState.hs new file mode 100644 index 0000000000..9b2f9a04c5 --- /dev/null +++ b/Annex/BranchState.hs @@ -0,0 +1,43 @@ +{- git-annex branch state management + - + - Runtime state about the git-annex branch. + - + - Copyright 2011-2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Annex.BranchState where + +import Common.Annex +import Types.BranchState +import qualified Annex + +getState :: Annex BranchState +getState = Annex.getState Annex.branchstate + +setState :: BranchState -> Annex () +setState state = Annex.changeState $ \s -> s { Annex.branchstate = state } + +changeState :: (BranchState -> BranchState) -> Annex () +changeState changer = setState =<< changer <$> getState + +{- Runs an action to check that the index file exists, if it's not been + - checked before in this run of git-annex. -} +checkIndexOnce :: Annex () -> Annex () +checkIndexOnce a = unlessM (indexChecked <$> getState) $ do + a + changeState $ \s -> s { indexChecked = True } + +{- Runs an action to update the branch, if it's not been updated before + - in this run of git-annex. -} +runUpdateOnce :: Annex () -> Annex () +runUpdateOnce a = unlessM (branchUpdated <$> getState) $ do + a + disableUpdate + +{- Avoids updating the branch. A useful optimisation when the branch + - is known to have not changed, or git-annex won't be relying on info + - from it. -} +disableUpdate :: Annex () +disableUpdate = changeState $ \s -> s { branchUpdated = True } diff --git a/Annex/CatFile.hs b/Annex/CatFile.hs new file mode 100644 index 0000000000..812d032c6a --- /dev/null +++ b/Annex/CatFile.hs @@ -0,0 +1,139 @@ +{- git cat-file interface, with handle automatically stored in the Annex monad + - + - Copyright 2011-2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Annex.CatFile ( + catFile, + catObject, + catTree, + catObjectDetails, + catFileHandle, + catKey, + catKeyFile, + catKeyFileHEAD, +) where + +import qualified Data.ByteString.Lazy as L +import qualified Data.Map as M +import System.PosixCompat.Types + +import Common.Annex +import qualified Git +import qualified Git.CatFile +import qualified Annex +import Git.Types +import Git.FilePath +import Git.FileMode +import qualified Git.Ref + +catFile :: Git.Branch -> FilePath -> Annex L.ByteString +catFile branch file = do + h <- catFileHandle + liftIO $ Git.CatFile.catFile h branch file + +catObject :: Git.Ref -> Annex L.ByteString +catObject ref = do + h <- catFileHandle + liftIO $ Git.CatFile.catObject h ref + +catTree :: Git.Ref -> Annex [(FilePath, FileMode)] +catTree ref = do + h <- catFileHandle + liftIO $ Git.CatFile.catTree h ref + +catObjectDetails :: Git.Ref -> Annex (Maybe (L.ByteString, Sha, ObjectType)) +catObjectDetails ref = do + h <- catFileHandle + liftIO $ Git.CatFile.catObjectDetails h ref + +{- There can be multiple index files, and a different cat-file is needed + - for each. This is selected by setting GIT_INDEX_FILE in the gitEnv. -} +catFileHandle :: Annex Git.CatFile.CatFileHandle +catFileHandle = do + m <- Annex.getState Annex.catfilehandles + indexfile <- fromMaybe "" . maybe Nothing (lookup "GIT_INDEX_FILE") + <$> fromRepo gitEnv + case M.lookup indexfile m of + Just h -> return h + Nothing -> do + h <- inRepo Git.CatFile.catFileStart + let m' = M.insert indexfile h m + Annex.changeState $ \s -> s { Annex.catfilehandles = m' } + return h + +{- From the Sha or Ref of a symlink back to the key. + - + - Requires a mode witness, to guarantee that the file is a symlink. + -} +catKey :: Ref -> FileMode -> Annex (Maybe Key) +catKey = catKey' True + +catKey' :: Bool -> Ref -> FileMode -> Annex (Maybe Key) +catKey' modeguaranteed ref mode + | isSymLink mode = do + l <- fromInternalGitPath . encodeW8 . L.unpack <$> get + return $ if isLinkToAnnex l + then fileKey $ takeFileName l + else Nothing + | otherwise = return Nothing + where + -- 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 + +{- Looks up the file mode corresponding to the Ref using the running + - cat-file. + - + - Currently this always has to look in HEAD, because cat-file --batch + - does not offer a way to specify that we want to look up a tree object + - in the index. So if the index has a file staged not as a symlink, + - and it is a symlink in head, the wrong mode is gotten. + - Also, we have to assume the file is a symlink if it's not yet committed + - to HEAD. For these reasons, modeguaranteed is not set. + -} +catKeyChecked :: Bool -> Ref -> Annex (Maybe Key) +catKeyChecked needhead ref@(Ref r) = + catKey' False ref =<< findmode <$> catTree treeref + where + pathparts = split "/" r + dir = intercalate "/" $ take (length pathparts - 1) pathparts + file = fromMaybe "" $ lastMaybe pathparts + treeref = Ref $ if needhead then "HEAD" ++ dir ++ "/" else dir ++ "/" + findmode = fromMaybe symLinkMode . headMaybe . + map snd . filter (\p -> fst p == file) + +{- From a file in the repository back to the key. + - + - Ideally, this should reflect the key that's staged in the index, + - not the key that's committed to HEAD. Unfortunately, git cat-file + - does not refresh the index file after it's started up, so things + - newly staged in the index won't show up. It does, however, notice + - when branches change. + - + - For command-line git-annex use, that doesn't matter. It's perfectly + - reasonable for things staged in the index after the currently running + - git-annex process to not be noticed by it. However, we do want to see + - what's in the index, since it may have uncommitted changes not in HEAD> + - + - For the assistant, this is much more of a problem, since it commits + - files and then needs to be able to immediately look up their keys. + - OTOH, the assistant doesn't keep changes staged in the index for very + - long at all before committing them -- and it won't look at the keys + - of files until after committing them. + - + - So, this gets info from the index, unless running as a daemon. + -} +catKeyFile :: FilePath -> Annex (Maybe Key) +catKeyFile f = ifM (Annex.getState Annex.daemon) + ( catKeyFileHEAD f + , catKeyChecked True $ Git.Ref.fileRef f + ) + +catKeyFileHEAD :: FilePath -> Annex (Maybe Key) +catKeyFileHEAD f = catKeyChecked False $ Git.Ref.fileFromRef Git.Ref.headRef f diff --git a/Annex/CheckAttr.hs b/Annex/CheckAttr.hs new file mode 100644 index 0000000000..8eed9e804c --- /dev/null +++ b/Annex/CheckAttr.hs @@ -0,0 +1,35 @@ +{- git check-attr interface, with handle automatically stored in the Annex monad + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Annex.CheckAttr ( + checkAttr, + checkAttrHandle +) where + +import Common.Annex +import qualified Git.CheckAttr as Git +import qualified Annex + +{- All gitattributes used by git-annex. -} +annexAttrs :: [Git.Attr] +annexAttrs = + [ "annex.backend" + , "annex.numcopies" + ] + +checkAttr :: Git.Attr -> FilePath -> Annex String +checkAttr attr file = do + h <- checkAttrHandle + liftIO $ Git.checkAttr h attr file + +checkAttrHandle :: Annex Git.CheckAttrHandle +checkAttrHandle = maybe startup return =<< Annex.getState Annex.checkattrhandle + where + startup = do + h <- inRepo $ Git.checkAttrStart annexAttrs + Annex.changeState $ \s -> s { Annex.checkattrhandle = Just h } + return h diff --git a/Annex/CheckIgnore.hs b/Annex/CheckIgnore.hs new file mode 100644 index 0000000000..d45e652bcb --- /dev/null +++ b/Annex/CheckIgnore.hs @@ -0,0 +1,32 @@ +{- git check-ignore interface, with handle automatically stored in + - the Annex monad + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Annex.CheckIgnore ( + checkIgnored, + checkIgnoreHandle +) where + +import Common.Annex +import qualified Git.CheckIgnore as Git +import qualified Annex + +checkIgnored :: FilePath -> Annex Bool +checkIgnored file = go =<< checkIgnoreHandle + where + go Nothing = return False + go (Just h) = liftIO $ Git.checkIgnored h file + +checkIgnoreHandle :: Annex (Maybe Git.CheckIgnoreHandle) +checkIgnoreHandle = maybe startup return =<< Annex.getState Annex.checkignorehandle + where + startup = do + v <- inRepo Git.checkIgnoreStart + when (isNothing v) $ + warning "The installed version of git is too old for .gitignores to be honored by git-annex." + Annex.changeState $ \s -> s { Annex.checkignorehandle = Just v } + return v diff --git a/Annex/Content.hs b/Annex/Content.hs new file mode 100644 index 0000000000..62f1b1ccbe --- /dev/null +++ b/Annex/Content.hs @@ -0,0 +1,529 @@ +{- git-annex file content managing + - + - Copyright 2010-2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Annex.Content ( + inAnnex, + inAnnexSafe, + inAnnexCheck, + lockContent, + getViaTmp, + getViaTmpChecked, + getViaTmpUnchecked, + withTmp, + checkDiskSpace, + moveAnnex, + sendAnnex, + prepSendAnnex, + removeAnnex, + fromAnnex, + moveBad, + getKeysPresent, + saveState, + downloadUrl, + preseedTmp, + freezeContent, + thawContent, + dirKeys, + withObjectLoc, +) where + +import System.IO.Unsafe (unsafeInterleaveIO) +import System.PosixCompat.Files + +import Common.Annex +import Logs.Location +import qualified Git +import qualified Annex +import qualified Annex.Queue +import qualified Annex.Branch +import Utility.DiskFree +import Utility.FileMode +import qualified Annex.Url as Url +import Types.Key +import Utility.DataUnits +import Utility.CopyFile +import Config +import Git.SharedRepository +import Annex.Perms +import Annex.Link +import Annex.Content.Direct +import Annex.ReplaceFile +import Annex.Exception + +{- Checks if a given key's content is currently present. -} +inAnnex :: Key -> Annex Bool +inAnnex key = inAnnexCheck key $ liftIO . doesFileExist + +{- Runs an arbitrary check on a key's content. -} +inAnnexCheck :: Key -> (FilePath -> Annex Bool) -> Annex Bool +inAnnexCheck key check = inAnnex' id False check key + +{- Generic inAnnex, handling both indirect and direct mode. + - + - In direct mode, at least one of the associated files must pass the + - check. Additionally, the file must be unmodified. + -} +inAnnex' :: (a -> Bool) -> a -> (FilePath -> Annex a) -> Key -> Annex a +inAnnex' isgood bad check key = withObjectLoc key checkindirect checkdirect + where + checkindirect loc = do + whenM (fromRepo Git.repoIsUrl) $ + error "inAnnex cannot check remote repo" + check loc + checkdirect [] = return bad + checkdirect (loc:locs) = do + r <- check loc + if isgood r + then ifM (goodContent key loc) + ( return r + , checkdirect locs + ) + else checkdirect locs + +{- A safer check; the key's content must not only be present, but + - is not in the process of being removed. -} +inAnnexSafe :: Key -> Annex (Maybe Bool) +inAnnexSafe = inAnnex' (fromMaybe False) (Just False) go + where + go f = liftIO $ openforlock f >>= check +#ifndef mingw32_HOST_OS + openforlock f = catchMaybeIO $ + openFd f ReadOnly Nothing defaultFileFlags +#else + openforlock _ = return $ Just () +#endif + check Nothing = return is_missing +#ifndef mingw32_HOST_OS + check (Just h) = do + v <- getLock h (ReadLock, AbsoluteSeek, 0, 0) + closeFd h + return $ case v of + Just _ -> is_locked + Nothing -> is_unlocked +#else + check (Just _) = return is_unlocked +#endif +#ifndef mingw32_HOST_OS + is_locked = Nothing +#endif + is_unlocked = Just True + is_missing = Just False + +{- 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 +#ifndef mingw32_HOST_OS +lockContent key a = do + file <- calcRepo $ gitAnnexLocation key + bracketIO (openforlock file >>= lock) unlock (const a) + where + {- Since files are stored with the write bit disabled, have + - to fiddle with permissions to open for an exclusive lock. -} + openforlock f = catchMaybeIO $ ifM (doesFileExist f) + ( withModifiedFileMode f + (`unionFileModes` ownerWriteMode) + open + , open + ) + where + open = openFd f ReadWrite Nothing defaultFileFlags + lock Nothing = return Nothing + lock (Just fd) = do + v <- tryIO $ setLock fd (WriteLock, AbsoluteSeek, 0, 0) + case v of + Left _ -> error "content is locked" + Right _ -> return $ Just fd + unlock Nothing = noop + unlock (Just l) = closeFd l +#else +lockContent _key a = a -- no locking for Windows! +#endif + +{- Runs an action, passing it a temporary filename to get, + - and if the action succeeds, moves the temp file into + - the annex as a key's content. -} +getViaTmp :: Key -> (FilePath -> Annex Bool) -> Annex Bool +getViaTmp = getViaTmpChecked (return True) + +{- Like getViaTmp, but does not check that there is enough disk space + - for the incoming key. For use when the key content is already on disk + - and not being copied into place. -} +getViaTmpUnchecked :: Key -> (FilePath -> Annex Bool) -> Annex Bool +getViaTmpUnchecked = finishGetViaTmp (return True) + +getViaTmpChecked :: Annex Bool -> Key -> (FilePath -> Annex Bool) -> Annex Bool +getViaTmpChecked check key action = do + tmp <- fromRepo $ gitAnnexTmpLocation key + + -- Check that there is enough free disk space. + -- When the temp file already exists, count the space + -- it is using as free. + e <- liftIO $ doesFileExist tmp + alreadythere <- if e + then fromIntegral . fileSize <$> liftIO (getFileStatus tmp) + else return 0 + ifM (checkDiskSpace Nothing key alreadythere) + ( do + when e $ thawContent tmp + finishGetViaTmp check key action + , return False + ) + +finishGetViaTmp :: Annex Bool -> Key -> (FilePath -> Annex Bool) -> Annex Bool +finishGetViaTmp check key action = do + tmpfile <- prepTmp key + ifM (action tmpfile <&&> check) + ( do + moveAnnex key tmpfile + logStatus key InfoPresent + return True + , do + -- the tmp file is left behind, in case caller wants + -- to resume its transfer + return False + ) + +prepTmp :: Key -> Annex FilePath +prepTmp key = do + tmp <- fromRepo $ gitAnnexTmpLocation key + createAnnexDirectory (parentDir tmp) + return tmp + +{- Creates a temp file, runs an action on it, and cleans up the temp file. -} +withTmp :: Key -> (FilePath -> Annex a) -> Annex a +withTmp key action = do + tmp <- prepTmp key + res <- action tmp + liftIO $ nukeFile tmp + return res + +{- Checks that there is disk space available to store a given key, + - in a destination (or the annex) printing a warning if not. -} +checkDiskSpace :: Maybe FilePath -> Key -> Integer -> Annex Bool +checkDiskSpace destination key alreadythere = do + reserve <- annexDiskReserve <$> Annex.getGitConfig + free <- liftIO . getDiskFree =<< dir + force <- Annex.getState Annex.force + case (free, keySize key) of + (Just have, Just need) -> do + let ok = (need + reserve <= have + alreadythere) || force + unless ok $ + needmorespace (need + reserve - have - alreadythere) + return ok + _ -> return True + where + dir = maybe (fromRepo gitAnnexDir) return destination + needmorespace n = + warning $ "not enough free space, need " ++ + roughSize storageUnits True n ++ + " more" ++ forcemsg + forcemsg = " (use --force to override this check or adjust annex.diskreserve)" + +{- Moves a key's content into .git/annex/objects/ + - + - In direct mode, moves it to the associated file, or files. + - + - What if the key there already has content? This could happen for + - various reasons; perhaps the same content is being annexed again. + - Perhaps there has been a hash collision generating the keys. + - + - The current strategy is to assume that in this case it's safe to delete + - one of the two copies of the content; and the one already in the annex + - is left there, assuming it's the original, canonical copy. + - + - I considered being more paranoid, and checking that both files had + - the same content. Decided against it because A) users explicitly choose + - a backend based on its hashing properties and so if they're dealing + - with colliding files it's their own fault and B) adding such a check + - would not catch all cases of colliding keys. For example, perhaps + - a remote has a key; if it's then added again with different content then + - the overall system now has two different peices of content for that + - key, and one of them will probably get deleted later. So, adding the + - check here would only raise expectations that git-annex cannot truely + - meet. + -} +moveAnnex :: Key -> FilePath -> Annex () +moveAnnex key src = withObjectLoc key storeobject storedirect + where + storeobject dest = ifM (liftIO $ doesFileExist dest) + ( alreadyhave + , modifyContent dest $ do + liftIO $ moveFile src dest + freezeContent dest + ) + storeindirect = storeobject =<< calcRepo (gitAnnexLocation key) + + {- In direct mode, the associated file's content may be locally + - modified. In that case, it's preserved. However, the content + - we're moving into the annex may be the only extant copy, so + - it's important we not lose it. So, when the key's content + - cannot be moved to any associated file, it's stored in indirect + - mode. + -} + storedirect = storedirect' storeindirect + storedirect' fallback [] = fallback + storedirect' fallback (f:fs) = do + thawContent src + v <- isAnnexLink f + if Just key == v + then do + updateInodeCache key src + replaceFile f $ liftIO . moveFile src + chmodContent f + forM_ fs $ + addContentWhenNotPresent key f + else ifM (goodContent key f) + ( storedirect' alreadyhave fs + , storedirect' fallback fs + ) + + alreadyhave = liftIO $ removeFile src + +{- Runs an action to transfer an object's content. + - + - In direct mode, it's possible for the file to change as it's being sent. + - If this happens, runs the rollback action and returns False. The + - rollback action should remove the data that was transferred. + -} +sendAnnex :: Key -> Annex () -> (FilePath -> Annex Bool) -> Annex Bool +sendAnnex key rollback sendobject = go =<< prepSendAnnex key + where + go Nothing = return False + go (Just (f, checksuccess)) = do + r <- sendobject f + ifM checksuccess + ( return r + , do + rollback + return False + ) + +{- Returns a file that contains an object's content, + - and an 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. + - + - Note that the returned check action is, in some cases, run in the + - Annex monad of the remote that is receiving the object, rather than + - the sender. So it cannot rely on Annex state. + -} +prepSendAnnex :: Key -> Annex (Maybe (FilePath, Annex Bool)) +prepSendAnnex key = withObjectLoc key indirect direct + where + indirect f = return $ Just (f, return True) + direct [] = return Nothing + direct (f:fs) = do + cache <- recordedInodeCache key + -- check that we have a good file + ifM (sameInodeCache f cache) + ( return $ Just (f, sameInodeCache f cache) + , direct fs + ) + +{- Performs an action, passing it the location to use for a key's content. + - + - In direct mode, the associated files will be passed. But, if there are + - no associated files for a key, the indirect mode action will be + - performed instead. -} +withObjectLoc :: Key -> (FilePath -> Annex a) -> ([FilePath] -> Annex a) -> Annex a +withObjectLoc key indirect direct = ifM isDirect + ( do + fs <- associatedFiles key + if null fs + then goindirect + else direct fs + , goindirect + ) + where + goindirect = indirect =<< calcRepo (gitAnnexLocation key) + +cleanObjectLoc :: Key -> Annex () -> Annex () +cleanObjectLoc key cleaner = do + file <- calcRepo $ gitAnnexLocation key + void $ tryAnnexIO $ thawContentDir file + cleaner + liftIO $ removeparents file (3 :: Int) + where + removeparents _ 0 = noop + removeparents file n = do + let dir = parentDir file + maybe noop (const $ removeparents dir (n-1)) + <=< catchMaybeIO $ removeDirectory dir + +{- 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 + where + remove file = cleanObjectLoc key $ do + liftIO $ nukeFile file + removeInodeCache key + removedirect fs = do + cache <- recordedInodeCache key + removeInodeCache key + mapM_ (resetfile cache) fs + resetfile cache f = whenM (sameInodeCache f cache) $ do + l <- inRepo $ gitAnnexLink f key + top <- fromRepo Git.repoPath + cwd <- liftIO getCurrentDirectory + let top' = fromMaybe top $ absNormPath cwd top + let l' = relPathDirToFile top' (fromMaybe l $ absNormPath top' l) + replaceFile f $ makeAnnexLink l' + +{- Moves a key's file out of .git/annex/objects/ -} +fromAnnex :: Key -> FilePath -> Annex () +fromAnnex key dest = cleanObjectLoc key $ do + file <- calcRepo $ gitAnnexLocation key + thawContent file + liftIO $ moveFile file dest + +{- Moves a key out of .git/annex/objects/ into .git/annex/bad, and + - returns the file it was moved to. -} +moveBad :: Key -> Annex FilePath +moveBad key = do + src <- calcRepo $ gitAnnexLocation key + bad <- fromRepo gitAnnexBadDir + let dest = bad takeFileName src + createAnnexDirectory (parentDir dest) + cleanObjectLoc key $ + liftIO $ moveFile src dest + logStatus key InfoMissing + return dest + +{- List of keys whose content exists in the annex. -} +getKeysPresent :: Annex [Key] +getKeysPresent = do + direct <- isDirect + dir <- fromRepo gitAnnexObjectDir + liftIO $ traverse direct (2 :: Int) dir + where + traverse direct depth dir = do + contents <- catchDefaultIO [] (dirContents dir) + if depth == 0 + then do + contents' <- filterM (present direct) contents + let keys = mapMaybe (fileKey . takeFileName) contents' + continue keys [] + else do + let deeper = traverse direct (depth - 1) + continue [] (map deeper contents) + continue keys [] = return keys + continue keys (a:as) = do + {- Force lazy traversal with unsafeInterleaveIO. -} + morekeys <- unsafeInterleaveIO a + continue (morekeys++keys) as + + {- In indirect mode, look for the key. In direct mode, + - the inode cache file is only present when a key's content + - is present. -} + present False d = doesFileExist $ contentfile d + present True d = doesFileExist $ contentfile d ++ ".cache" + contentfile d = d takeFileName d + +{- Things to do to record changes to content when shutting down. + - + - It's acceptable to avoid committing changes to the branch, + - especially if performing a short-lived action. + -} +saveState :: Bool -> Annex () +saveState nocommit = doSideAction $ do + Annex.Queue.flush + unless nocommit $ + whenM (annexAlwaysCommit <$> Annex.getGitConfig) $ + Annex.Branch.commit "update" + +{- Downloads content from any of a list of urls. -} +downloadUrl :: [Url.URLString] -> FilePath -> Annex Bool +downloadUrl urls file = go =<< annexWebDownloadCommand <$> Annex.getGitConfig + where + go Nothing = do + opts <- map Param . annexWebOptions <$> Annex.getGitConfig + headers <- getHttpHeaders + anyM (\u -> Url.withUserAgent $ Url.download u headers opts file) urls + go (Just basecmd) = liftIO $ anyM (downloadcmd basecmd) urls + downloadcmd basecmd url = + boolSystem "sh" [Param "-c", Param $ gencmd url basecmd] + <&&> doesFileExist file + gencmd url = massReplace + [ ("%file", shellEscape file) + , ("%url", shellEscape url) + ] + +{- Copies a key's content, when present, to a temp file. + - This is used to speed up some rsyncs. -} +preseedTmp :: Key -> FilePath -> Annex Bool +preseedTmp key file = go =<< inAnnex key + where + go False = return False + go True = do + ok <- copy + when ok $ thawContent file + return ok + copy = ifM (liftIO $ doesFileExist file) + ( return True + , do + s <- calcRepo $ gitAnnexLocation key + liftIO $ copyFileExternal s file + ) + +{- Blocks writing to an annexed file, and modifies file permissions to + - allow reading it, per core.sharedRepository setting. -} +freezeContent :: FilePath -> Annex () +freezeContent file = unlessM crippledFileSystem $ + liftIO . go =<< fromRepo getSharedRepository + where + go GroupShared = modifyFileMode file $ + removeModes writeModes . + addModes [ownerReadMode, groupReadMode] + go AllShared = modifyFileMode file $ + removeModes writeModes . + addModes readModes + go _ = modifyFileMode file $ + removeModes writeModes . + addModes [ownerReadMode] + +{- Adjusts read mode of annexed file per core.sharedRepository setting. -} +chmodContent :: FilePath -> Annex () +chmodContent file = unlessM crippledFileSystem $ + liftIO . go =<< fromRepo getSharedRepository + where + go GroupShared = modifyFileMode file $ + addModes [ownerReadMode, groupReadMode] + go AllShared = modifyFileMode file $ + addModes readModes + go _ = modifyFileMode file $ + addModes [ownerReadMode] + +{- Allows writing to an annexed file that freezeContent was called on + - before. -} +thawContent :: FilePath -> Annex () +thawContent file = unlessM crippledFileSystem $ + liftIO . go =<< fromRepo getSharedRepository + where + go GroupShared = groupWriteRead file + go AllShared = groupWriteRead file + go _ = allowWrite file + +{- Finds files directly inside a directory like gitAnnexBadDir + - (not in subdirectories) and returns the corresponding keys. -} +dirKeys :: (Git.Repo -> FilePath) -> Annex [Key] +dirKeys dirspec = do + dir <- fromRepo dirspec + ifM (liftIO $ doesDirectoryExist dir) + ( do + contents <- liftIO $ getDirectoryContents dir + files <- liftIO $ filterM doesFileExist $ + map (dir ) contents + return $ mapMaybe (fileKey . takeFileName) files + , return [] + ) + diff --git a/Annex/Content/Direct.hs b/Annex/Content/Direct.hs new file mode 100644 index 0000000000..a5d71288b2 --- /dev/null +++ b/Annex/Content/Direct.hs @@ -0,0 +1,259 @@ +{- git-annex file content managing for direct mode + - + - Copyright 2012-2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Annex.Content.Direct ( + associatedFiles, + associatedFilesRelative, + removeAssociatedFile, + removeAssociatedFileUnchecked, + removeAssociatedFiles, + addAssociatedFile, + goodContent, + recordedInodeCache, + updateInodeCache, + addInodeCache, + writeInodeCache, + compareInodeCaches, + compareInodeCachesWith, + sameInodeCache, + elemInodeCaches, + sameFileStatus, + removeInodeCache, + toInodeCache, + inodesChanged, + createInodeSentinalFile, + addContentWhenNotPresent, +) where + +import Common.Annex +import qualified Annex +import Annex.Perms +import qualified Git +import Utility.Tmp +import Logs.Location +import Utility.InodeCache +import Utility.CopyFile +import Annex.ReplaceFile +import Annex.Link + +{- Absolute FilePaths of Files in the tree that are associated with a key. -} +associatedFiles :: Key -> Annex [FilePath] +associatedFiles key = do + files <- associatedFilesRelative key + top <- fromRepo Git.repoPath + return $ map (top ) files + +{- List of files in the tree that are associated with a key, relative to + - the top of the repo. -} +associatedFilesRelative :: Key -> Annex [FilePath] +associatedFilesRelative key = do + mapping <- calcRepo $ gitAnnexMapping key + liftIO $ catchDefaultIO [] $ do + h <- openFile mapping ReadMode + fileEncoding h + lines <$> hGetContents h + +{- Changes the associated files information for a key, applying a + - transformation to the list. Returns new associatedFiles value. -} +changeAssociatedFiles :: Key -> ([FilePath] -> [FilePath]) -> Annex [FilePath] +changeAssociatedFiles key transform = do + mapping <- calcRepo $ gitAnnexMapping key + files <- associatedFilesRelative key + let files' = transform files + when (files /= files') $ do + modifyContent mapping $ + liftIO $ viaTmp write mapping $ unlines files' + top <- fromRepo Git.repoPath + return $ map (top ) files' + where + write file content = do + h <- openFile file WriteMode + fileEncoding h + hPutStr h content + hClose h + +{- Removes the list of associated files. -} +removeAssociatedFiles :: Key -> Annex () +removeAssociatedFiles key = do + mapping <- calcRepo $ gitAnnexMapping key + modifyContent mapping $ + liftIO $ nukeFile mapping + +{- Removes an associated file. Returns new associatedFiles value. + - Checks if this was the last copy of the object, and updates location + - log. -} +removeAssociatedFile :: Key -> FilePath -> Annex [FilePath] +removeAssociatedFile key file = do + fs <- removeAssociatedFileUnchecked key file + when (null fs) $ + logStatus key InfoMissing + return fs + +{- Removes an associated file. Returns new associatedFiles value. -} +removeAssociatedFileUnchecked :: Key -> FilePath -> Annex [FilePath] +removeAssociatedFileUnchecked key file = do + file' <- normaliseAssociatedFile file + changeAssociatedFiles key $ filter (/= file') + +{- Adds an associated file. Returns new associatedFiles value. -} +addAssociatedFile :: Key -> FilePath -> Annex [FilePath] +addAssociatedFile key file = do + file' <- normaliseAssociatedFile file + changeAssociatedFiles key $ \files -> + if file' `elem` files + then files + else file':files + +{- Associated files are always stored relative to the top of the repository. + - The input FilePath is relative to the CWD, or is absolute. -} +normaliseAssociatedFile :: FilePath -> Annex FilePath +normaliseAssociatedFile file = do + top <- fromRepo Git.repoPath + liftIO $ relPathDirToFile top <$> absPath file + +{- Checks if a file in the tree, associated with a key, has not been modified. + - + - To avoid needing to fsck the file's content, which can involve an + - expensive checksum, this relies on a cache that contains the file's + - expected mtime and inode. + -} +goodContent :: Key -> FilePath -> Annex Bool +goodContent key file = sameInodeCache file =<< recordedInodeCache key + +{- Gets the recorded inode cache for a key. + - + - A key can be associated with multiple files, so may return more than + - one. -} +recordedInodeCache :: Key -> Annex [InodeCache] +recordedInodeCache key = withInodeCacheFile key $ \f -> + liftIO $ catchDefaultIO [] $ + mapMaybe readInodeCache . lines <$> readFileStrict f + +{- Caches an inode for a file. + - + - Anything else already cached is preserved. + -} +updateInodeCache :: Key -> FilePath -> Annex () +updateInodeCache key file = maybe noop (addInodeCache key) + =<< liftIO (genInodeCache file) + +{- Adds another inode to the cache for a key. -} +addInodeCache :: Key -> InodeCache -> Annex () +addInodeCache key cache = do + oldcaches <- recordedInodeCache key + unlessM (elemInodeCaches cache oldcaches) $ + writeInodeCache key (cache:oldcaches) + +{- Writes inode cache for a key. -} +writeInodeCache :: Key -> [InodeCache] -> Annex () +writeInodeCache key caches = withInodeCacheFile key $ \f -> + modifyContent f $ + liftIO $ writeFile f $ + unlines $ map showInodeCache caches + +{- Removes an inode cache. -} +removeInodeCache :: Key -> Annex () +removeInodeCache key = withInodeCacheFile key $ \f -> + modifyContent f $ + liftIO $ nukeFile f + +withInodeCacheFile :: Key -> (FilePath -> Annex a) -> Annex a +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) + 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 + old <- recordedInodeCache key + let curr = toInodeCache status + case (old, curr) of + (_, Just c) -> elemInodeCaches c old + ([], Nothing) -> return True + _ -> return False + +{- If the inodes have changed, only the size and mtime are compared. -} +compareInodeCaches :: InodeCache -> InodeCache -> Annex Bool +compareInodeCaches x y + | compareStrong x y = return True + | otherwise = ifM inodesChanged + ( return $ compareWeak x y + , return False + ) + +elemInodeCaches :: InodeCache -> [InodeCache] -> Annex Bool +elemInodeCaches _ [] = return False +elemInodeCaches c (l:ls) = ifM (compareInodeCaches c l) + ( return True + , elemInodeCaches c ls + ) + +compareInodeCachesWith :: Annex InodeComparisonType +compareInodeCachesWith = ifM inodesChanged ( return Weakly, return Strongly ) + +{- Copies the contentfile to the associated file, if the associated + - file has no content. If the associated file does have content, + - even if the content differs, it's left unchanged. -} +addContentWhenNotPresent :: Key -> FilePath -> FilePath -> Annex () +addContentWhenNotPresent key contentfile associatedfile = do + v <- isAnnexLink associatedfile + when (Just key == v) $ + replaceFile associatedfile $ + liftIO . void . copyFileExternal contentfile + updateInodeCache key associatedfile + +{- Some filesystems get new inodes each time they are mounted. + - In order to work on such a filesystem, a sentinal file is used to detect + - when the inodes have changed. + - + - If the sentinal file does not exist, we have to assume that the + - 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 + +readInodeSentinalFile :: Annex (Maybe InodeCache) +readInodeSentinalFile = do + sentinalcachefile <- fromRepo gitAnnexInodeSentinalCache + liftIO $ catchDefaultIO Nothing $ + readInodeCache <$> readFile sentinalcachefile + +writeInodeSentinalFile :: Annex () +writeInodeSentinalFile = do + sentinalfile <- fromRepo gitAnnexInodeSentinal + createAnnexDirectory (parentDir sentinalfile) + sentinalcachefile <- fromRepo gitAnnexInodeSentinalCache + liftIO $ writeFile sentinalfile "" + liftIO $ maybe noop (writeFile sentinalcachefile . showInodeCache) + =<< genInodeCache sentinalfile + +{- 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 + where + alreadyexists = isJust <$> readInodeSentinalFile + hasobjects = liftIO . doesDirectoryExist =<< fromRepo gitAnnexObjectDir diff --git a/Annex/Direct.hs b/Annex/Direct.hs new file mode 100644 index 0000000000..3fa5f93622 --- /dev/null +++ b/Annex/Direct.hs @@ -0,0 +1,306 @@ +{- git-annex direct mode + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Annex.Direct where + +import Common.Annex +import qualified Annex +import qualified Git +import qualified Git.LsFiles +import qualified Git.Merge +import qualified Git.DiffTree as DiffTree +import qualified Git.Config +import qualified Git.Ref +import qualified Git.Branch +import Git.Sha +import Git.FilePath +import Git.Types +import Config +import Annex.CatFile +import qualified Annex.Queue +import Logs.Location +import Backend +import Types.KeySource +import Annex.Content +import Annex.Content.Direct +import Annex.Link +import Utility.InodeCache +import Utility.CopyFile +import Annex.Perms +import Annex.ReplaceFile +import Annex.Exception + +{- 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. -} +stageDirect :: Annex Bool +stageDirect = do + Annex.Queue.flush + top <- fromRepo Git.repoPath + (l, cleanup) <- inRepo $ Git.LsFiles.stagedOthersDetails [top] + forM_ l go + void $ liftIO cleanup + staged <- Annex.Queue.size + Annex.Queue.flush + return $ staged /= 0 + where + {- 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 + shakey <- catKey sha mode + mstat <- liftIO $ catchMaybeIO $ getSymbolicLinkStatus file + filekey <- isAnnexLink file + case (shakey, filekey, mstat, toInodeCache =<< mstat) of + (_, Just key, _, _) + | shakey == filekey -> noop + {- A changed symlink. -} + | otherwise -> stageannexlink file key + (Just key, _, _, Just cache) -> do + {- All direct mode files will show as + - modified, so compare the cache to see if + - it really was. -} + oldcache <- recordedInodeCache key + case oldcache of + [] -> modifiedannexed file key cache + _ -> unlessM (elemInodeCaches cache oldcache) $ + modifiedannexed file key cache + (Just key, _, Nothing, _) -> deletedannexed file key + (Nothing, _, Nothing, _) -> deletegit file + (_, _, Just _, _) -> addgit file + go _ = noop + + modifiedannexed file oldkey cache = do + void $ removeAssociatedFile oldkey file + void $ addDirect file cache + + deletedannexed file key = do + void $ removeAssociatedFile key file + deletegit file + + stageannexlink file key = do + l <- inRepo $ gitAnnexLink file key + stageSymlink file =<< hashSymlink l + void $ addAssociatedFile key file + + addgit file = Annex.Queue.addCommand "add" [Param "-f"] [file] + + deletegit file = Annex.Queue.addCommand "rm" [Param "-f"] [file] + +{- Adds a file to the annex in direct mode. Can fail, if the file is + - modified or deleted while it's being added. -} +addDirect :: FilePath -> InodeCache -> Annex Bool +addDirect file cache = do + showStart "add" file + let source = KeySource + { keyFilename = file + , contentLocation = file + , inodeCache = Just cache + } + got =<< genKey source =<< chooseBackend file + where + got Nothing = do + showEndFail + return False + got (Just (key, _)) = ifM (sameInodeCache file [cache]) + ( do + l <- inRepo $ gitAnnexLink file key + stageSymlink file =<< hashSymlink l + addInodeCache key cache + void $ addAssociatedFile key file + logStatus key InfoPresent + showEndOk + return True + , do + showEndFail + return False + ) + +{- 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. + - + - This should only be used once any changes to the real working tree have + - already been committed, because it overwrites files in the working tree. + -} +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' + +{- 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. + - + - 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 + - adding. This is to handle cases where eg, a file is deleted and a + - directory is added. The diff-tree output may list these in the opposite + - order, but we cannot really add the directory until the file with the + - same name is remvoed. + -} +mergeDirectCleanup :: FilePath -> Git.Ref -> Git.Ref -> Annex () +mergeDirectCleanup d oldsha newsha = do + (items, cleanup) <- inRepo $ DiffTree.diffTreeRecursive oldsha newsha + makeabs <- flip fromTopFilePath <$> gitRepo + let fsitems = zip (map (makeabs . DiffTree.file) items) items + forM_ fsitems $ + go DiffTree.srcsha DiffTree.srcmode moveout moveout_raw + forM_ fsitems $ + go DiffTree.dstsha DiffTree.dstmode movein movein_raw + void $ liftIO cleanup + liftIO $ removeDirectoryRecursive d + where + go getsha getmode a araw (f, item) + | getsha item == nullSha = noop + | otherwise = void $ + tryAnnex . maybe (araw f) (\k -> void $ a k f) + =<< catKey (getsha item) (getmode item) + + moveout k f = removeDirect k f + + {- Files deleted by the merge are removed from the work tree. + - Empty work tree directories are removed, per git behavior. -} + moveout_raw f = liftIO $ do + nukeFile f + void $ tryIO $ removeDirectory $ parentDir f + + {- If the file is already present, with the right content for the + - key, it's left alone. Otherwise, create the symlink and then + - if possible, replace it with the content. -} + movein k f = unlessM (goodContent k f) $ do + l <- inRepo $ 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 f = liftIO $ do + createDirectoryIfMissing True $ parentDir f + void $ tryIO $ rename (d f) f + +{- If possible, converts a symlink in the working tree into a direct + - mode file. If the content is not available, leaves the symlink + - unchanged. -} +toDirect :: Key -> FilePath -> Annex () +toDirect k f = fromMaybe noop =<< toDirectGen k f + +toDirectGen :: Key -> FilePath -> Annex (Maybe (Annex ())) +toDirectGen k f = do + loc <- calcRepo $ gitAnnexLocation k + ifM (liftIO $ doesFileExist loc) + ( return $ Just $ fromindirect loc + , do + {- Copy content from another direct file. -} + absf <- liftIO $ absPath f + dlocs <- filterM (goodContent k) =<< + filterM (\l -> isNothing <$> getAnnexLinkTarget l) =<< + (filter (/= absf) <$> addAssociatedFile k f) + case dlocs of + [] -> return Nothing + (dloc:_) -> return $ Just $ fromdirect dloc + ) + where + 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 + fromdirect loc = do + replaceFile f $ + liftIO . void . copyFileExternal loc + updateInodeCache k f + +{- Removes a direct mode file, while retaining its content in the annex + - (unless its content has already been changed). -} +removeDirect :: Key -> FilePath -> Annex () +removeDirect k f = do + void $ removeAssociatedFileUnchecked k f + unlessM (inAnnex k) $ + ifM (goodContent k f) + ( moveAnnex k f + , logStatus k InfoMissing + ) + liftIO $ do + nukeFile f + void $ tryIO $ removeDirectory $ parentDir f + +{- Called when a direct mode file has been changed. Its old content may be + - lost. -} +changedDirect :: Key -> FilePath -> Annex () +changedDirect oldk f = do + locs <- removeAssociatedFile oldk f + whenM (pure (null locs) <&&> not <$> inAnnex oldk) $ + logStatus oldk InfoMissing + +{- Enable/disable direct mode. -} +setDirect :: Bool -> Annex () +setDirect wantdirect = do + if wantdirect + then do + switchHEAD + setbare + else do + setbare + switchHEADBack + setConfig (annexConfig "direct") val + Annex.changeGitConfig $ \c -> c { annexDirect = wantdirect } + where + val = Git.Config.boolConfig wantdirect + setbare = setConfig (ConfigKey Git.Config.coreBare) val + +{- Since direct mode sets core.bare=true, incoming pushes could change + - the currently checked out branch. To avoid this problem, HEAD + - is changed to a internal ref that nothing is going to push to. + - + - For refs/heads/master, use refs/heads/annex/direct/master; + - this way things that show HEAD (eg shell prompts) will + - hopefully show just "master". -} +directBranch :: Ref -> Ref +directBranch orighead = case split "/" $ show orighead of + ("refs":"heads":"annex":"direct":_) -> orighead + ("refs":"heads":rest) -> + Ref $ "refs/heads/annex/direct/" ++ intercalate "/" rest + _ -> Ref $ "refs/heads/" ++ show (Git.Ref.base orighead) + +{- Converts a directBranch back to the original branch. + - + - Any other ref is left unchanged. + -} +fromDirectBranch :: Ref -> Ref +fromDirectBranch directhead = case split "/" $ show directhead of + ("refs":"heads":"annex":"direct":rest) -> + Ref $ "refs/heads/" ++ intercalate "/" rest + _ -> directhead + +switchHEAD :: Annex () +switchHEAD = maybe noop switch =<< inRepo Git.Branch.currentUnsafe + where + switch orighead = do + let newhead = directBranch orighead + maybe noop (inRepo . Git.Branch.update newhead) + =<< inRepo (Git.Ref.sha orighead) + inRepo $ Git.Branch.checkout newhead + +switchHEADBack :: Annex () +switchHEADBack = maybe noop switch =<< inRepo Git.Branch.currentUnsafe + where + switch currhead = do + let orighead = fromDirectBranch currhead + v <- inRepo $ Git.Ref.sha currhead + case v of + Just headsha + | orighead /= currhead -> do + inRepo $ Git.Branch.update orighead headsha + inRepo $ Git.Branch.checkout orighead + inRepo $ Git.Branch.delete currhead + _ -> inRepo $ Git.Branch.checkout orighead diff --git a/Annex/Direct/Fixup.hs b/Annex/Direct/Fixup.hs new file mode 100644 index 0000000000..13485242ae --- /dev/null +++ b/Annex/Direct/Fixup.hs @@ -0,0 +1,31 @@ +{- git-annex direct mode guard fixup + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Annex.Direct.Fixup where + +import Git.Types +import Git.Config +import qualified Git.Construct as Construct +import Utility.Path +import Utility.SafeCommand + +{- Direct mode repos have core.bare=true, but are not really bare. + - Fix up the Repo to be a non-bare repo, and arrange for git commands + - run by git-annex to be passed parameters that override this setting. -} +fixupDirect :: Repo -> IO Repo +fixupDirect r@(Repo { location = l@(Local { gitdir = d, worktree = Nothing }) }) = do + let r' = r + { location = l { worktree = Just (parentDir d) } + , gitGlobalOpts = gitGlobalOpts r ++ + [ Param "-c" + , Param $ coreBare ++ "=" ++ boolConfig False + ] + } + -- Recalc now that the worktree is correct. + rs' <- Construct.fromRemotes r' + return $ r' { remotes = rs' } +fixupDirect r = return r diff --git a/Annex/Environment.hs b/Annex/Environment.hs new file mode 100644 index 0000000000..f22c5f2d49 --- /dev/null +++ b/Annex/Environment.hs @@ -0,0 +1,65 @@ +{- git-annex environment + - + - Copyright 2012, 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Annex.Environment where + +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 + - environment variables. + - + - Git also requires the system have a hostname containing a dot. + - Otherwise, it tries various methods to find a FQDN, and will fail if it + - does not. To avoid replicating that code here, which would break if its + - methods change, this function does not check the hostname is valid. + - Instead, code that commits can use ensureCommit. + -} +checkEnvironment :: Annex () +checkEnvironment = do + gitusername <- fromRepo $ Git.Config.getMaybe "user.name" + when (isNothing gitusername || gitusername == Just "") $ + 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 + where +#ifndef __ANDROID__ + -- existing environment is not overwritten + ensureEnv var val = void $ 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. -} +ensureCommit :: Annex a -> Annex a +ensureCommit a = either retry return =<< tryAnnex a + where + retry _ = do + setConfig (ConfigKey "user.email") =<< liftIO myUserName + a diff --git a/Annex/Exception.hs b/Annex/Exception.hs new file mode 100644 index 0000000000..91347583e4 --- /dev/null +++ b/Annex/Exception.hs @@ -0,0 +1,46 @@ +{- 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 + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE PackageImports #-} + +module Annex.Exception ( + bracketIO, + 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) + +{- 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 new file mode 100644 index 0000000000..cded857a23 --- /dev/null +++ b/Annex/FileMatcher.hs @@ -0,0 +1,102 @@ +{- git-annex file matching + - + - Copyright 2012, 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Annex.FileMatcher where + +import qualified Data.Map as M + +import Common.Annex +import Limit +import Utility.Matcher +import Types.Group +import Types.Limit +import Logs.Group +import Logs.Remote +import Annex.UUID +import qualified Annex +import Types.FileMatcher +import Git.FilePath +import Types.Remote (RemoteConfig) + +import Data.Either +import qualified Data.Set as S + +type FileMatcher = Matcher MatchFiles + +checkFileMatcher :: FileMatcher -> FilePath -> Annex Bool +checkFileMatcher matcher file = checkFileMatcher' matcher file S.empty True + +checkFileMatcher' :: FileMatcher -> FilePath -> AssumeNotPresent -> Bool -> Annex Bool +checkFileMatcher' matcher file notpresent def + | isEmpty matcher = return def + | otherwise = do + matchfile <- getTopFilePath <$> inRepo (toTopFilePath file) + let fi = FileInfo + { matchFile = matchfile + , relFile = file + } + matchMrun matcher $ \a -> a notpresent fi + +matchAll :: FileMatcher +matchAll = generate [] + +parsedToMatcher :: [Either String (Token MatchFiles)] -> Either String FileMatcher +parsedToMatcher parsed = case partitionEithers parsed of + ([], vs) -> Right $ generate vs + (es, _) -> Left $ unwords $ map ("Parse failure: " ++) es + +exprParser :: GroupMap -> M.Map UUID RemoteConfig -> Maybe UUID -> String -> [Either String (Token MatchFiles)] +exprParser groupmap configmap mu expr = + map parse $ tokenizeMatcher expr + where + parse = parseToken + (limitPresent mu) + (limitInDir preferreddir) + groupmap + preferreddir = fromMaybe "public" $ + M.lookup "preferreddir" =<< (`M.lookup` configmap) =<< mu + +parseToken :: MkLimit -> MkLimit -> GroupMap -> String -> Either String (Token MatchFiles) +parseToken checkpresent checkpreferreddir groupmap t + | t `elem` tokens = Right $ token t + | t == "present" = use checkpresent + | t == "inpreferreddir" = use checkpreferreddir + | otherwise = maybe (Left $ "near " ++ show t) use $ M.lookup k $ + M.fromList + [ ("include", limitInclude) + , ("exclude", limitExclude) + , ("copies", limitCopies) + , ("inbackend", limitInBackend) + , ("largerthan", limitSize (>)) + , ("smallerthan", limitSize (<)) + , ("inallgroup", limitInAllGroup groupmap) + ] + where + (k, v) = separate (== '=') t + use a = Operation <$> a v + +{- This is really dumb tokenization; there's no support for quoted values. + - Open and close parens are always treated as standalone tokens; + - otherwise tokens must be separated by whitespace. -} +tokenizeMatcher :: String -> [String] +tokenizeMatcher = filter (not . null ) . concatMap splitparens . words + where + splitparens = segmentDelim (`elem` "()") + +{- 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 = go =<< annexLargeFiles <$> Annex.getGitConfig + where + go Nothing = return matchAll + go (Just expr) = do + gm <- groupMap + rc <- readRemoteLog + u <- getUUID + either badexpr return $ + parsedToMatcher $ exprParser gm rc (Just u) expr + badexpr e = error $ "bad annex.largefiles configuration: " ++ e diff --git a/Annex/Hook.hs b/Annex/Hook.hs new file mode 100644 index 0000000000..7301a09584 --- /dev/null +++ b/Annex/Hook.hs @@ -0,0 +1,42 @@ +{- git-annex git hooks + - + - Note that it's important that the scripts not change, otherwise + - removing old hooks using an old version of the script would fail. + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Annex.Hook where + +import Common.Annex +import qualified Git.Hook as Git +import Utility.Shell +import Config + +preCommitHook :: Git.Hook +preCommitHook = Git.Hook "pre-commit" (mkHookScript "git annex pre-commit .") + +mkHookScript :: String -> String +mkHookScript s = unlines + [ shebang_local + , "# automatically configured by git-annex" + , s + ] + +hookWrite :: Git.Hook -> Annex () +hookWrite h = + -- cannot have git hooks in a crippled filesystem (no execute bit) + unlessM crippledFileSystem $ + unlessM (inRepo $ Git.hookWrite h) $ + hookWarning h "already exists, not configuring" + +hookUnWrite :: Git.Hook -> Annex () +hookUnWrite h = unlessM (inRepo $ Git.hookUnWrite h) $ + hookWarning h "contents modified; not deleting. Edit it to remove call to git annex." + +hookWarning :: Git.Hook -> String -> Annex () +hookWarning h msg = do + r <- gitRepo + warning $ Git.hookName h ++ " hook (" ++ Git.hookFile h r ++ ") " ++ msg diff --git a/Annex/Journal.hs b/Annex/Journal.hs new file mode 100644 index 0000000000..8b88ab2fbf --- /dev/null +++ b/Annex/Journal.hs @@ -0,0 +1,128 @@ +{- management of the git-annex journal + - + - The journal is used to queue up changes before they are committed to the + - 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 + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Annex.Journal where + +import System.IO.Binary + +import Common.Annex +import Annex.Exception +import qualified Git +import Annex.Perms + +{- Records content for a file in the branch to the journal. + - + - Using the journal, rather than immediatly staging content to the index + - avoids git needing to rewrite the index after every change. + - + - The file in the journal is updated atomically, which allows + - getJournalFileStale to always return a consistent journal file + - content, although possibly not the most current one. + -} +setJournalFile :: JournalLocked -> FilePath -> String -> Annex () +setJournalFile _jl file content = do + createAnnexDirectory =<< fromRepo gitAnnexJournalDir + createAnnexDirectory =<< fromRepo gitAnnexTmpDir + -- journal file is written atomically + jfile <- fromRepo $ journalFile file + tmp <- fromRepo gitAnnexTmpDir + let tmpfile = tmp takeFileName jfile + liftIO $ do + writeBinaryFile tmpfile content + moveFile tmpfile jfile + +{- Gets any journalled content for a file in the branch. -} +getJournalFile :: JournalLocked -> FilePath -> Annex (Maybe String) +getJournalFile _jl = getJournalFileStale + +{- Without locking, this is not guaranteed to be the most recent + - version of the file in the journal, so should not be used as a basis for + - changes. -} +getJournalFileStale :: FilePath -> Annex (Maybe String) +getJournalFileStale file = inRepo $ \g -> catchMaybeIO $ + readFileStrict $ journalFile file g + +{- List of files that have updated content in the journal. -} +getJournalledFiles :: JournalLocked -> Annex [FilePath] +getJournalledFiles jl = map fileJournal <$> getJournalFiles jl + +getJournalledFilesStale :: Annex [FilePath] +getJournalledFilesStale = map fileJournal <$> getJournalFilesStale + +{- List of existing journal files. -} +getJournalFiles :: JournalLocked -> Annex [FilePath] +getJournalFiles _jl = getJournalFilesStale + +{- List of existing journal files, but without locking, may miss new ones + - just being added, or may have false positives if the journal is staged + - as it is run. -} +getJournalFilesStale :: Annex [FilePath] +getJournalFilesStale = do + g <- gitRepo + fs <- liftIO $ catchDefaultIO [] $ + getDirectoryContents $ gitAnnexJournalDir g + return $ filter (`notElem` [".", ".."]) fs + +{- Checks if there are changes in the journal. -} +journalDirty :: Annex Bool +journalDirty = not . null <$> getJournalFilesStale + +{- Produces a filename to use in the journal for a file on the branch. + - + - The journal typically won't have a lot of files in it, so the hashing + - used in the branch is not necessary, and all the files are put directly + - in the journal directory. + -} +journalFile :: FilePath -> Git.Repo -> FilePath +journalFile file repo = gitAnnexJournalDir repo concatMap mangle file + where + mangle c + | c == pathSeparator = "_" + | c == '_' = "__" + | otherwise = [c] + +{- Converts a journal file (relative to the journal dir) back to the + - filename on the branch. -} +fileJournal :: FilePath -> FilePath +fileJournal = replace [pathSeparator, pathSeparator] "_" . + replace "_" [pathSeparator] + +{- Sentinal value, only produced by lockJournal; required + - as a parameter by things that need to ensure the journal is + - locked. -} +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 +#else + lock lockfile _mode = do + writeFile lockfile "" + return lockfile +#endif +#ifndef mingw32_HOST_OS + unlock = closeFd +#else + unlock = removeFile +#endif diff --git a/Annex/Link.hs b/Annex/Link.hs new file mode 100644 index 0000000000..30d8c2ae8c --- /dev/null +++ b/Annex/Link.hs @@ -0,0 +1,105 @@ +{- git-annex links to content + - + - On file systems that support them, symlinks are used. + - + - On other filesystems, git instead stores the symlink target in a regular + - file. + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Annex.Link where + +import Common.Annex +import qualified Annex +import qualified Git.HashObject +import qualified Git.UpdateIndex +import qualified Annex.Queue +import Git.Types +import Git.FilePath + +type LinkTarget = String + +{- Checks if a file is a link to a key. -} +isAnnexLink :: FilePath -> Annex (Maybe Key) +isAnnexLink file = maybe Nothing (fileKey . takeFileName) <$> getAnnexLinkTarget file + +{- Gets the link target of a symlink. + - + - On a filesystem that does not support symlinks, fall back to getting the + - link target by looking inside the file. + - + - Returns Nothing if the file is not a symlink, or not a link to annex + - content. + -} +getAnnexLinkTarget :: FilePath -> Annex (Maybe LinkTarget) +getAnnexLinkTarget file = ifM (coreSymlinks <$> Annex.getGitConfig) + ( check readSymbolicLink $ + return Nothing + , check readSymbolicLink $ + check probefilecontent $ + return Nothing + ) + where + check getlinktarget fallback = do + v <- liftIO $ catchMaybeIO $ getlinktarget file + case v of + Just l + | isLinkToAnnex (fromInternalGitPath l) -> return v + | otherwise -> return Nothing + Nothing -> fallback + + probefilecontent f = do + h <- openFile f ReadMode + fileEncoding h + -- The first 8k is more than enough to read; link + -- files are small. + s <- take 8192 <$> hGetContents h + -- If we got the full 8k, the file is too large + if length s == 8192 + then do + hClose h + return "" + else do + hClose h + -- If there are any NUL or newline + -- characters, or whitespace, we + -- certianly don't have a link to a + -- git-annex key. + return $ if any (`elem` s) "\0\n\r \t" + then "" + else s + +{- Creates a link on disk. + - + - On a filesystem that does not support symlinks, writes the link target + - to a file. Note that git will only treat the file as a symlink if + - 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) + ( liftIO $ do + void $ tryIO $ removeFile file + createSymbolicLink linktarget file + , liftIO $ writeFile file linktarget + ) + +{- Creates a link on disk, and additionally stages it in git. -} +addAnnexLink :: LinkTarget -> FilePath -> Annex () +addAnnexLink linktarget file = do + makeAnnexLink linktarget file + stageSymlink file =<< hashSymlink linktarget + +{- Injects a symlink target into git, returning its Sha. -} +hashSymlink :: LinkTarget -> Annex Sha +hashSymlink linktarget = inRepo $ Git.HashObject.hashObject BlobObject $ + toInternalGitPath linktarget + +{- Stages a symlink to the annex, using a Sha of its target. -} +stageSymlink :: FilePath -> Sha -> Annex () +stageSymlink file sha = + Annex.Queue.addUpdateIndex =<< + inRepo (Git.UpdateIndex.stageSymlink file sha) diff --git a/Annex/LockPool.hs b/Annex/LockPool.hs new file mode 100644 index 0000000000..a9a0f31019 --- /dev/null +++ b/Annex/LockPool.hs @@ -0,0 +1,56 @@ +{- git-annex lock pool + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Annex.LockPool where + +import qualified Data.Map as M +import System.Posix.Types (Fd) + +import Common.Annex +import Annex +#ifndef mingw32_HOST_OS +import Annex.Perms +#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 + fd <- liftIO $ noUmask mode $ + openFd file ReadOnly (Just mode) defaultFileFlags + liftIO $ waitToSetLock fd (ReadLock, AbsoluteSeek, 0, 0) +#else + liftIO $ writeFile file "" + let fd = 0 +#endif + changePool $ M.insert file fd + +unlockFile :: FilePath -> Annex () +unlockFile file = maybe noop go =<< fromPool file + where + go fd = do +#ifndef mingw32_HOST_OS + liftIO $ closeFd fd +#endif + changePool $ M.delete file + +getPool :: Annex (M.Map FilePath Fd) +getPool = getState lockpool + +fromPool :: FilePath -> Annex (Maybe Fd) +fromPool file = M.lookup file <$> getPool + +changePool :: (M.Map FilePath Fd -> M.Map FilePath Fd) -> Annex () +changePool a = do + m <- getPool + changeState $ \s -> s { lockpool = a m } diff --git a/Annex/Path.hs b/Annex/Path.hs new file mode 100644 index 0000000000..a8c4907b23 --- /dev/null +++ b/Annex/Path.hs @@ -0,0 +1,34 @@ +{- git-annex program path + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Annex.Path where + +import Common +import Config.Files +import System.Environment + +{- A fully qualified path to the currently running git-annex program. + - + - getExecutablePath is available since ghc 7.4.2. On OSs it supports + - well, it returns the complete path to the program. But, on other OSs, + - it might return just the basename. + -} +programPath :: IO (Maybe FilePath) +programPath = do +#if MIN_VERSION_base(4,6,0) + exe <- getExecutablePath + p <- if isAbsolute exe + then return exe + else readProgramFile +#else + p <- readProgramFile +#endif + -- In case readProgramFile returned just the command name, + -- fall back to finding it in PATH. + searchPath p diff --git a/Annex/Perms.hs b/Annex/Perms.hs new file mode 100644 index 0000000000..e3a2fa65a2 --- /dev/null +++ b/Annex/Perms.hs @@ -0,0 +1,125 @@ +{- git-annex file permissions + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Annex.Perms ( + setAnnexFilePerm, + setAnnexDirPerm, + annexFileMode, + createAnnexDirectory, + noUmask, + createContentDir, + freezeContentDir, + thawContentDir, + modifyContent, +) where + +import Common.Annex +import Utility.FileMode +import Git.SharedRepository +import qualified Annex +import Annex.Exception +import Config + +import System.Posix.Types + +withShared :: (SharedRepository -> Annex a) -> Annex a +withShared a = maybe startup a =<< Annex.getState Annex.shared + where + startup = do + shared <- fromRepo getSharedRepository + Annex.changeState $ \s -> s { Annex.shared = Just shared } + a shared + +setAnnexFilePerm :: FilePath -> Annex () +setAnnexFilePerm = setAnnexPerm False + +setAnnexDirPerm :: FilePath -> Annex () +setAnnexDirPerm = setAnnexPerm True + +{- Sets appropriate file mode for a file or directory in the annex, + - other than the content files and content directory. Normally, + - use the default mode, but with core.sharedRepository set, + - allow the group to write, etc. -} +setAnnexPerm :: Bool -> FilePath -> Annex () +setAnnexPerm isdir file = unlessM crippledFileSystem $ + withShared $ liftIO . go + where + go GroupShared = modifyFileMode file $ addModes $ + groupSharedModes ++ + if isdir then [ ownerExecuteMode, groupExecuteMode ] else [] + go AllShared = modifyFileMode file $ addModes $ + readModes ++ + [ ownerWriteMode, groupWriteMode ] ++ + if isdir then executeModes else [] + go _ = noop + +{- Gets the appropriate mode to use for creating a file in the annex + - (other than content files, which are locked down more). -} +annexFileMode :: Annex FileMode +annexFileMode = withShared $ return . go + where + go GroupShared = sharedmode + go AllShared = combineModes (sharedmode:readModes) + go _ = stdFileMode + sharedmode = combineModes groupSharedModes + +{- Creates a directory inside the gitAnnexDir, including any parent + - directories. Makes directories with appropriate permissions. -} +createAnnexDirectory :: FilePath -> Annex () +createAnnexDirectory dir = traverse dir [] =<< top + where + top = parentDir <$> fromRepo gitAnnexDir + traverse d below stop + | d `equalFilePath` stop = done + | otherwise = ifM (liftIO $ doesDirectoryExist d) + ( done + , traverse (parentDir d) (d:below) stop + ) + where + done = forM_ below $ \p -> do + liftIO $ createDirectoryIfMissing True p + setAnnexDirPerm p + +{- Blocks writing to the directory an annexed file is in, to prevent the + - file accidentially being deleted. However, if core.sharedRepository + - is set, this is not done, since the group must be allowed to delete the + - file. + -} +freezeContentDir :: FilePath -> Annex () +freezeContentDir file = unlessM crippledFileSystem $ + liftIO . go =<< fromRepo getSharedRepository + where + dir = parentDir file + go GroupShared = groupWriteRead dir + go AllShared = groupWriteRead dir + go _ = preventWrite dir + +thawContentDir :: FilePath -> Annex () +thawContentDir file = unlessM crippledFileSystem $ + liftIO $ allowWrite $ parentDir file + +{- Makes the directory tree to store an annexed file's content, + - with appropriate permissions on each level. -} +createContentDir :: FilePath -> Annex () +createContentDir dest = do + unlessM (liftIO $ doesDirectoryExist dir) $ + createAnnexDirectory dir + -- might have already existed with restricted perms + unlessM crippledFileSystem $ + liftIO $ allowWrite dir + where + dir = parentDir dest + +{- Creates the content directory for a file if it doesn't already exist, + - or thaws it if it does, then runs an action to modify the file, and + - finally, freezes the content directory. -} +modifyContent :: FilePath -> Annex a -> Annex a +modifyContent f a = do + createContentDir f -- also thaws it + v <- tryAnnex a + freezeContentDir f + either throwAnnex return v diff --git a/Annex/Queue.hs b/Annex/Queue.hs new file mode 100644 index 0000000000..a5ef600379 --- /dev/null +++ b/Annex/Queue.hs @@ -0,0 +1,62 @@ +{- git-annex command queue + - + - Copyright 2011, 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Annex.Queue ( + addCommand, + addUpdateIndex, + flush, + flushWhenFull, + size +) where + +import Common.Annex +import Annex hiding (new) +import qualified Git.Queue +import qualified Git.UpdateIndex + +{- Adds a git command to the queue. -} +addCommand :: String -> [CommandParam] -> [FilePath] -> Annex () +addCommand command params files = do + q <- get + store <=< inRepo $ Git.Queue.addCommand command params files q + +{- Adds an update-index stream to the queue. -} +addUpdateIndex :: Git.UpdateIndex.Streamer -> Annex () +addUpdateIndex streamer = do + q <- get + store <=< inRepo $ Git.Queue.addUpdateIndex streamer q + +{- Runs the queue if it is full. Should be called periodically. -} +flushWhenFull :: Annex () +flushWhenFull = do + q <- get + when (Git.Queue.full q) flush + +{- Runs (and empties) the queue. -} +flush :: Annex () +flush = do + q <- get + unless (0 == Git.Queue.size q) $ do + showStoringStateAction + q' <- inRepo $ Git.Queue.flush q + store q' + +{- Gets the size of the queue. -} +size :: Annex Int +size = Git.Queue.size <$> get + +get :: Annex Git.Queue.Queue +get = maybe new return =<< getState repoqueue + +new :: Annex Git.Queue.Queue +new = do + q <- Git.Queue.new . annexQueueSize <$> getGitConfig + store q + return q + +store :: Git.Queue.Queue -> Annex () +store q = changeState $ \s -> s { repoqueue = Just q } diff --git a/Annex/Quvi.hs b/Annex/Quvi.hs new file mode 100644 index 0000000000..b0725bae76 --- /dev/null +++ b/Annex/Quvi.hs @@ -0,0 +1,20 @@ +{- quvi options for git-annex + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE Rank2Types #-} + +module Annex.Quvi where + +import Common.Annex +import qualified Annex +import Utility.Quvi +import Utility.Url + +withQuviOptions :: forall a. Query a -> [CommandParam] -> URLString -> Annex a +withQuviOptions a ps url = do + opts <- map Param . annexQuviOptions <$> Annex.getGitConfig + liftIO $ a (ps++opts) url diff --git a/Annex/ReplaceFile.hs b/Annex/ReplaceFile.hs new file mode 100644 index 0000000000..dd93b471c8 --- /dev/null +++ b/Annex/ReplaceFile.hs @@ -0,0 +1,39 @@ +{- git-annex file replacing + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +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. + - + - The action is passed a temp file, which it can write to, and once + - done the temp file is moved into place. + - + - The action can throw an IO exception, in which case the temp file + - will be deleted, and the existing file will be preserved. + - + - Throws an IO exception when it was unable to replace the file. + -} +replaceFile :: FilePath -> (FilePath -> Annex ()) -> Annex () +replaceFile file a = do + tmpdir <- fromRepo gitAnnexTmpDir + void $ createAnnexDirectory tmpdir + bracketIO (setup tmpdir) nukeFile $ \tmpfile -> do + a tmpfile + liftIO $ catchIO (rename tmpfile file) (fallback tmpfile) + where + setup tmpdir = do + (tmpfile, h) <- openTempFileWithDefaultPermissions tmpdir "tmp" + hClose h + return tmpfile + fallback tmpfile _ = do + createDirectoryIfMissing True $ parentDir file + rename tmpfile file diff --git a/Annex/Ssh.hs b/Annex/Ssh.hs new file mode 100644 index 0000000000..8553ee797d --- /dev/null +++ b/Annex/Ssh.hs @@ -0,0 +1,198 @@ +{- git-annex ssh interface, with connection caching + - + - Copyright 2012,2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Annex.Ssh ( + sshCachingOptions, + sshCleanup, + sshCacheDir, + sshReadPort, +) where + +import qualified Data.Map as M +import Data.Hash.MD5 +import System.Process (cwd) + +import Common.Annex +import Annex.LockPool +import qualified Build.SysConfig as SysConfig +import qualified Annex +import Config +import Utility.Env +#ifndef mingw32_HOST_OS +import Annex.Perms +#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 = go =<< sshInfo (host, port) + where + go (Nothing, params) = ret params + go (Just socketfile, params) = do + cleanstale + liftIO $ createDirectoryIfMissing True $ parentDir socketfile + lockFile $ socket2lock 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 + +{- 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 + where + go Nothing = return (Nothing, []) + go (Just dir) = do + r <- liftIO $ bestSocketPath $ dir hostport2socket host port + return $ case r of + Nothing -> (Nothing, []) + Just socketfile -> (Just socketfile, sshConnectionCachingParams socketfile) + +{- Given an absolute path to use for a socket file, + - returns whichever is shorter of that or the relative path to the same + - file. + - + - If no path can be constructed that is a valid socket, returns Nothing. -} +bestSocketPath :: FilePath -> IO (Maybe FilePath) +bestSocketPath abssocketfile = do + relsocketfile <- liftIO $ relPathCwdToFile abssocketfile + let socketfile = if length abssocketfile <= length relsocketfile + then abssocketfile + else relsocketfile + return $ if valid_unix_socket_path (socketfile ++ sshgarbage) + then Just socketfile + else Nothing + where + -- 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 = take (1+16) $ repeat 'X' + +sshConnectionCachingParams :: FilePath -> [CommandParam] +sshConnectionCachingParams socketfile = + [ Param "-S", Param socketfile + , Params "-o ControlMaster=auto -o ControlPersist=yes" + ] + +{- ssh connection caching creates sockets, so will not work on a + - crippled filesystem. A GIT_ANNEX_TMP_DIR can be provided to use + - a different filesystem. -} +sshCacheDir :: Annex (Maybe FilePath) +sshCacheDir + | SysConfig.sshconnectioncaching = ifM crippledFileSystem + ( maybe (return Nothing) usetmpdir =<< gettmpdir + , ifM (fromMaybe True . annexSshCaching <$> Annex.getGitConfig) + ( Just <$> fromRepo gitAnnexSshDir + , return Nothing + ) + ) + | otherwise = return Nothing + where + gettmpdir = liftIO $ getEnv "GIT_ANNEX_TMP_DIR" + usetmpdir tmpdir = liftIO $ catchMaybeIO $ do + createDirectoryIfMissing True tmpdir + return tmpdir + +portParams :: Maybe Integer -> [CommandParam] +portParams Nothing = [] +portParams (Just port) = [Param "-p", Param $ show port] + +{- Stop any unused ssh processes. -} +sshCleanup :: Annex () +sshCleanup = go =<< sshCacheDir + 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. + 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) + case v of + Left _ -> noop + Right _ -> stopssh socketfile + liftIO $ closeFd fd +#else + stopssh 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 "any"]) + { cwd = Just dir } + -- Cannot remove the lock file; other processes may + -- be waiting on our exclusive lock to use it. + +{- 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 + - for each host. + -} +hostport2socket :: String -> Maybe Integer -> FilePath +hostport2socket host Nothing = hostport2socket' host +hostport2socket host (Just port) = hostport2socket' $ host ++ "!" ++ show port +hostport2socket' :: String -> FilePath +hostport2socket' s + | length s > lengthofmd5s = md5s (Str s) + | otherwise = s + where + lengthofmd5s = 32 + +socket2lock :: FilePath -> FilePath +socket2lock socket = socket ++ lockExt + +isLock :: FilePath -> Bool +isLock f = lockExt `isSuffixOf` f + +lockExt :: String +lockExt = ".lock" + +{- This is the size of the sun_path component of sockaddr_un, which + - is the limit to the total length of the filename of a unix socket. + - + - On Linux, this is 108. On OSX, 104. TODO: Probe + -} +sizeof_sockaddr_un_sun_path :: Int +sizeof_sockaddr_un_sun_path = 100 + +{- Note that this looks at the true length of the path in bytes, as it will + - appear on disk. -} +valid_unix_socket_path :: FilePath -> Bool +valid_unix_socket_path f = length (decodeW8 f) < sizeof_sockaddr_un_sun_path + +{- Parses the SSH port, and returns the other OpenSSH options. If + - several ports are found, the last one takes precedence. -} +sshReadPort :: [String] -> (Maybe Integer, [String]) +sshReadPort params = (port, reverse args) + where + (port,args) = aux (Nothing, []) params + aux (p,ps) [] = (p,ps) + aux (_,ps) ("-p":p:rest) = aux (readPort p, ps) rest + 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 diff --git a/Annex/TaggedPush.hs b/Annex/TaggedPush.hs new file mode 100644 index 0000000000..039dc0e173 --- /dev/null +++ b/Annex/TaggedPush.hs @@ -0,0 +1,61 @@ +{- git-annex tagged pushes + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Annex.TaggedPush where + +import Common.Annex +import qualified Remote +import qualified Annex.Branch +import qualified Git +import qualified Git.Ref +import qualified Git.Command +import qualified Git.Branch +import Utility.Base64 + +{- Converts a git branch into a branch that is tagged with a UUID, typically + - the UUID of the repo that will be pushing it, and possibly with other + - information. + - + - Pushing to branches on the remote that have our uuid in them is ugly, + - but it reserves those branches for pushing by us, and so our pushes will + - never conflict with other pushes. + - + - To avoid cluttering up the branch display, the branch is put under + - refs/synced/, rather than the usual refs/remotes/ + - + - Both UUIDs and Base64 encoded data are always legal to be used in git + - refs, per git-check-ref-format. + -} +toTaggedBranch :: UUID -> Maybe String -> Git.Branch -> Git.Branch +toTaggedBranch u info b = Git.Ref $ intercalate "/" $ catMaybes + [ Just "refs/synced" + , Just $ fromUUID u + , toB64 <$> info + , Just $ show $ Git.Ref.base b + ] + +fromTaggedBranch :: Git.Branch -> Maybe (UUID, Maybe String) +fromTaggedBranch b = case split "/" $ show b of + ("refs":"synced":u:info:_base) -> + Just (toUUID u, fromB64Maybe info) + ("refs":"synced":u:_base) -> + Just (toUUID u, Nothing) + _ -> Nothing + where + +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 + {- 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 + ] + where + refspec b = show b ++ ":" ++ show (toTaggedBranch u info b) diff --git a/Annex/UUID.hs b/Annex/UUID.hs new file mode 100644 index 0000000000..4e274503bf --- /dev/null +++ b/Annex/UUID.hs @@ -0,0 +1,96 @@ +{- git-annex uuids + - + - Each git repository used by git-annex has an annex.uuid setting that + - uniquely identifies that repository. + - + - UUIDs of remotes are cached in git config, using keys named + - remote..annex-uuid + - + - Copyright 2010-2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Annex.UUID ( + getUUID, + getRepoUUID, + getUncachedUUID, + prepUUID, + genUUID, + genUUIDInNameSpace, + gCryptNameSpace, + removeRepoUUID, + storeUUID, + setUUID, +) where + +import Common.Annex +import qualified Git +import qualified Git.Config +import Config + +import qualified Data.UUID as U +import qualified Data.UUID.V5 as U5 +import System.Random +import Data.Bits.Utils + +configkey :: ConfigKey +configkey = annexConfig "uuid" + +{- Generates a random UUID, that does not include the MAC address. -} +genUUID :: IO UUID +genUUID = UUID . show <$> (randomIO :: IO U.UUID) + +{- Generates a UUID from a given string, using a namespace. + - Given the same namespace, the same string will always result + - in the same UUID. -} +genUUIDInNameSpace :: U.UUID -> String -> UUID +genUUIDInNameSpace namespace = UUID . show . U5.generateNamed namespace . s2w8 + +{- Namespace used for UUIDs derived from git-remote-gcrypt ids. -} +gCryptNameSpace :: U.UUID +gCryptNameSpace = U5.generateNamed U5.namespaceURL $ + s2w8 "http://git-annex.branchable.com/design/gcrypt/" + +{- Get current repository's UUID. -} +getUUID :: Annex UUID +getUUID = getRepoUUID =<< gitRepo + +{- Looks up a repo's UUID, caching it in .git/config if it's not already. -} +getRepoUUID :: Git.Repo -> Annex UUID +getRepoUUID r = do + c <- toUUID <$> getConfig cachekey "" + let u = getUncachedUUID r + + if c /= u && u /= NoUUID + then do + updatecache u + return u + else return c + where + updatecache u = do + g <- gitRepo + when (g /= r) $ storeUUID cachekey u + cachekey = remoteConfig r "uuid" + +removeRepoUUID :: Annex () +removeRepoUUID = unsetConfig configkey + +getUncachedUUID :: Git.Repo -> UUID +getUncachedUUID = toUUID . Git.Config.get key "" + where + (ConfigKey key) = configkey + +{- Make sure that the repo has an annex.uuid setting. -} +prepUUID :: Annex () +prepUUID = whenM ((==) NoUUID <$> getUUID) $ + storeUUID configkey =<< liftIO genUUID + +storeUUID :: ConfigKey -> UUID -> Annex () +storeUUID 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 diff --git a/Annex/Url.hs b/Annex/Url.hs new file mode 100644 index 0000000000..0401ffe07b --- /dev/null +++ b/Annex/Url.hs @@ -0,0 +1,27 @@ +{- Url downloading, with git-annex user agent. + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Annex.Url ( + module U, + withUserAgent, + getUserAgent, +) where + +import Common.Annex +import qualified Annex +import Utility.Url as U +import qualified Build.SysConfig as SysConfig + +defaultUserAgent :: U.UserAgent +defaultUserAgent = "git-annex/" ++ SysConfig.packageversion + +getUserAgent :: Annex (Maybe U.UserAgent) +getUserAgent = Annex.getState $ + Just . fromMaybe defaultUserAgent . Annex.useragent + +withUserAgent :: (Maybe U.UserAgent -> IO a) -> Annex a +withUserAgent a = liftIO . a =<< getUserAgent diff --git a/Annex/Version.hs b/Annex/Version.hs new file mode 100644 index 0000000000..2b4a49fd2d --- /dev/null +++ b/Annex/Version.hs @@ -0,0 +1,47 @@ +{- git-annex repository versioning + - + - Copyright 2010,2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Annex.Version where + +import Common.Annex +import Config +import qualified Annex + +type Version = String + +defaultVersion :: Version +defaultVersion = "3" + +directModeVersion :: Version +directModeVersion = "5" + +supportedVersions :: [Version] +supportedVersions = [defaultVersion, directModeVersion] + +upgradableVersions :: [Version] +#ifndef mingw32_HOST_OS +upgradableVersions = ["0", "1", "2", "4"] +#else +upgradableVersions = ["2", "4"] +#endif + +autoUpgradeableVersions :: [Version] +autoUpgradeableVersions = ["4"] + +versionField :: ConfigKey +versionField = annexConfig "version" + +getVersion :: Annex (Maybe Version) +getVersion = annexVersion <$> Annex.getGitConfig + +setVersion :: Version -> Annex () +setVersion = setConfig versionField + +removeVersion :: Annex () +removeVersion = unsetConfig versionField diff --git a/Annex/Wanted.hs b/Annex/Wanted.hs new file mode 100644 index 0000000000..04dcc1c1ca --- /dev/null +++ b/Annex/Wanted.hs @@ -0,0 +1,32 @@ +{- git-annex checking whether content is wanted + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Annex.Wanted where + +import Common.Annex +import Logs.PreferredContent +import Annex.UUID + +import qualified Data.Set as S + +{- Check if a file is preferred content for the local repository. -} +wantGet :: Bool -> AssociatedFile -> Annex Bool +wantGet def Nothing = return def +wantGet def (Just file) = isPreferredContent Nothing S.empty file def + +{- Check if a file is preferred content for a remote. -} +wantSend :: Bool -> AssociatedFile -> UUID -> Annex Bool +wantSend def Nothing _ = return def +wantSend def (Just file) to = isPreferredContent (Just to) S.empty file def + +{- Check if a file can be dropped, maybe from a remote. + - Don't drop files that are preferred content. -} +wantDrop :: Bool -> Maybe UUID -> AssociatedFile -> Annex Bool +wantDrop def _ Nothing = return $ not def +wantDrop def from (Just file) = do + u <- maybe getUUID (return . id) from + not <$> isPreferredContent (Just u) (S.singleton u) file def diff --git a/Assistant.hs b/Assistant.hs new file mode 100644 index 0000000000..d4786f99ad --- /dev/null +++ b/Assistant.hs @@ -0,0 +1,175 @@ +{- git-annex assistant daemon + - + - Copyright 2012-2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Assistant where + +import qualified Annex +import Assistant.Common +import Assistant.DaemonStatus +import Assistant.NamedThread +import Assistant.Types.ThreadedMonad +import Assistant.Threads.DaemonStatus +import Assistant.Threads.Watcher +import Assistant.Threads.Committer +import Assistant.Threads.Pusher +import Assistant.Threads.Merger +import Assistant.Threads.TransferWatcher +import Assistant.Threads.Transferrer +import Assistant.Threads.SanityChecker +import Assistant.Threads.Cronner +import Assistant.Threads.ProblemFixer +#ifdef WITH_CLIBS +import Assistant.Threads.MountWatcher +#endif +import Assistant.Threads.NetWatcher +import Assistant.Threads.Upgrader +import Assistant.Threads.UpgradeWatcher +import Assistant.Threads.TransferScanner +import Assistant.Threads.TransferPoller +import Assistant.Threads.ConfigMonitor +import Assistant.Threads.Glacier +#ifdef WITH_WEBAPP +import Assistant.WebApp +import Assistant.Threads.WebApp +#ifdef WITH_PAIRING +import Assistant.Threads.PairListener +#endif +#ifdef WITH_XMPP +import Assistant.Threads.XMPPClient +import Assistant.Threads.XMPPPusher +#endif +#else +#warning Building without the webapp. You probably need to install Yesod.. +import Assistant.Types.UrlRenderer +#endif +import qualified Utility.Daemon +import Utility.LogFile +import Utility.ThreadScheduler +import Utility.HumanTime +import Annex.Perms +import qualified Build.SysConfig as SysConfig + +import System.Log.Logger +import Network.Socket (HostName) + +stopDaemon :: Annex () +stopDaemon = liftIO . Utility.Daemon.stopDaemon =<< fromRepo gitAnnexPidFile + +{- Starts the daemon. If the daemon is run in the foreground, once it's + - running, can start the browser. + - + - startbrowser is passed the url and html shim file, as well as the original + - 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 + logfile <- fromRepo gitAnnexLogFile +#ifndef mingw32_HOST_OS + createAnnexDirectory (parentDir logfile) + logfd <- liftIO $ 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 + start undaemonize $ + case startbrowser of + Nothing -> Nothing + Just a -> Just $ a origout origerr + else + start (Utility.Daemon.daemonize logfd (Just pidfile) False) Nothing +#else + -- Windows is always foreground, and has no log file. + start id $ + case startbrowser of + Nothing -> Nothing + Just a -> Just $ a Nothing Nothing +#endif + where + desc + | assistant = "assistant" + | otherwise = "watch" + start daemonize webappwaiter = withThreadState $ \st -> do + checkCanWatch + dstatus <- startDaemonStatus + logfile <- fromRepo gitAnnexLogFile + liftIO $ debugM desc $ "logging to " ++ logfile + liftIO $ daemonize $ + flip runAssistant (go webappwaiter) + =<< newAssistantData st dstatus + +#ifdef WITH_WEBAPP + go webappwaiter = do + d <- getAssistant id +#else + go _webappwaiter = do +#endif + notice ["starting", desc, "version", SysConfig.packageversion] + urlrenderer <- liftIO newUrlRenderer +#ifdef WITH_WEBAPP + let webappthread = [ assist $ webAppThread d urlrenderer False cannotrun listenhost Nothing webappwaiter ] +#else + let webappthread = [] +#endif + let threads = if isJust cannotrun + then webappthread + else webappthread ++ + [ watch $ commitThread +#ifdef WITH_WEBAPP +#ifdef WITH_PAIRING + , assist $ pairListenerThread urlrenderer +#endif +#ifdef WITH_XMPP + , assist $ xmppClientThread urlrenderer + , assist $ xmppSendPackThread urlrenderer + , assist $ xmppReceivePackThread urlrenderer +#endif +#endif + , assist $ pushThread + , assist $ pushRetryThread + , assist $ mergeThread + , assist $ transferWatcherThread + , assist $ transferPollerThread + , assist $ transfererThread + , assist $ daemonStatusThread + , assist $ sanityCheckerDailyThread + , assist $ sanityCheckerHourlyThread + , assist $ problemFixerThread urlrenderer +#ifdef WITH_CLIBS + , assist $ mountWatcherThread urlrenderer +#endif + , assist $ netWatcherThread + , assist $ upgraderThread urlrenderer + , assist $ upgradeWatcherThread urlrenderer + , assist $ netWatcherFallbackThread + , assist $ transferScannerThread urlrenderer + , assist $ cronnerThread urlrenderer + , assist $ configMonitorThread + , assist $ glacierThread + , watch $ watchThread + -- must come last so that all threads that wait + -- on it have already started waiting + , watch $ sanityCheckerStartupThread startdelay + ] + + mapM_ (startthread urlrenderer) threads + liftIO waitForTermination + + watch a = (True, a) + assist a = (False, a) + startthread urlrenderer (watcher, t) + | watcher || assistant = startNamedThread urlrenderer t + | otherwise = noop diff --git a/Assistant/Alert.hs b/Assistant/Alert.hs new file mode 100644 index 0000000000..c767d429d9 --- /dev/null +++ b/Assistant/Alert.hs @@ -0,0 +1,433 @@ +{- git-annex assistant alerts + - + - Copyright 2012, 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings, CPP #-} + +module Assistant.Alert where + +import Common.Annex +import Assistant.Types.Alert +import Assistant.Alert.Utility +import qualified Remote +import Utility.Tense +import Logs.Transfer +import Types.Distribution + +import Data.String +import qualified Data.Text as T +import qualified Control.Exception as E + +#ifdef WITH_WEBAPP +import Assistant.DaemonStatus +import Assistant.WebApp.Types +import Assistant.WebApp (renderUrl) +import Yesod +#endif +import Assistant.Monad +import Assistant.Types.UrlRenderer + +{- Makes a button for an alert that opens a Route. + - + - If autoclose is set, the button will close the alert it's + - attached to when clicked. -} +#ifdef WITH_WEBAPP +mkAlertButton :: Bool -> T.Text -> UrlRenderer -> Route WebApp -> Assistant AlertButton +mkAlertButton autoclose label urlrenderer route = do + close <- asIO1 removeAlert + url <- liftIO $ renderUrl urlrenderer route [] + return $ AlertButton + { buttonLabel = label + , buttonUrl = url + , buttonAction = if autoclose then Just close else Nothing + , buttonPrimary = True + } +#endif + +renderData :: Alert -> TenseText +renderData = tenseWords . alertData + +baseActivityAlert :: Alert +baseActivityAlert = Alert + { alertClass = Activity + , alertHeader = Nothing + , alertMessageRender = renderData + , alertData = [] + , alertCounter = 0 + , alertBlockDisplay = False + , alertClosable = False + , alertPriority = Medium + , alertIcon = Just ActivityIcon + , alertCombiner = Nothing + , alertName = Nothing + , alertButtons = [] + } + +warningAlert :: String -> String -> Alert +warningAlert name msg = Alert + { alertClass = Warning + , alertHeader = Just $ tenseWords ["warning"] + , alertMessageRender = renderData + , alertData = [UnTensed $ T.pack msg] + , alertCounter = 0 + , alertBlockDisplay = True + , alertClosable = True + , alertPriority = High + , alertIcon = Just ErrorIcon + , alertCombiner = Just $ dataCombiner $ \_old new -> new + , alertName = Just $ WarningAlert name + , alertButtons = [] + } + +errorAlert :: String -> [AlertButton] -> Alert +errorAlert msg buttons = Alert + { alertClass = Error + , alertHeader = Nothing + , alertMessageRender = renderData + , alertData = [UnTensed $ T.pack msg] + , alertCounter = 0 + , alertBlockDisplay = True + , alertClosable = True + , alertPriority = Pinned + , alertIcon = Just ErrorIcon + , alertCombiner = Nothing + , alertName = Nothing + , alertButtons = buttons + } + +activityAlert :: Maybe TenseText -> [TenseChunk] -> Alert +activityAlert header dat = baseActivityAlert + { alertHeader = header + , alertData = dat + } + +startupScanAlert :: Alert +startupScanAlert = activityAlert Nothing + [Tensed "Performing" "Performed", "startup scan"] + +{- Displayed when a shutdown is occurring, so will be seen after shutdown + - has happened. -} +shutdownAlert :: Alert +shutdownAlert = warningAlert "shutdown" "git-annex has been shut down" + +commitAlert :: Alert +commitAlert = activityAlert Nothing + [Tensed "Committing" "Committed", "changes to git"] + +showRemotes :: [Remote] -> TenseChunk +showRemotes = UnTensed . T.intercalate ", " . map (T.pack . Remote.name) + +syncAlert :: [Remote] -> Alert +syncAlert rs = baseActivityAlert + { alertName = Just SyncAlert + , alertHeader = Just $ tenseWords + [Tensed "Syncing" "Synced", "with", showRemotes rs] + , alertPriority = Low + , alertIcon = Just SyncIcon + } + +syncResultAlert :: [Remote] -> [Remote] -> Alert +syncResultAlert succeeded failed = makeAlertFiller (not $ null succeeded) $ + baseActivityAlert + { alertName = Just SyncAlert + , alertHeader = Just $ tenseWords msg + } + where + msg + | null succeeded = ["Failed to sync with", showRemotes failed] + | null failed = ["Synced with", showRemotes succeeded] + | otherwise = + [ "Synced with", showRemotes succeeded + , "but not with", showRemotes failed + ] + +sanityCheckAlert :: Alert +sanityCheckAlert = activityAlert + (Just $ tenseWords [Tensed "Running" "Ran", "daily sanity check"]) + ["to make sure everything is ok."] + +sanityCheckFixAlert :: String -> Alert +sanityCheckFixAlert msg = Alert + { alertClass = Warning + , alertHeader = Just $ tenseWords ["Fixed a problem"] + , alertMessageRender = render + , alertData = [UnTensed $ T.pack msg] + , alertCounter = 0 + , alertBlockDisplay = True + , alertPriority = High + , alertClosable = True + , alertIcon = Just ErrorIcon + , alertName = Just SanityCheckFixAlert + , alertCombiner = Just $ dataCombiner (++) + , alertButtons = [] + } + where + render alert = tenseWords $ alerthead : alertData alert ++ [alertfoot] + alerthead = "The daily sanity check found and fixed a problem:" + alertfoot = "If these problems persist, consider filing a bug report." + +fsckingAlert :: AlertButton -> Maybe Remote -> Alert +fsckingAlert button mr = baseActivityAlert + { alertData = case mr of + Nothing -> [ UnTensed $ T.pack $ "Consistency check in progress" ] + Just r -> [ UnTensed $ T.pack $ "Consistency check of " ++ Remote.name r ++ " in progress"] + , alertButtons = [button] + } + +showFscking :: UrlRenderer -> Maybe Remote -> IO (Either E.SomeException a) -> Assistant a +showFscking urlrenderer mr a = do +#ifdef WITH_WEBAPP + button <- mkAlertButton False (T.pack "Configure") urlrenderer ConfigFsckR + r <- alertDuring (fsckingAlert button mr) $ + liftIO a +#else + r <- liftIO a +#endif + either (liftIO . E.throwIO) return r + +notFsckedNudge :: UrlRenderer -> Maybe Remote -> Assistant () +#ifdef WITH_WEBAPP +notFsckedNudge urlrenderer mr = do + button <- mkAlertButton True (T.pack "Configure") urlrenderer ConfigFsckR + void $ addAlert (notFsckedAlert mr button) +#else +notFsckedNudge _ _ = noop +#endif + +notFsckedAlert :: Maybe Remote -> AlertButton -> Alert +notFsckedAlert mr button = Alert + { alertHeader = Just $ fromString $ concat + [ "You should enable consistency checking to protect your data" + , maybe "" (\r -> " in " ++ Remote.name r) mr + , "." + ] + , alertIcon = Just InfoIcon + , alertPriority = High + , alertButtons = [button] + , alertClosable = True + , alertClass = Message + , alertMessageRender = renderData + , alertCounter = 0 + , alertBlockDisplay = True + , alertName = Just NotFsckedAlert + , alertCombiner = Just $ dataCombiner $ \_old new -> new + , alertData = [] + } + +baseUpgradeAlert :: [AlertButton] -> TenseText -> Alert +baseUpgradeAlert buttons message = Alert + { alertHeader = Just message + , alertIcon = Just UpgradeIcon + , alertPriority = High + , alertButtons = buttons + , alertClosable = True + , alertClass = Message + , alertMessageRender = renderData + , alertCounter = 0 + , alertBlockDisplay = True + , alertName = Just UpgradeAlert + , alertCombiner = Just $ fullCombiner $ \new _old -> new + , alertData = [] + } + +canUpgradeAlert :: AlertPriority -> GitAnnexVersion -> AlertButton -> Alert +canUpgradeAlert priority version button = + (baseUpgradeAlert [button] $ fromString msg) + { alertPriority = priority + , alertData = [fromString $ " (version " ++ version ++ ")"] + } + where + msg = if priority >= High + then "An important upgrade of git-annex is available!" + else "An upgrade of git-annex is available." + +upgradeReadyAlert :: AlertButton -> Alert +upgradeReadyAlert button = baseUpgradeAlert [button] $ + fromString "A new version of git-annex has been installed." + +upgradingAlert :: Alert +upgradingAlert = activityAlert Nothing [ fromString "Upgrading git-annex" ] + +upgradeFinishedAlert :: Maybe AlertButton -> GitAnnexVersion -> Alert +upgradeFinishedAlert button version = + baseUpgradeAlert (maybe [] (:[]) button) $ fromString $ + "Finished upgrading git-annex to version " ++ version + +upgradeFailedAlert :: String -> Alert +upgradeFailedAlert msg = (errorAlert msg []) + { alertHeader = Just $ fromString "Upgrade failed." } + +brokenRepositoryAlert :: [AlertButton] -> Alert +brokenRepositoryAlert = errorAlert "Serious problems have been detected with your repository. This needs your immediate attention!" + +repairingAlert :: String -> Alert +repairingAlert repodesc = activityAlert Nothing + [ Tensed "Attempting to repair" "Repaired" + , UnTensed $ T.pack repodesc + ] + +pairingAlert :: AlertButton -> Alert +pairingAlert button = baseActivityAlert + { alertData = [ UnTensed "Pairing in progress" ] + , alertPriority = High + , alertButtons = [button] + } + +pairRequestReceivedAlert :: String -> AlertButton -> Alert +pairRequestReceivedAlert who button = Alert + { alertClass = Message + , alertHeader = Nothing + , alertMessageRender = renderData + , alertData = [UnTensed $ T.pack $ who ++ " is sending a pair request."] + , alertCounter = 0 + , alertBlockDisplay = False + , alertPriority = High + , alertClosable = True + , alertIcon = Just InfoIcon + , alertName = Just $ PairAlert who + , alertCombiner = Just $ dataCombiner $ \_old new -> new + , alertButtons = [button] + } + +pairRequestAcknowledgedAlert :: String -> Maybe AlertButton -> Alert +pairRequestAcknowledgedAlert who button = baseActivityAlert + { alertData = ["Pairing with", UnTensed (T.pack who), Tensed "in progress" "complete"] + , alertPriority = High + , alertName = Just $ PairAlert who + , alertCombiner = Just $ dataCombiner $ \_old new -> new + , alertButtons = maybe [] (:[]) button + } + +xmppNeededAlert :: AlertButton -> Alert +xmppNeededAlert button = Alert + { alertHeader = Just "Share with friends, and keep your devices in sync across the cloud." + , alertIcon = Just TheCloud + , alertPriority = High + , alertButtons = [button] + , alertClosable = True + , alertClass = Message + , alertMessageRender = renderData + , alertCounter = 0 + , alertBlockDisplay = True + , alertName = Just $ XMPPNeededAlert + , alertCombiner = Just $ dataCombiner $ \_old new -> new + , alertData = [] + } + +cloudRepoNeededAlert :: Maybe String -> AlertButton -> Alert +cloudRepoNeededAlert friendname button = Alert + { alertHeader = Just $ fromString $ unwords + [ "Unable to download files from" + , (fromMaybe "your other devices" friendname) ++ "." + ] + , alertIcon = Just ErrorIcon + , alertPriority = High + , alertButtons = [button] + , alertClosable = True + , alertClass = Message + , alertMessageRender = renderData + , alertCounter = 0 + , alertBlockDisplay = True + , alertName = Just $ CloudRepoNeededAlert + , alertCombiner = Just $ dataCombiner $ \_old new -> new + , alertData = [] + } + +remoteRemovalAlert :: String -> AlertButton -> Alert +remoteRemovalAlert desc button = Alert + { alertHeader = Just $ fromString $ + "The repository \"" ++ desc ++ + "\" has been emptied, and can now be removed." + , alertIcon = Just InfoIcon + , alertPriority = High + , alertButtons = [button] + , alertClosable = True + , alertClass = Message + , alertMessageRender = renderData + , alertCounter = 0 + , alertBlockDisplay = True + , alertName = Just $ RemoteRemovalAlert desc + , alertCombiner = Just $ dataCombiner $ \_old new -> new + , alertData = [] + } + +{- Show a message that relates to a list of files. + - + - The most recent several files are shown, and a count of any others. -} +fileAlert :: TenseChunk -> [FilePath] -> Alert +fileAlert msg files = (activityAlert Nothing shortfiles) + { alertName = Just $ FileAlert msg + , alertMessageRender = renderer + , alertCounter = counter + , alertCombiner = Just $ fullCombiner combiner + } + where + maxfilesshown = 10 + + (somefiles, counter) = splitcounter (dedupadjacent files) + shortfiles = map (fromString . shortFile . takeFileName) somefiles + + renderer alert = tenseWords $ msg : alertData alert ++ showcounter + where + showcounter = case alertCounter alert of + 0 -> [] + _ -> [fromString $ "and " ++ show (alertCounter alert) ++ " other files"] + + dedupadjacent (x:y:rest) + | x == y = dedupadjacent (y:rest) + | otherwise = x : dedupadjacent (y:rest) + dedupadjacent (x:[]) = [x] + dedupadjacent [] = [] + + {- Note that this ensures the counter is never 1; no need to say + - "1 file" when the filename could be shown. -} + splitcounter l + | length l <= maxfilesshown = (l, 0) + | otherwise = + let (keep, rest) = splitAt (maxfilesshown - 1) l + in (keep, length rest) + + combiner new old = + let (fs, n) = splitcounter $ + dedupadjacent $ alertData new ++ alertData old + cnt = n + alertCounter new + alertCounter old + in old + { alertData = fs + , alertCounter = cnt + } + +addFileAlert :: [FilePath] -> Alert +addFileAlert = fileAlert (Tensed "Adding" "Added") + +{- This is only used as a success alert after a transfer, not during it. -} +transferFileAlert :: Direction -> Bool -> FilePath -> Alert +transferFileAlert direction True file + | direction == Upload = fileAlert "Uploaded" [file] + | otherwise = fileAlert "Downloaded" [file] +transferFileAlert direction False file + | direction == Upload = fileAlert "Upload failed" [file] + | otherwise = fileAlert "Download failed" [file] + +dataCombiner :: ([TenseChunk] -> [TenseChunk] -> [TenseChunk]) -> AlertCombiner +dataCombiner combiner = fullCombiner $ + \new old -> old { alertData = alertData new `combiner` alertData old } + +fullCombiner :: (Alert -> Alert -> Alert) -> AlertCombiner +fullCombiner combiner new old + | alertClass new /= alertClass old = Nothing + | alertName new == alertName old = + Just $! new `combiner` old + | otherwise = Nothing + +shortFile :: FilePath -> String +shortFile f + | len < maxlen = f + | otherwise = take half f ++ ".." ++ drop (len - half) f + where + len = length f + maxlen = 20 + half = (maxlen - 2) `div` 2 + diff --git a/Assistant/Alert/Utility.hs b/Assistant/Alert/Utility.hs new file mode 100644 index 0000000000..db2ea19250 --- /dev/null +++ b/Assistant/Alert/Utility.hs @@ -0,0 +1,130 @@ +{- git-annex assistant alert utilities + - + - Copyright 2012, 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Alert.Utility where + +import Common.Annex +import Assistant.Types.Alert +import Utility.Tense + +import qualified Data.Text as T +import Data.Text (Text) +import qualified Data.Map as M + +{- 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 + - user with a ton of alerts. -} +displayAlerts :: Int +displayAlerts = 6 + +{- This is not a hard maximum, but there's no point in keeping a great + - many filler alerts in an AlertMap, so when there's more than this many, + - they start being pruned, down toward displayAlerts. -} +maxAlerts :: Int +maxAlerts = displayAlerts * 2 + +type AlertPair = (AlertId, Alert) + +{- The desired order is the reverse of: + - + - - Pinned alerts + - - High priority alerts, newest first + - - Medium priority Activity, newest first (mostly used for Activity) + - - Low priority alerts, newest first + - - Filler priorty alerts, newest first + - - Ties are broken by the AlertClass, with Errors etc coming first. + -} +compareAlertPairs :: AlertPair -> AlertPair -> Ordering +compareAlertPairs + (aid, Alert { alertClass = aclass, alertPriority = aprio }) + (bid, Alert { alertClass = bclass, alertPriority = bprio }) + = compare aprio bprio + `thenOrd` compare aid bid + `thenOrd` compare aclass bclass + +sortAlertPairs :: [AlertPair] -> [AlertPair] +sortAlertPairs = sortBy compareAlertPairs + +{- Renders an alert's header for display, if it has one. -} +renderAlertHeader :: Alert -> Maybe Text +renderAlertHeader alert = renderTense (alertTense alert) <$> alertHeader alert + +{- Renders an alert's message for display. -} +renderAlertMessage :: Alert -> Text +renderAlertMessage alert = renderTense (alertTense alert) $ + (alertMessageRender alert) alert + +showAlert :: Alert -> String +showAlert alert = T.unpack $ T.unwords $ catMaybes + [ renderAlertHeader alert + , Just $ renderAlertMessage alert + ] + +alertTense :: Alert -> Tense +alertTense alert + | alertClass alert == Activity = Present + | otherwise = Past + +{- Checks if two alerts display the same. -} +effectivelySameAlert :: Alert -> Alert -> Bool +effectivelySameAlert x y = all id + [ alertClass x == alertClass y + , alertHeader x == alertHeader y + , alertData x == alertData y + , alertBlockDisplay x == alertBlockDisplay y + , alertClosable x == alertClosable y + , alertPriority x == alertPriority y + ] + +makeAlertFiller :: Bool -> Alert -> Alert +makeAlertFiller success alert + | isFiller alert = alert + | otherwise = alert + { alertClass = if c == Activity then c' else c + , alertPriority = Filler + , alertClosable = True + , alertButtons = [] + , alertIcon = Just $ if success then SuccessIcon else ErrorIcon + } + where + c = alertClass alert + c' + | success = Success + | otherwise = Error + +isFiller :: Alert -> Bool +isFiller alert = alertPriority alert == Filler + +{- Updates the Alertmap, adding or updating an alert. + - + - Any old filler that looks the same as the alert is removed. + - + - Or, if the alert has an alertCombiner that combines it with + - an old alert, the old alert is replaced with the result, and the + - alert is removed. + - + - Old filler alerts are pruned once maxAlerts is reached. + -} +mergeAlert :: AlertId -> Alert -> AlertMap -> AlertMap +mergeAlert i al m = maybe updatePrune updateCombine (alertCombiner al) + where + pruneSame k al' = k == i || not (effectivelySameAlert al al') + pruneBloat m' + | bloat > 0 = M.fromList $ pruneold $ M.toList m' + | otherwise = m' + where + bloat = M.size m' - maxAlerts + pruneold 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 + updateCombine combiner = + let combined = M.mapMaybe (combiner al) m + in if M.null combined + then updatePrune + else M.delete i $ M.union combined m diff --git a/Assistant/BranchChange.hs b/Assistant/BranchChange.hs new file mode 100644 index 0000000000..c9354544a5 --- /dev/null +++ b/Assistant/BranchChange.hs @@ -0,0 +1,19 @@ +{- git-annex assistant git-annex branch change tracking + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.BranchChange where + +import Assistant.Common +import Assistant.Types.BranchChange + +import Control.Concurrent.MSampleVar + +branchChanged :: Assistant () +branchChanged = flip writeSV () <<~ (fromBranchChangeHandle . branchChangeHandle) + +waitBranchChange :: Assistant () +waitBranchChange = readSV <<~ (fromBranchChangeHandle . branchChangeHandle) diff --git a/Assistant/Changes.hs b/Assistant/Changes.hs new file mode 100644 index 0000000000..2ecd2036ce --- /dev/null +++ b/Assistant/Changes.hs @@ -0,0 +1,47 @@ +{- git-annex assistant change tracking + - + - Copyright 2012-2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Changes where + +import Assistant.Common +import Assistant.Types.Changes +import Utility.TList + +import Data.Time.Clock +import Control.Concurrent.STM + +{- Handlers call this when they made a change that needs to get committed. -} +madeChange :: FilePath -> ChangeInfo -> Assistant (Maybe Change) +madeChange f t = Just <$> (Change <$> liftIO getCurrentTime <*> pure f <*> pure t) + +noChange :: Assistant (Maybe Change) +noChange = return Nothing + +{- Indicates an add needs to be done, but has not started yet. -} +pendingAddChange :: FilePath -> Assistant (Maybe Change) +pendingAddChange f = Just <$> (PendingAddChange <$> liftIO getCurrentTime <*> pure f) + +{- Gets all unhandled changes. + - Blocks until at least one change is made. -} +getChanges :: Assistant [Change] +getChanges = (atomically . getTList) <<~ changePool + +{- Gets all unhandled changes, without blocking. -} +getAnyChanges :: Assistant [Change] +getAnyChanges = (atomically . takeTList) <<~ changePool + +{- Puts unhandled changes back into the pool. + - Note: Original order is not preserved. -} +refillChanges :: [Change] -> Assistant () +refillChanges cs = (atomically . flip appendTList cs) <<~ changePool + +{- Records a change to the pool. -} +recordChange :: Change -> Assistant () +recordChange c = (atomically . flip snocTList c) <<~ changePool + +recordChanges :: [Change] -> Assistant () +recordChanges = refillChanges diff --git a/Assistant/Commits.hs b/Assistant/Commits.hs new file mode 100644 index 0000000000..7d1d3780fe --- /dev/null +++ b/Assistant/Commits.hs @@ -0,0 +1,23 @@ +{- git-annex assistant commit tracking + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Commits where + +import Assistant.Common +import Assistant.Types.Commits +import Utility.TList + +import Control.Concurrent.STM + +{- Gets all unhandled commits. + - Blocks until at least one commit is made. -} +getCommits :: Assistant [Commit] +getCommits = (atomically . getTList) <<~ commitChan + +{- Records a commit in the channel. -} +recordCommit :: Assistant () +recordCommit = (atomically . flip consTList Commit) <<~ commitChan diff --git a/Assistant/Common.hs b/Assistant/Common.hs new file mode 100644 index 0000000000..f9719422d9 --- /dev/null +++ b/Assistant/Common.hs @@ -0,0 +1,14 @@ +{- Common infrastructure for the git-annex assistant. + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Common (module X) where + +import Common.Annex as X +import Assistant.Monad as X +import Assistant.Types.DaemonStatus as X +import Assistant.Types.NamedThread as X +import Assistant.Types.Alert as X diff --git a/Assistant/DaemonStatus.hs b/Assistant/DaemonStatus.hs new file mode 100644 index 0000000000..7268bbbfb4 --- /dev/null +++ b/Assistant/DaemonStatus.hs @@ -0,0 +1,262 @@ +{- git-annex assistant daemon status + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.DaemonStatus where + +import Assistant.Common +import Assistant.Alert.Utility +import Utility.Tmp +import Assistant.Types.NetMessager +import Utility.NotificationBroadcaster +import Logs.Transfer +import Logs.Trust +import qualified Remote +import qualified Types.Remote as Remote +import qualified Git + +import Control.Concurrent.STM +import System.Posix.Types +import Data.Time.Clock.POSIX +import Data.Time +import System.Locale +import qualified Data.Map as M +import qualified Data.Text as T + +getDaemonStatus :: Assistant DaemonStatus +getDaemonStatus = (atomically . readTMVar) <<~ daemonStatusHandle + +modifyDaemonStatus_ :: (DaemonStatus -> DaemonStatus) -> Assistant () +modifyDaemonStatus_ a = modifyDaemonStatus $ \s -> (a s, ()) + +modifyDaemonStatus :: (DaemonStatus -> (DaemonStatus, b)) -> Assistant b +modifyDaemonStatus a = do + dstatus <- getAssistant daemonStatusHandle + liftIO $ do + (s, b) <- atomically $ do + r@(s, _) <- a <$> takeTMVar dstatus + putTMVar dstatus s + return r + sendNotification $ changeNotifier s + return b + +{- Returns a function that updates the lists of syncable remotes + - and other associated information. -} +calcSyncRemotes :: Annex (DaemonStatus -> DaemonStatus) +calcSyncRemotes = do + rs <- filter (remoteAnnexSync . Remote.gitconfig) . + concat . Remote.byCost <$> Remote.remoteList + alive <- trustExclude DeadTrusted (map Remote.uuid rs) + let good r = Remote.uuid r `elem` alive + let syncable = filter good rs + let syncdata = filter (not . remoteAnnexIgnore . Remote.gitconfig) $ + filter (not . isXMPPRemote) syncable + + return $ \dstatus -> dstatus + { syncRemotes = syncable + , syncGitRemotes = filter Remote.syncableRemote syncable + , syncDataRemotes = syncdata + , syncingToCloudRemote = any iscloud syncdata + } + where + iscloud r = not (Remote.readonly r) && Remote.globallyAvailable r + +{- Updates the syncRemotes list from the list of all remotes in Annex state. -} +updateSyncRemotes :: Assistant () +updateSyncRemotes = do + modifyDaemonStatus_ =<< liftAnnex calcSyncRemotes + status <- getDaemonStatus + liftIO $ sendNotification $ syncRemotesNotifier status + + when (syncingToCloudRemote status) $ + updateAlertMap $ + M.filter $ \alert -> + alertName alert /= Just CloudRepoNeededAlert + +updateScheduleLog :: Assistant () +updateScheduleLog = + liftIO . sendNotification =<< scheduleLogNotifier <$> getDaemonStatus + +{- Load any previous daemon status file, and store it in a MVar for this + - process to use as its DaemonStatus. Also gets current transfer status. -} +startDaemonStatus :: Annex DaemonStatusHandle +startDaemonStatus = do + file <- fromRepo gitAnnexDaemonStatusFile + status <- liftIO $ + flip catchDefaultIO (readDaemonStatusFile file) =<< newDaemonStatus + transfers <- M.fromList <$> getTransfers + addsync <- calcSyncRemotes + liftIO $ atomically $ newTMVar $ addsync $ status + { scanComplete = False + , sanityCheckRunning = False + , currentTransfers = transfers + } + +{- Don't just dump out the structure, because it will change over time, + - and parts of it are not relevant. -} +writeDaemonStatusFile :: FilePath -> DaemonStatus -> IO () +writeDaemonStatusFile file status = + viaTmp writeFile file =<< serialized <$> getPOSIXTime + where + serialized now = unlines + [ "lastRunning:" ++ show now + , "scanComplete:" ++ show (scanComplete status) + , "sanityCheckRunning:" ++ show (sanityCheckRunning status) + , "lastSanityCheck:" ++ maybe "" show (lastSanityCheck status) + ] + +readDaemonStatusFile :: FilePath -> IO DaemonStatus +readDaemonStatusFile file = parse <$> newDaemonStatus <*> readFile file + where + parse status = foldr parseline status . lines + parseline line status + | key == "lastRunning" = parseval readtime $ \v -> + status { lastRunning = Just v } + | key == "scanComplete" = parseval readish $ \v -> + status { scanComplete = v } + | key == "sanityCheckRunning" = parseval readish $ \v -> + status { sanityCheckRunning = v } + | key == "lastSanityCheck" = parseval readtime $ \v -> + status { lastSanityCheck = Just v } + | otherwise = status -- unparsable line + where + (key, value) = separate (== ':') line + parseval parser a = maybe status a (parser value) + readtime s = do + d <- parseTime defaultTimeLocale "%s%Qs" s + Just $ utcTimeToPOSIXSeconds d + +{- Checks if a time stamp was made after the daemon was lastRunning. + - + - Some slop is built in; this really checks if the time stamp was made + - at least ten minutes after the daemon was lastRunning. This is to + - ensure the daemon shut down cleanly, and deal with minor clock skew. + - + - If the daemon has never ran before, this always returns False. + -} +afterLastDaemonRun :: EpochTime -> DaemonStatus -> Bool +afterLastDaemonRun timestamp status = maybe False (< t) (lastRunning status) + where + t = realToFrac (timestamp + slop) :: POSIXTime + slop = fromIntegral tenMinutes + +tenMinutes :: Int +tenMinutes = 10 * 60 + +{- Mutates the transfer map. Runs in STM so that the transfer map can + - be modified in the same transaction that modifies the transfer queue. + - Note that this does not send a notification of the change; that's left + - to the caller. -} +adjustTransfersSTM :: DaemonStatusHandle -> (TransferMap -> TransferMap) -> STM () +adjustTransfersSTM dstatus a = do + s <- takeTMVar dstatus + putTMVar dstatus $ s { currentTransfers = a (currentTransfers s) } + +{- Checks if a transfer is currently running. -} +checkRunningTransferSTM :: DaemonStatusHandle -> Transfer -> STM Bool +checkRunningTransferSTM dstatus t = M.member t . currentTransfers + <$> readTMVar dstatus + +{- Alters a transfer's info, if the transfer is in the map. -} +alterTransferInfo :: Transfer -> (TransferInfo -> TransferInfo) -> Assistant () +alterTransferInfo t a = updateTransferInfo' $ M.adjust a t + +{- Updates a transfer's info. Adds the transfer to the map if necessary, + - or if already present, updates it while preserving the old transferTid, + - transferPaused, and bytesComplete values, which are not written to disk. -} +updateTransferInfo :: Transfer -> TransferInfo -> Assistant () +updateTransferInfo t info = updateTransferInfo' $ M.insertWith' merge t info + where + merge new old = new + { transferTid = maybe (transferTid new) Just (transferTid old) + , transferPaused = transferPaused new || transferPaused old + , bytesComplete = maybe (bytesComplete new) Just (bytesComplete old) + } + +updateTransferInfo' :: (TransferMap -> TransferMap) -> Assistant () +updateTransferInfo' a = notifyTransfer `after` modifyDaemonStatus_ update + where + update s = s { currentTransfers = a (currentTransfers s) } + +{- Removes a transfer from the map, and returns its info. -} +removeTransfer :: Transfer -> Assistant (Maybe TransferInfo) +removeTransfer t = notifyTransfer `after` modifyDaemonStatus remove + where + remove s = + let (info, ts) = M.updateLookupWithKey + (\_k _v -> Nothing) + t (currentTransfers s) + in (s { currentTransfers = ts }, info) + +{- Send a notification when a transfer is changed. -} +notifyTransfer :: Assistant () +notifyTransfer = do + dstatus <- getAssistant daemonStatusHandle + liftIO $ sendNotification + =<< transferNotifier <$> atomically (readTMVar dstatus) + +{- Send a notification when alerts are changed. -} +notifyAlert :: Assistant () +notifyAlert = do + dstatus <- getAssistant daemonStatusHandle + liftIO $ sendNotification + =<< alertNotifier <$> atomically (readTMVar dstatus) + +{- Returns the alert's identifier, which can be used to remove it. -} +addAlert :: Alert -> Assistant AlertId +addAlert alert = do + notice [showAlert alert] + notifyAlert `after` modifyDaemonStatus add + where + add s = (s { lastAlertId = i, alertMap = m }, i) + where + i = nextAlertId $ lastAlertId s + m = mergeAlert i alert (alertMap s) + +removeAlert :: AlertId -> Assistant () +removeAlert i = updateAlert i (const Nothing) + +updateAlert :: AlertId -> (Alert -> Maybe Alert) -> Assistant () +updateAlert i a = updateAlertMap $ \m -> M.update a i m + +updateAlertMap :: (AlertMap -> AlertMap) -> Assistant () +updateAlertMap a = notifyAlert `after` modifyDaemonStatus_ update + where + update s = s { alertMap = a (alertMap s) } + +{- Displays an alert while performing an activity that returns True on + - success. + - + - The alert is left visible afterwards, as filler. + - Old filler is pruned, to prevent the map growing too large. -} +alertWhile :: Alert -> Assistant Bool -> Assistant Bool +alertWhile alert a = alertWhile' alert $ do + r <- a + return (r, r) + +{- Like alertWhile, but allows the activity to return a value too. -} +alertWhile' :: Alert -> Assistant (Bool, a) -> Assistant a +alertWhile' alert a = do + let alert' = alert { alertClass = Activity } + i <- addAlert alert' + (ok, r) <- a + updateAlertMap $ mergeAlert i $ makeAlertFiller ok alert' + return r + +{- Displays an alert while performing an activity, then removes it. -} +alertDuring :: Alert -> Assistant a -> Assistant a +alertDuring alert a = do + i <- addAlert $ alert { alertClass = Activity } + removeAlert i `after` a + +{- Remotes using the XMPP transport have urls like xmpp::user@host -} +isXMPPRemote :: Remote -> Bool +isXMPPRemote remote = Git.repoIsUrl r && "xmpp::" `isPrefixOf` Git.repoLocation r + where + r = Remote.repo remote + +getXMPPClientID :: Remote -> ClientID +getXMPPClientID r = T.pack $ drop (length "xmpp::") (Git.repoLocation (Remote.repo r)) diff --git a/Assistant/DeleteRemote.hs b/Assistant/DeleteRemote.hs new file mode 100644 index 0000000000..cc05786e40 --- /dev/null +++ b/Assistant/DeleteRemote.hs @@ -0,0 +1,89 @@ +{- git-annex assistant remote deletion utilities + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Assistant.DeleteRemote where + +import Assistant.Common +import Assistant.Types.UrlRenderer +import Assistant.TransferQueue +import Logs.Transfer +import Logs.Location +import Assistant.DaemonStatus +import qualified Remote +import Remote.List +import qualified Git.Remote +import Logs.Trust +import qualified Annex + +#ifdef WITH_WEBAPP +import Assistant.WebApp.Types +import Assistant.Alert +import qualified Data.Text as T +#endif + +{- Removes a remote (but leave the repository as-is), and returns the old + - Remote data. -} +disableRemote :: UUID -> Assistant Remote +disableRemote uuid = do + remote <- fromMaybe (error "unknown remote") + <$> liftAnnex (Remote.remoteFromUUID uuid) + liftAnnex $ do + inRepo $ Git.Remote.remove (Remote.name remote) + void $ remoteListRefresh + updateSyncRemotes + return remote + +{- Removes a remote, marking it dead .-} +removeRemote :: UUID -> Assistant Remote +removeRemote uuid = do + liftAnnex $ trustSet uuid DeadTrusted + disableRemote uuid + +{- Called when a Remote is probably empty, to remove it. + - + - This does one last check for any objects remaining in the Remote, + - and if there are any, queues Downloads of them, and defers removing + - the remote for later. This is to catch any objects not referred to + - in keys in the current branch. + -} +removableRemote :: UrlRenderer -> UUID -> Assistant () +removableRemote urlrenderer uuid = do + keys <- getkeys + if null keys + then finishRemovingRemote urlrenderer uuid + else do + r <- fromMaybe (error "unknown remote") + <$> liftAnnex (Remote.remoteFromUUID uuid) + mapM_ (queueremaining r) keys + where + 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 + - the Annex monad while doing it, so other threads continue to + - run. -} + getkeys = do + a <- liftAnnex $ Annex.withCurrentState $ loggedKeysFor uuid + liftIO a + +{- With the webapp, this asks the user to click on a button to finish + - removing the remote. + - + - Without the webapp, just do the removal now. + -} +finishRemovingRemote :: UrlRenderer -> UUID -> Assistant () +#ifdef WITH_WEBAPP +finishRemovingRemote urlrenderer uuid = do + desc <- liftAnnex $ Remote.prettyUUID uuid + button <- mkAlertButton True (T.pack "Finish deletion process") urlrenderer $ + FinishDeleteRepositoryR uuid + void $ addAlert $ remoteRemovalAlert desc button +#else +finishRemovingRemote _ uuid = void $ removeRemote uuid +#endif diff --git a/Assistant/Drop.hs b/Assistant/Drop.hs new file mode 100644 index 0000000000..d677a69c8b --- /dev/null +++ b/Assistant/Drop.hs @@ -0,0 +1,112 @@ +{- git-annex assistant dropping of unwanted content + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Drop where + +import Assistant.Common +import Assistant.DaemonStatus +import Logs.Location +import Logs.Trust +import Types.Remote (uuid) +import qualified Remote +import qualified Command.Drop +import Command +import Annex.Wanted +import Annex.Exception +import Config +import Annex.Content.Direct + +import qualified Data.Set as S + +type Reason = String + +{- Drop from local and/or remote when allowed by the preferred content and + - numcopies settings. -} +handleDrops :: Reason -> Bool -> Key -> AssociatedFile -> Maybe Remote -> Assistant () +handleDrops _ _ _ Nothing _ = noop +handleDrops reason fromhere key f knownpresentremote = do + syncrs <- syncDataRemotes <$> getDaemonStatus + locs <- liftAnnex $ loggedLocations key + handleDropsFrom locs syncrs reason fromhere key f knownpresentremote + +{- The UUIDs are ones where the content is believed to be present. + - The Remote list can include other remotes that do not have the content; + - only ones that match the UUIDs will be dropped from. + - If allowed to drop fromhere, that drop will be tried first. + - + - In direct mode, all associated files are checked, and only if all + - of them are unwanted are they dropped. + -} +handleDropsFrom :: [UUID] -> [Remote] -> Reason -> Bool -> Key -> AssociatedFile -> Maybe Remote -> Assistant () +handleDropsFrom _ _ _ _ _ Nothing _ = noop +handleDropsFrom locs rs reason fromhere key (Just afile) knownpresentremote = do + fs <- liftAnnex $ ifM isDirect + ( do + l <- associatedFilesRelative key + if null l + then return [afile] + else return l + , return [afile] + ) + n <- getcopies fs + if fromhere && checkcopies n Nothing + then go fs rs =<< dropl fs n + else go fs rs n + where + getcopies fs = liftAnnex $ do + (untrusted, have) <- trustPartition UnTrusted locs + numcopies <- maximum <$> mapM (getNumCopies <=< numCopies) fs + return (length have, numcopies, S.fromList untrusted) + + {- Check that we have enough copies still to drop the content. + - When the remote being dropped from is untrusted, it was not + - counted as a copy, so having only numcopies suffices. Otherwise, + - we need more than numcopies to safely drop. -} + checkcopies (have, numcopies, _untrusted) Nothing = have > numcopies + checkcopies (have, numcopies, untrusted) (Just u) + | S.member u untrusted = have >= numcopies + | otherwise = have > numcopies + + decrcopies (have, numcopies, untrusted) Nothing = + (have - 1, numcopies, untrusted) + decrcopies v@(_have, _numcopies, untrusted) (Just u) + | S.member u untrusted = v + | otherwise = decrcopies v Nothing + + go _ [] _ = noop + go fs (r:rest) n + | uuid r `S.notMember` slocs = go fs rest n + | checkcopies n (Just $ Remote.uuid r) = + dropr fs r n >>= go fs rest + | otherwise = noop + + checkdrop fs n@(have, numcopies, _untrusted) u a = + ifM (liftAnnex $ allM (wantDrop True u . Just) fs) + ( ifM (liftAnnex $ safely $ doCommand $ a (Just numcopies)) + ( do + debug + [ "dropped" + , afile + , "(from " ++ maybe "here" show u ++ ")" + , "(copies now " ++ show (have - 1) ++ ")" + , ": " ++ reason + ] + return $ decrcopies n u + , return n + ) + , return n + ) + + dropl fs n = checkdrop fs n Nothing $ \numcopies -> + Command.Drop.startLocal afile numcopies key knownpresentremote + + dropr fs r n = checkdrop fs n (Just $ Remote.uuid r) $ \numcopies -> + Command.Drop.startRemote afile numcopies key r + + safely a = either (const False) id <$> tryAnnex a + + slocs = S.fromList locs diff --git a/Assistant/Fsck.hs b/Assistant/Fsck.hs new file mode 100644 index 0000000000..791c0cf170 --- /dev/null +++ b/Assistant/Fsck.hs @@ -0,0 +1,50 @@ +{- git-annex assistant fscking + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Fsck where + +import Assistant.Common +import Types.ScheduledActivity +import qualified Types.Remote as Remote +import Annex.UUID +import Assistant.Alert +import Assistant.Types.UrlRenderer +import Logs.Schedule +import qualified Annex + +import qualified Data.Set as S + +{- Displays a nudge in the webapp if a fsck is not configured for + - the specified remote, or for the local repository. -} +fsckNudge :: UrlRenderer -> Maybe Remote -> Assistant () +fsckNudge urlrenderer mr + | maybe True fsckableRemote mr = + whenM (liftAnnex $ annexFsckNudge <$> Annex.getGitConfig) $ + unlessM (liftAnnex $ checkFscked mr) $ + notFsckedNudge urlrenderer mr + | otherwise = noop + +fsckableRemote :: Remote -> Bool +fsckableRemote = isJust . Remote.remoteFsck + +{- Checks if the remote, or the local repository, has a fsck scheduled. + - Only looks at fscks configured to run via the local repository, not + - other repositories. -} +checkFscked :: Maybe Remote -> Annex Bool +checkFscked mr = any wanted . S.toList <$> (scheduleGet =<< getUUID) + where + wanted = case mr of + Nothing -> isSelfFsck + Just r -> flip isFsckOf (Remote.uuid r) + +isSelfFsck :: ScheduledActivity -> Bool +isSelfFsck (ScheduledSelfFsck _ _) = True +isSelfFsck _ = False + +isFsckOf :: ScheduledActivity -> UUID -> Bool +isFsckOf (ScheduledRemoteFsck u _ _) u' = u == u' +isFsckOf _ _ = False diff --git a/Assistant/Gpg.hs b/Assistant/Gpg.hs new file mode 100644 index 0000000000..a55a0cab73 --- /dev/null +++ b/Assistant/Gpg.hs @@ -0,0 +1,36 @@ +{- git-annex assistant gpg stuff + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE QuasiQuotes, TemplateHaskell, OverloadedStrings #-} + +module Assistant.Gpg where + +import Utility.Gpg +import Utility.UserInfo +import Types.Remote (RemoteConfigKey) + +import qualified Data.Map as M + +{- Generates a gpg user id that is not used by any existing secret key -} +newUserId :: IO UserId +newUserId = do + oldkeys <- secretKeys + username <- myUserName + let basekeyname = username ++ "'s git-annex encryption key" + return $ Prelude.head $ filter (\n -> M.null $ M.filter (== n) oldkeys) + ( basekeyname + : map (\n -> basekeyname ++ show n) ([2..] :: [Int]) + ) + +data EnableEncryption = HybridEncryption | SharedEncryption | NoEncryption + deriving (Eq) + +{- Generates Remote configuration for encryption. -} +configureEncryption :: EnableEncryption -> (RemoteConfigKey, String) +configureEncryption SharedEncryption = ("encryption", "shared") +configureEncryption NoEncryption = ("encryption", "none") +configureEncryption HybridEncryption = ("encryption", "hybrid") diff --git a/Assistant/Install.hs b/Assistant/Install.hs new file mode 100644 index 0000000000..dee1b5be37 --- /dev/null +++ b/Assistant/Install.hs @@ -0,0 +1,101 @@ +{- Assistant installation + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Assistant.Install where + +import Assistant.Common +import Assistant.Install.AutoStart +import Assistant.Install.Menu +import Assistant.Ssh +import Config.Files +import Utility.FileMode +import Utility.Shell +import Utility.Tmp +import Utility.Env + +#ifdef darwin_HOST_OS +import Utility.OSX +#else +import Utility.FreeDesktop +#endif + +standaloneAppBase :: IO (Maybe FilePath) +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 + - + - 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. + -} +ensureInstalled :: IO () +ensureInstalled = go =<< standaloneAppBase + where + go Nothing = noop + go (Just base) = do + let program = base "git-annex" + programfile <- programFile + createDirectoryIfMissing True (parentDir programfile) + writeFile programfile program + +#ifdef darwin_HOST_OS + autostartfile <- userAutoStart osxAutoStartLabel +#else + menufile <- desktopMenuFilePath "git-annex" <$> userDataDir + icondir <- iconDir <$> userDataDir + installMenu program menufile base icondir + autostartfile <- autoStartPath "git-annex" <$> userConfigDir +#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 + [ shebang_local + , "set -e" + , "if [ \"x$SSH_ORIGINAL_COMMAND\" != \"x\" ]; then" + , runshell "$SSH_ORIGINAL_COMMAND" + , "else" + , runshell "$@" + , "fi" + ] + + curr <- catchDefaultIO "" $ readFileStrict shim + when (curr /= content) $ do + createDirectoryIfMissing True (parentDir shim) + viaTmp writeFile shim content + modifyFileMode shim $ addModes [ownerExecuteMode] + +{- Returns a cleaned up environment that lacks settings used to make the + - standalone builds use their bundled libraries and programs. + - Useful when calling programs not included in the standalone builds. + - + - For a non-standalone build, returns Nothing. + -} +cleanEnvironment :: IO (Maybe [(String, String)]) +cleanEnvironment = clean <$> getEnvironment + where + clean env + | null vars = Nothing + | otherwise = Just $ catMaybes $ map (restoreorig env) env + | 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 + Nothing -> Nothing + (Just v') -> Just (k, v') + | otherwise = Just p diff --git a/Assistant/Install/AutoStart.hs b/Assistant/Install/AutoStart.hs new file mode 100644 index 0000000000..b03d202244 --- /dev/null +++ b/Assistant/Install/AutoStart.hs @@ -0,0 +1,39 @@ +{- Assistant autostart file installation + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Assistant.Install.AutoStart where + +import Utility.FreeDesktop +#ifdef darwin_HOST_OS +import Utility.OSX +import Utility.Path +import System.Directory +#endif + +installAutoStart :: FilePath -> FilePath -> IO () +installAutoStart command file = do +#ifdef darwin_HOST_OS + createDirectoryIfMissing True (parentDir file) + writeFile file $ genOSXAutoStartFile osxAutoStartLabel command + ["assistant", "--autostart"] +#else + writeDesktopMenuFile (fdoAutostart command) file +#endif + +osxAutoStartLabel :: String +osxAutoStartLabel = "com.branchable.git-annex.assistant" + +fdoAutostart :: FilePath -> DesktopEntry +fdoAutostart command = genDesktopEntry + "Git Annex Assistant" + "Autostart" + False + (command ++ " assistant --autostart") + Nothing + [] diff --git a/Assistant/Install/Menu.hs b/Assistant/Install/Menu.hs new file mode 100644 index 0000000000..41ec855b69 --- /dev/null +++ b/Assistant/Install/Menu.hs @@ -0,0 +1,47 @@ +{- Assistant menu installation. + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Assistant.Install.Menu where + +import Common + +import Utility.FreeDesktop + +installMenu :: FilePath -> FilePath -> FilePath -> FilePath -> IO () +installMenu command menufile iconsrcdir icondir = do +#ifdef darwin_HOST_OS + return () +#else + writeDesktopMenuFile (fdoDesktopMenu command) menufile + installIcon (iconsrcdir "logo.svg") $ + iconFilePath (iconBaseName ++ ".svg") "scalable" icondir + installIcon (iconsrcdir "favicon.png") $ + iconFilePath (iconBaseName ++ ".png") "16x16" icondir +#endif + +{- The command can be either just "git-annex", or the full path to use + - to run it. -} +fdoDesktopMenu :: FilePath -> DesktopEntry +fdoDesktopMenu command = genDesktopEntry + "Git Annex" + "Track and sync the files in your Git Annex" + False + (command ++ " webapp") + (Just iconBaseName) + ["Network", "FileTransfer"] + +installIcon :: FilePath -> FilePath -> IO () +installIcon src dest = do + createDirectoryIfMissing True (parentDir dest) + withBinaryFile src ReadMode $ \hin -> + withBinaryFile dest WriteMode $ \hout -> + hGetContents hin >>= hPutStr hout + +iconBaseName :: String +iconBaseName = "git-annex" diff --git a/Assistant/MakeRemote.hs b/Assistant/MakeRemote.hs new file mode 100644 index 0000000000..bf316e49d6 --- /dev/null +++ b/Assistant/MakeRemote.hs @@ -0,0 +1,165 @@ +{- git-annex assistant remote creation utilities + - + - Copyright 2012, 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.MakeRemote where + +import Assistant.Common +import Assistant.Ssh +import qualified Types.Remote as R +import qualified Remote +import Remote.List +import qualified Remote.Rsync as Rsync +import qualified Remote.GCrypt as GCrypt +import qualified Git +import qualified Git.Command +import qualified Command.InitRemote +import Logs.UUID +import Logs.Remote +import Git.Remote +import Git.Types (RemoteName) +import Creds +import Assistant.Gpg +import Utility.Gpg (KeyId) + +import qualified Data.Map as M + +{- Sets up a new git or rsync remote, accessed over ssh. -} +makeSshRemote :: SshData -> Annex RemoteName +makeSshRemote sshdata = maker (sshRepoName sshdata) (genSshUrl sshdata) + where + maker + | onlyCapability sshdata RsyncCapable = makeRsyncRemote + | otherwise = makeGitRemote + +{- Runs an action that returns a name of the remote, and finishes adding it. -} +addRemote :: Annex RemoteName -> Annex Remote +addRemote a = do + name <- a + void remoteListRefresh + maybe (error "failed to add remote") return + =<< Remote.byName (Just name) + +{- Inits a rsync special remote, and returns its name. -} +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, Command.InitRemote.newConfig name) + go (Just (u, c)) = setupSpecialRemote name Rsync.remote config (Just u, c) + config = M.fromList + [ ("encryption", "shared") + , ("rsyncurl", location) + , ("type", "rsync") + ] + +{- Inits a gcrypt special remote, and returns its name. -} +makeGCryptRemote :: RemoteName -> String -> KeyId -> Annex RemoteName +makeGCryptRemote remotename location keyid = + initSpecialRemote remotename GCrypt.remote $ M.fromList + [ ("type", "gcrypt") + , ("gitrepo", location) + , configureEncryption HybridEncryption + , ("keyid", keyid) + ] + +type SpecialRemoteMaker = RemoteName -> RemoteType -> R.RemoteConfig -> Annex RemoteName + +{- Inits a new special remote. The name is used as a suggestion, but + - will be changed if there is already a special remote with that name. -} +initSpecialRemote :: SpecialRemoteMaker +initSpecialRemote name remotetype config = go 0 + where + go :: Int -> Annex RemoteName + go n = do + let fullname = if n == 0 then name else name ++ show n + r <- Command.InitRemote.findExisting fullname + case r of + Nothing -> setupSpecialRemote fullname remotetype config + (Nothing, Command.InitRemote.newConfig fullname) + Just _ -> go (n + 1) + +{- Enables an existing special remote. -} +enableSpecialRemote :: SpecialRemoteMaker +enableSpecialRemote name remotetype 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 (Just u, c) + +setupSpecialRemote :: RemoteName -> RemoteType -> R.RemoteConfig -> (Maybe UUID, R.RemoteConfig) -> Annex RemoteName +setupSpecialRemote name remotetype config (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 $ + M.insert "highRandomQuality" "false" $ M.union config c + describeUUID u name + configSet u c' + return name + +{- Returns the name of the git remote it created. If there's already a + - remote at the location, returns its name. -} +makeGitRemote :: String -> String -> Annex RemoteName +makeGitRemote basename location = makeRemote basename location $ \name -> + void $ inRepo $ Git.Command.runBool + [Param "remote", Param "add", Param name, Param location] + +{- If there's not already a remote at the location, adds it using the + - action, which is passed the name of the remote to make. + - + - Returns the name of the remote. -} +makeRemote :: String -> String -> (RemoteName -> Annex ()) -> Annex RemoteName +makeRemote basename location a = do + g <- gitRepo + if not (any samelocation $ Git.remotes g) + then do + let name = uniqueRemoteName basename 0 g + a name + return name + else return basename + where + samelocation x = Git.repoLocation x == location + +{- Generate an unused name for a remote, adding a number if + - necessary. + - + - Ensures that the returned name is a legal git remote name. -} +uniqueRemoteName :: String -> Int -> Git.Repo -> RemoteName +uniqueRemoteName basename n r + | null namecollision = name + | otherwise = uniqueRemoteName legalbasename (succ n) r + where + namecollision = filter samename (Git.remotes r) + samename x = Git.remoteName x == Just name + name + | n == 0 = legalbasename + | otherwise = legalbasename ++ show n + legalbasename = makeLegalName basename + +{- Finds a CredPair belonging to any Remote that is of a given type + - and matches some other criteria. + - + - This can be used as a default when another repository is being set up + - using the same service. + - + - A function must be provided that returns the CredPairStorage + - to use for a particular Remote's uuid. + -} +previouslyUsedCredPair + :: (UUID -> CredPairStorage) + -> RemoteType + -> (Remote -> Bool) + -> Annex (Maybe CredPair) +previouslyUsedCredPair getstorage remotetype criteria = + getM fromstorage =<< filter criteria . filter sametype <$> remoteList + where + sametype r = R.typename (R.remotetype r) == R.typename remotetype + fromstorage r = do + let storage = getstorage (R.uuid r) + getRemoteCredPair (R.config r) storage diff --git a/Assistant/Monad.hs b/Assistant/Monad.hs new file mode 100644 index 0000000000..6b843ea88f --- /dev/null +++ b/Assistant/Monad.hs @@ -0,0 +1,144 @@ +{- git-annex assistant monad + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE GeneralizedNewtypeDeriving, MultiParamTypeClasses #-} + +module Assistant.Monad ( + Assistant, + AssistantData(..), + newAssistantData, + runAssistant, + getAssistant, + LiftAnnex, + liftAnnex, + (<~>), + (<<~), + asIO, + asIO1, + asIO2, + ThreadName, + debug, + notice +) where + +import "mtl" Control.Monad.Reader +import System.Log.Logger + +import Common.Annex +import Assistant.Types.ThreadedMonad +import Assistant.Types.DaemonStatus +import Assistant.Types.ScanRemotes +import Assistant.Types.TransferQueue +import Assistant.Types.TransferSlots +import Assistant.Types.TransferrerPool +import Assistant.Types.Pushes +import Assistant.Types.BranchChange +import Assistant.Types.Commits +import Assistant.Types.Changes +import Assistant.Types.RepoProblem +import Assistant.Types.Buddies +import Assistant.Types.NetMessager +import Assistant.Types.ThreadName + +newtype Assistant a = Assistant { mkAssistant :: ReaderT AssistantData IO a } + deriving ( + Monad, + MonadIO, + MonadReader AssistantData, + Functor, + Applicative + ) + +data AssistantData = AssistantData + { threadName :: ThreadName + , threadState :: ThreadState + , daemonStatusHandle :: DaemonStatusHandle + , scanRemoteMap :: ScanRemoteMap + , transferQueue :: TransferQueue + , transferSlots :: TransferSlots + , transferrerPool :: TransferrerPool + , failedPushMap :: FailedPushMap + , commitChan :: CommitChan + , changePool :: ChangePool + , repoProblemChan :: RepoProblemChan + , branchChangeHandle :: BranchChangeHandle + , buddyList :: BuddyList + , netMessager :: NetMessager + } + +newAssistantData :: ThreadState -> DaemonStatusHandle -> IO AssistantData +newAssistantData st dstatus = AssistantData + <$> pure (ThreadName "main") + <*> pure st + <*> pure dstatus + <*> newScanRemoteMap + <*> newTransferQueue + <*> newTransferSlots + <*> newTransferrerPool + <*> newFailedPushMap + <*> newCommitChan + <*> newChangePool + <*> newRepoProblemChan + <*> newBranchChangeHandle + <*> newBuddyList + <*> newNetMessager + +runAssistant :: AssistantData -> Assistant a -> IO a +runAssistant d a = runReaderT (mkAssistant a) d + +getAssistant :: (AssistantData -> a) -> Assistant a +getAssistant = reader + +{- Using a type class for lifting into the annex monad allows + - easily lifting to it from multiple different monads. -} +class LiftAnnex m where + liftAnnex :: Annex a -> m a + +{- Runs an action in the git-annex monad. Note that the same monad state + - is shared amoung all assistant threads, so only one of these can run at + - a time. Therefore, long-duration actions should be avoided. -} +instance LiftAnnex Assistant where + liftAnnex a = do + st <- reader threadState + liftIO $ runThreadState st a + +{- Runs an IO action, passing it an IO action that runs an Assistant action. -} +(<~>) :: (IO a -> IO b) -> Assistant a -> Assistant b +io <~> a = do + d <- reader id + liftIO $ io $ runAssistant d a + +{- Creates an IO action that will run an Assistant action when run. -} +asIO :: Assistant a -> Assistant (IO a) +asIO a = do + d <- reader id + return $ runAssistant d a + +asIO1 :: (a -> Assistant b) -> Assistant (a -> IO b) +asIO1 a = do + d <- reader id + return $ \v -> runAssistant d $ a v + +asIO2 :: (a -> b -> Assistant c) -> Assistant (a -> b -> IO c) +asIO2 a = do + d <- reader id + return $ \v1 v2 -> runAssistant d (a v1 v2) + +{- Runs an IO action on a selected field of the AssistantData. -} +(<<~) :: (a -> IO b) -> (AssistantData -> a) -> Assistant b +io <<~ v = reader v >>= liftIO . io + +debug :: [String] -> Assistant () +debug = logaction debugM + +notice :: [String] -> Assistant () +notice = logaction noticeM + +logaction :: (String -> String -> IO ()) -> [String] -> Assistant () +logaction a ws = do + ThreadName name <- getAssistant threadName + liftIO $ a name $ unwords $ (name ++ ":") : ws diff --git a/Assistant/NamedThread.hs b/Assistant/NamedThread.hs new file mode 100644 index 0000000000..e1b3983f76 --- /dev/null +++ b/Assistant/NamedThread.hs @@ -0,0 +1,102 @@ +{- git-annex assistant named threads. + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Assistant.NamedThread where + +import Common.Annex +import Assistant.Types.NamedThread +import Assistant.Types.ThreadName +import Assistant.Types.DaemonStatus +import Assistant.Types.UrlRenderer +import Assistant.DaemonStatus +import Assistant.Monad +import Utility.NotificationBroadcaster + +import Control.Concurrent +import Control.Concurrent.Async +import qualified Data.Map as M +import qualified Control.Exception as E + +#ifdef WITH_WEBAPP +import Assistant.WebApp.Types +import Assistant.Types.Alert +import Assistant.Alert +import qualified Data.Text as T +#endif + +{- Starts a named thread, if it's not already running. + - + - Named threads are run by a management thread, so if they crash + - an alert is displayed, allowing the thread to be restarted. -} +startNamedThread :: UrlRenderer -> NamedThread -> Assistant () +startNamedThread urlrenderer (NamedThread afterstartupsanitycheck name a) = do + m <- startedThreads <$> getDaemonStatus + case M.lookup name m of + Nothing -> start + Just (aid, _) -> do + r <- liftIO (E.try (poll aid) :: IO (Either E.SomeException (Maybe (Either E.SomeException ())))) + case r of + Right Nothing -> noop + _ -> start + where + start + | afterstartupsanitycheck = do + status <- getDaemonStatus + h <- liftIO $ newNotificationHandle False $ + startupSanityCheckNotifier status + startwith $ runmanaged $ + liftIO $ waitNotification h + | otherwise = startwith $ runmanaged noop + startwith runner = do + d <- getAssistant id + aid <- liftIO $ runner $ d { threadName = name } + restart <- asIO $ startNamedThread urlrenderer (NamedThread False name a) + modifyDaemonStatus_ $ \s -> s + { startedThreads = M.insertWith' const name (aid, restart) (startedThreads s) } + runmanaged first d = do + aid <- async $ runAssistant d $ do + void first + a + void $ forkIO $ manager d aid + return aid + manager d aid = do + r <- E.try (wait aid) :: IO (Either E.SomeException ()) + case r of + Right _ -> noop + Left e -> do + let msg = unwords + [ fromThreadName $ threadName d + , "crashed:", show e + ] + hPutStrLn stderr msg +#ifdef WITH_WEBAPP + button <- runAssistant d $ mkAlertButton True + (T.pack "Restart Thread") + urlrenderer + (RestartThreadR name) + runAssistant d $ void $ addAlert $ + (warningAlert (fromThreadName name) msg) + { alertButtons = [button] } +#endif + +namedThreadId :: NamedThread -> Assistant (Maybe ThreadId) +namedThreadId (NamedThread _ name _) = do + m <- startedThreads <$> getDaemonStatus + return $ asyncThreadId . fst <$> M.lookup name m + +{- Waits for all named threads that have been started to finish. + - + - Note that if a named thread crashes, it will probably + - cause this to crash as well. Also, named threads that are started + - after this is called will not be waited on. -} +waitNamedThreads :: Assistant () +waitNamedThreads = do + m <- startedThreads <$> getDaemonStatus + liftIO $ mapM_ (wait . fst) $ M.elems m + diff --git a/Assistant/NetMessager.hs b/Assistant/NetMessager.hs new file mode 100644 index 0000000000..acb18b6484 --- /dev/null +++ b/Assistant/NetMessager.hs @@ -0,0 +1,180 @@ +{- git-annex assistant out of band network messager interface + - + - Copyright 2012-2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE BangPatterns #-} + +module Assistant.NetMessager where + +import Assistant.Common +import Assistant.Types.NetMessager + +import Control.Concurrent.STM +import Control.Concurrent.MSampleVar +import qualified Data.Set as S +import qualified Data.Map as M +import qualified Data.DList as D + +sendNetMessage :: NetMessage -> Assistant () +sendNetMessage m = + (atomically . flip writeTChan m) <<~ (netMessages . netMessager) + +waitNetMessage :: Assistant (NetMessage) +waitNetMessage = (atomically . readTChan) <<~ (netMessages . netMessager) + +notifyNetMessagerRestart :: Assistant () +notifyNetMessagerRestart = + flip writeSV () <<~ (netMessagerRestart . netMessager) + +{- This can be used to get an early indication if the network has + - changed, to immediately restart a connection. However, that is not + - available on all systems, so clients also need to deal with + - restarting dropped connections in the usual way. -} +waitNetMessagerRestart :: Assistant () +waitNetMessagerRestart = readSV <<~ (netMessagerRestart . netMessager) + +{- Store a new important NetMessage for a client, and if an equivilant + - older message is already stored, remove it from both importantNetMessages + - and sentImportantNetMessages. -} +storeImportantNetMessage :: NetMessage -> ClientID -> (ClientID -> Bool) -> Assistant () +storeImportantNetMessage m client matchingclient = go <<~ netMessager + where + go nm = atomically $ do + q <- takeTMVar $ importantNetMessages nm + sent <- takeTMVar $ sentImportantNetMessages nm + putTMVar (importantNetMessages nm) $ + M.alter (Just . maybe (S.singleton m) (S.insert m)) client $ + M.mapWithKey removematching q + putTMVar (sentImportantNetMessages nm) $ + M.mapWithKey removematching sent + removematching someclient s + | matchingclient someclient = S.filter (not . equivilantImportantNetMessages m) s + | otherwise = s + +{- Indicates that an important NetMessage has been sent to a client. -} +sentImportantNetMessage :: NetMessage -> ClientID -> Assistant () +sentImportantNetMessage m client = go <<~ (sentImportantNetMessages . netMessager) + where + go v = atomically $ do + sent <- takeTMVar v + putTMVar v $ + M.alter (Just . maybe (S.singleton m) (S.insert m)) client sent + +{- Checks for important NetMessages that have been stored for a client, and + - sent to a client. Typically the same client for both, although + - a modified or more specific client may need to be used. -} +checkImportantNetMessages :: (ClientID, ClientID) -> Assistant (S.Set NetMessage, S.Set NetMessage) +checkImportantNetMessages (storedclient, sentclient) = go <<~ netMessager + where + go nm = atomically $ do + stored <- M.lookup storedclient <$> (readTMVar $ importantNetMessages nm) + sent <- M.lookup sentclient <$> (readTMVar $ sentImportantNetMessages nm) + return (fromMaybe S.empty stored, fromMaybe S.empty sent) + +{- Queues a push initiation message in the queue for the appropriate + - side of the push but only if there is not already an initiation message + - from the same client in the queue. -} +queuePushInitiation :: NetMessage -> Assistant () +queuePushInitiation msg@(Pushing clientid stage) = do + tv <- getPushInitiationQueue side + liftIO $ atomically $ do + r <- tryTakeTMVar tv + case r of + Nothing -> putTMVar tv [msg] + Just l -> do + let !l' = msg : filter differentclient l + putTMVar tv l' + where + side = pushDestinationSide stage + differentclient (Pushing cid _) = cid /= clientid + differentclient _ = True +queuePushInitiation _ = noop + +{- Waits for a push inititation message to be received, and runs + - function to select a message from the queue. -} +waitPushInitiation :: PushSide -> ([NetMessage] -> (NetMessage, [NetMessage])) -> Assistant NetMessage +waitPushInitiation side selector = do + tv <- getPushInitiationQueue side + liftIO $ atomically $ do + q <- takeTMVar tv + if null q + then retry + else do + let (msg, !q') = selector q + unless (null q') $ + putTMVar tv q' + return msg + +{- Stores messages for a push into the appropriate inbox. + - + - To avoid overflow, only 1000 messages max are stored in any + - inbox, which should be far more than necessary. + - + - TODO: If we have more than 100 inboxes for different clients, + - discard old ones that are not currently being used by any push. + -} +storeInbox :: NetMessage -> Assistant () +storeInbox msg@(Pushing clientid stage) = do + inboxes <- getInboxes side + stored <- liftIO $ atomically $ do + m <- readTVar inboxes + let update = \v -> do + writeTVar inboxes $ + M.insertWith' const clientid v m + return True + case M.lookup clientid m of + Nothing -> update (1, tostore) + Just (sz, l) + | sz > 1000 -> return False + | otherwise -> + let !sz' = sz + 1 + !l' = D.append l tostore + in update (sz', l') + if stored + then netMessagerDebug clientid ["stored", logNetMessage msg, "in", show side, "inbox"] + else netMessagerDebug clientid ["discarded", logNetMessage msg, "; ", show side, "inbox is full"] + where + side = pushDestinationSide stage + tostore = D.singleton msg +storeInbox _ = noop + +{- Gets the new message for a push from its inbox. + - Blocks until a message has been received. -} +waitInbox :: ClientID -> PushSide -> Assistant (NetMessage) +waitInbox clientid side = do + inboxes <- getInboxes side + liftIO $ atomically $ do + m <- readTVar inboxes + case M.lookup clientid m of + Nothing -> retry + Just (sz, dl) + | sz < 1 -> retry + | otherwise -> do + let msg = D.head dl + let dl' = D.tail dl + let !sz' = sz - 1 + writeTVar inboxes $ + M.insertWith' const clientid (sz', dl') m + return msg + +emptyInbox :: ClientID -> PushSide -> Assistant () +emptyInbox clientid side = do + inboxes <- getInboxes side + liftIO $ atomically $ + modifyTVar' inboxes $ + M.delete clientid + +getInboxes :: PushSide -> Assistant Inboxes +getInboxes side = + getSide side . netMessagerInboxes <$> getAssistant netMessager + +getPushInitiationQueue :: PushSide -> Assistant (TMVar [NetMessage]) +getPushInitiationQueue side = + getSide side . netMessagerPushInitiations <$> getAssistant netMessager + +netMessagerDebug :: ClientID -> [String] -> Assistant () +netMessagerDebug clientid l = debug $ + "NetMessager" : l ++ [show $ logClientID clientid] diff --git a/Assistant/Pairing.hs b/Assistant/Pairing.hs new file mode 100644 index 0000000000..bb1384a151 --- /dev/null +++ b/Assistant/Pairing.hs @@ -0,0 +1,92 @@ +{- git-annex assistant repo pairing, core data types + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Assistant.Pairing where + +import Common.Annex +import Utility.Verifiable +import Assistant.Ssh + +import Control.Concurrent +import Network.Socket +import Data.Char +import qualified Data.Text as T + +data PairStage + {- "I'll pair with anybody who shares the secret that can be used + - to verify this request." -} + = PairReq + {- "I've verified your request, and you can verify this to see + - that I know the secret. I set up your ssh key already. + - Here's mine for you to set up." -} + | PairAck + {- "I saw your PairAck; you can stop sending them." -} + | PairDone + deriving (Eq, Read, Show, Ord, Enum) + +newtype PairMsg = PairMsg (Verifiable (PairStage, PairData, SomeAddr)) + deriving (Eq, Read, Show) + +verifiedPairMsg :: PairMsg -> PairingInProgress -> Bool +verifiedPairMsg (PairMsg m) pip = verify m $ inProgressSecret pip + +fromPairMsg :: PairMsg -> Verifiable (PairStage, PairData, SomeAddr) +fromPairMsg (PairMsg m) = m + +pairMsgStage :: PairMsg -> PairStage +pairMsgStage (PairMsg (Verifiable (s, _, _) _)) = s + +pairMsgData :: PairMsg -> PairData +pairMsgData (PairMsg (Verifiable (_, d, _) _)) = d + +pairMsgAddr :: PairMsg -> SomeAddr +pairMsgAddr (PairMsg (Verifiable (_, _, a) _)) = a + +data PairData = PairData + -- uname -n output, not a full domain name + { remoteHostName :: Maybe HostName + , remoteUserName :: UserName + , remoteDirectory :: FilePath + , remoteSshPubKey :: SshPubKey + , pairUUID :: UUID + } + deriving (Eq, Read, Show) + +type UserName = String + +{- A pairing that is in progress has a secret, a thread that is + - broadcasting pairing messages, and a SshKeyPair that has not yet been + - set up on disk. -} +data PairingInProgress = PairingInProgress + { inProgressSecret :: Secret + , inProgressThreadId :: Maybe ThreadId + , inProgressSshKeyPair :: SshKeyPair + , inProgressPairData :: PairData + , inProgressPairStage :: PairStage + } + deriving (Show) + +data SomeAddr = IPv4Addr HostAddress +{- My Android build of the Network library does not currently have IPV6 + - support. -} +#ifndef __ANDROID__ + | IPv6Addr HostAddress6 +#endif + deriving (Ord, Eq, Read, Show) + +{- This contains the whole secret, just lightly obfuscated to make it not + - too obvious. It's only displayed in the user's web browser. -} +newtype SecretReminder = SecretReminder [Int] + deriving (Show, Eq, Ord, Read) + +toSecretReminder :: T.Text -> SecretReminder +toSecretReminder = SecretReminder . map ord . T.unpack + +fromSecretReminder :: SecretReminder -> T.Text +fromSecretReminder (SecretReminder s) = T.pack $ map chr s diff --git a/Assistant/Pairing/MakeRemote.hs b/Assistant/Pairing/MakeRemote.hs new file mode 100644 index 0000000000..144b236a41 --- /dev/null +++ b/Assistant/Pairing/MakeRemote.hs @@ -0,0 +1,95 @@ +{- git-annex assistant pairing remote creation + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Pairing.MakeRemote where + +import Assistant.Common +import Assistant.Ssh +import Assistant.Pairing +import Assistant.Pairing.Network +import Assistant.MakeRemote +import Assistant.Sync +import Config.Cost +import Config + +import Network.Socket +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 + +{- When local pairing is complete, this is used to set up the remote for + - the host we paired with. -} +finishedLocalPairing :: PairMsg -> SshKeyPair -> Assistant () +finishedLocalPairing msg keypair = do + sshdata <- liftIO $ setupSshKeyPair keypair =<< pairMsgToSshData msg + {- Ensure that we know the ssh host key for the host we paired with. + - If we don't, ssh over to get it. -} + liftIO $ unlessM (knownHost $ sshHostName sshdata) $ + void $ sshTranscript + [ sshOpt "StrictHostKeyChecking" "no" + , sshOpt "NumberOfPasswordPrompts" "0" + , "-n" + , genSshHost (sshHostName sshdata) (sshUserName sshdata) + , "git-annex-shell -c configlist " ++ T.unpack (sshDirectory sshdata) + ] + Nothing + r <- liftAnnex $ addRemote $ makeSshRemote sshdata + liftAnnex $ setRemoteCost r semiExpensiveRemoteCost + syncRemote r + +{- Mostly a straightforward conversion. Except: + - * Determine the best hostname to use to contact the host. + - * Strip leading ~/ from the directory name. + -} +pairMsgToSshData :: PairMsg -> IO SshData +pairMsgToSshData msg = do + let d = pairMsgData msg + hostname <- liftIO $ bestHostName msg + let dir = case remoteDirectory d of + ('~':'/':v) -> v + v -> v + return SshData + { sshHostName = T.pack hostname + , sshUserName = Just (T.pack $ remoteUserName d) + , sshDirectory = T.pack dir + , sshRepoName = genSshRepoName hostname dir + , sshPort = 22 + , needsPubKey = True + , sshCapabilities = [GitAnnexShellCapable, GitCapable, RsyncCapable] + } + +{- Finds the best hostname to use for the host that sent the PairMsg. + - + - If remoteHostName is set, tries to use a .local address based on it. + - That's the most robust, if this system supports .local. + - Otherwise, looks up the hostname in the DNS for the remoteAddress, + - if any. May fall back to remoteAddress if there's no DNS. Ugh. -} +bestHostName :: PairMsg -> IO HostName +bestHostName msg = case remoteHostName $ pairMsgData msg of + Just h -> do + let localname = h ++ ".local" + addrs <- catchDefaultIO [] $ + getAddrInfo Nothing (Just localname) Nothing + maybe fallback (const $ return localname) (headMaybe addrs) + Nothing -> fallback + where + fallback = do + let a = pairMsgAddr msg + let sockaddr = case a of + IPv4Addr addr -> SockAddrInet (PortNum 0) addr + IPv6Addr addr -> SockAddrInet6 (PortNum 0) 0 addr 0 + fromMaybe (showAddr a) + <$> catchDefaultIO Nothing + (fst <$> getNameInfo [] True False sockaddr) diff --git a/Assistant/Pairing/Network.hs b/Assistant/Pairing/Network.hs new file mode 100644 index 0000000000..6c625f8814 --- /dev/null +++ b/Assistant/Pairing/Network.hs @@ -0,0 +1,130 @@ +{- git-annex assistant pairing network code + - + - All network traffic is sent over multicast UDP. For reliability, + - 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 + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Pairing.Network where + +import Assistant.Common +import Assistant.Pairing +import Assistant.DaemonStatus +import Utility.ThreadScheduler +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 + +{- This is an arbitrary port in the dynamic port range, that could + - conceivably be used for some other broadcast messages. + - If so, hope they ignore the garbage from us; we'll certianly + - ignore garbage from them. Wild wild west. -} +pairingPort :: PortNumber +pairingPort = 55556 + +{- Goal: Reach all hosts on the same network segment. + - Method: Use same address that avahi uses. Other broadcast addresses seem + - to not be let through some routers. -} +multicastAddress :: SomeAddr -> HostName +multicastAddress (IPv4Addr _) = "224.0.0.251" +multicastAddress (IPv6Addr _) = "ff02::fb" + +{- Multicasts a message repeatedly on all interfaces, with a 2 second + - delay between each transmission. The message is repeated forever + - unless a number of repeats is specified. + - + - The remoteHostAddress is set to the interface's IP address. + - + - Note that new sockets are opened each time. This is hardly efficient, + - but it allows new network interfaces to be used as they come up. + - On the other hand, the expensive DNS lookups are cached. + -} +multicastPairMsg :: Maybe Int -> Secret -> PairData -> PairStage -> IO () +multicastPairMsg repeats secret pairdata stage = go M.empty repeats + where + go _ (Just 0) = noop + go cache n = do + addrs <- activeNetworkAddresses + let cache' = updatecache cache addrs + mapM_ (sendinterface cache') addrs + threadDelaySeconds (Seconds 2) + go cache' $ pred <$> n + {- The multicast library currently chokes on ipv6 addresses. -} + sendinterface _ (IPv6Addr _) = noop + sendinterface cache i = void $ tryIO $ + withSocketsDo $ bracket setup cleanup use + where + setup = multicastSender (multicastAddress i) pairingPort + cleanup (sock, _) = sClose sock -- FIXME does not work + use (sock, addr) = do + setInterface sock (showAddr i) + maybe noop (\s -> void $ sendTo sock s addr) + (M.lookup i cache) + updatecache cache [] = cache + updatecache cache (i:is) + | M.member i cache = updatecache cache is + | otherwise = updatecache (M.insert i (show $ mkmsg i) cache) is + mkmsg addr = PairMsg $ + mkVerifiable (stage, pairdata, addr) secret + +startSending :: PairingInProgress -> PairStage -> (PairStage -> IO ()) -> Assistant () +startSending pip stage sender = do + a <- asIO start + void $ liftIO $ forkIO a + where + start = do + tid <- liftIO myThreadId + let pip' = pip { inProgressPairStage = stage, inProgressThreadId = Just tid } + oldpip <- modifyDaemonStatus $ + \s -> (s { pairingInProgress = Just pip' }, pairingInProgress s) + maybe noop stopold oldpip + liftIO $ sender stage + stopold = maybe noop (liftIO . killThread) . inProgressThreadId + +stopSending :: PairingInProgress -> Assistant () +stopSending pip = do + maybe noop (liftIO . killThread) $ inProgressThreadId pip + modifyDaemonStatus_ $ \s -> s { pairingInProgress = Nothing } + +class ToSomeAddr a where + toSomeAddr :: a -> SomeAddr + +instance ToSomeAddr IPv4 where + toSomeAddr (IPv4 a) = IPv4Addr a + +instance ToSomeAddr IPv6 where + toSomeAddr (IPv6 o1 o2 o3 o4) = IPv6Addr (o1, o2, o3, o4) + +showAddr :: SomeAddr -> HostName +showAddr (IPv4Addr a) = show $ IPv4 a +showAddr (IPv6Addr (o1, o2, o3, o4)) = show $ IPv6 o1 o2 o3 o4 + +activeNetworkAddresses :: IO [SomeAddr] +activeNetworkAddresses = filter (not . all (`elem` "0.:") . showAddr) + . concatMap (\ni -> [toSomeAddr $ ipv4 ni, toSomeAddr $ ipv6 ni]) + <$> getNetworkInterfaces + +{- A human-visible description of the repository being paired with. + - Note that the repository's description is not shown to the user, because + - it could be something like "my repo", which is confusing when pairing + - with someone else's repo. However, this has the same format as the + - default decription of a repo. -} +pairRepo :: PairMsg -> String +pairRepo msg = concat + [ remoteUserName d + , "@" + , fromMaybe (showAddr $ pairMsgAddr msg) (remoteHostName d) + , ":" + , remoteDirectory d + ] + where + d = pairMsgData msg diff --git a/Assistant/Pushes.hs b/Assistant/Pushes.hs new file mode 100644 index 0000000000..54f31a84bc --- /dev/null +++ b/Assistant/Pushes.hs @@ -0,0 +1,40 @@ +{- git-annex assistant push tracking + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Pushes where + +import Assistant.Common +import Assistant.Types.Pushes + +import Control.Concurrent.STM +import Data.Time.Clock +import qualified Data.Map as M + +{- Blocks until there are failed pushes. + - Returns Remotes whose pushes failed a given time duration or more ago. + - (This may be an empty list.) -} +getFailedPushesBefore :: NominalDiffTime -> Assistant [Remote] +getFailedPushesBefore duration = do + v <- getAssistant failedPushMap + liftIO $ do + m <- atomically $ readTMVar v + now <- getCurrentTime + return $ M.keys $ M.filter (not . toorecent now) m + where + toorecent now time = now `diffUTCTime` time < duration + +{- Modifies the map. -} +changeFailedPushMap :: (PushMap -> PushMap) -> Assistant () +changeFailedPushMap a = do + v <- getAssistant failedPushMap + liftIO $ atomically $ store v . a . fromMaybe M.empty =<< tryTakeTMVar v + where + {- tryTakeTMVar empties the TMVar; refill it only if + - the modified map is not itself empty -} + store v m + | m == M.empty = noop + | otherwise = putTMVar v $! m diff --git a/Assistant/Repair.hs b/Assistant/Repair.hs new file mode 100644 index 0000000000..1369d31986 --- /dev/null +++ b/Assistant/Repair.hs @@ -0,0 +1,153 @@ +{- git-annex assistant repository repair + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Assistant.Repair where + +import Assistant.Common +import Command.Repair (repairAnnexBranch) +import Git.Fsck (FsckResults, foundBroken) +import Git.Repair (runRepairOf) +import qualified Git +import qualified Remote +import qualified Types.Remote as Remote +import Logs.FsckResults +import Annex.UUID +import Utility.Batch +import Config.Files +import Assistant.Sync +import Assistant.Alert +import Assistant.DaemonStatus +import Assistant.Types.UrlRenderer +#ifdef WITH_WEBAPP +import Assistant.WebApp.Types +import qualified Data.Text as T +#endif +import qualified Utility.Lsof as Lsof +import Utility.ThreadScheduler + +import Control.Concurrent.Async + +{- When the FsckResults require a repair, tries to do a non-destructive + - repair. If that fails, pops up an alert. -} +repairWhenNecessary :: UrlRenderer -> UUID -> Maybe Remote -> FsckResults -> Assistant Bool +repairWhenNecessary urlrenderer u mrmt fsckresults + | foundBroken fsckresults = do + liftAnnex $ writeFsckResults u fsckresults + repodesc <- liftAnnex $ Remote.prettyUUID u + ok <- alertWhile (repairingAlert repodesc) + (runRepair u mrmt False) +#ifdef WITH_WEBAPP + unless ok $ do + button <- mkAlertButton True (T.pack "Click Here") urlrenderer $ + RepairRepositoryR u + void $ addAlert $ brokenRepositoryAlert [button] +#endif + return ok + | otherwise = return False + +runRepair :: UUID -> Maybe Remote -> Bool -> Assistant Bool +runRepair u mrmt destructiverepair = do + fsckresults <- liftAnnex $ readFsckResults u + myu <- liftAnnex getUUID + ok <- if u == myu + then localrepair fsckresults + else remoterepair fsckresults + liftAnnex $ writeFsckResults u Nothing + debug [ "Repaired", show u, show ok ] + + return ok + where + localrepair fsckresults = do + -- Stop the watcher from running while running repairs. + changeSyncable Nothing False + + -- This intentionally runs the repair inside the Annex + -- monad, which is not strictly necessary, but keeps + -- other threads that might be trying to use the Annex + -- from running until it completes. + ok <- liftAnnex $ repair fsckresults Nothing + + -- Run a background fast fsck if a destructive repair had + -- to be done, to ensure that the git-annex branch + -- reflects the current state of the repo. + when destructiverepair $ + backgroundfsck [ Param "--fast" ] + + -- Start the watcher running again. This also triggers it to + -- do a startup scan, which is especially important if the + -- git repo repair removed files from the index file. Those + -- files will be seen as new, and re-added to the repository. + when (ok || destructiverepair) $ + changeSyncable Nothing True + + return ok + + remoterepair fsckresults = case Remote.repairRepo =<< mrmt of + Nothing -> return False + Just mkrepair -> do + thisrepopath <- liftIO . absPath + =<< liftAnnex (fromRepo Git.repoPath) + a <- liftAnnex $ mkrepair $ + repair fsckresults (Just thisrepopath) + liftIO $ catchBoolIO a + + repair fsckresults referencerepo = do + (ok, stillmissing, modifiedbranches) <- inRepo $ + runRepairOf fsckresults destructiverepair referencerepo + when destructiverepair $ + repairAnnexBranch stillmissing modifiedbranches + return ok + + backgroundfsck params = liftIO $ void $ async $ do + program <- readProgramFile + batchCommand program (Param "fsck" : params) + +{- Detect when a git lock file exists and has no git process currently + - writing to it. This strongly suggests it is a stale lock file. + - + - However, this could be on a network filesystem. Which is not very safe + - anyway (the assistant relies on being able to check when files have + - no writers to know when to commit them). Just in case, when the lock + - file appears stale, we delay for one minute, and check its size. If + - the size changed, delay for another minute, and so on. This will at + - least work to detect is another machine is writing out a new index + - file, since git does so by writing the new content to index.lock. + - + - Returns true if locks were cleaned up. + -} +repairStaleGitLocks :: Git.Repo -> Assistant Bool +repairStaleGitLocks r = do + lockfiles <- filter (not . isInfixOf "gc.pid") + . filter (".lock" `isSuffixOf`) + <$> liftIO (findgitfiles r) + repairStaleLocks lockfiles + return $ not $ null lockfiles + where + findgitfiles = dirContentsRecursiveSkipping (== dropTrailingPathSeparator annexDir) . Git.localGitDir +repairStaleLocks :: [FilePath] -> Assistant () +repairStaleLocks lockfiles = go =<< getsizes + where + getsize lf = catchMaybeIO $ + (\s -> (lf, fileSize s)) <$> getFileStatus lf + getsizes = liftIO $ catMaybes <$> mapM getsize lockfiles + go [] = return () + go l = ifM (liftIO $ null <$> Lsof.query ("--" : map fst l)) + ( do + waitforit "to check stale git lock file" + l' <- getsizes + if l' == l + then liftIO $ mapM_ nukeFile (map fst l) + else go l' + , do + waitforit "for git lock file writer" + go =<< getsizes + ) + waitforit why = do + notice ["Waiting for 60 seconds", why] + liftIO $ threadDelaySeconds $ Seconds 60 diff --git a/Assistant/RepoProblem.hs b/Assistant/RepoProblem.hs new file mode 100644 index 0000000000..6913fefc62 --- /dev/null +++ b/Assistant/RepoProblem.hs @@ -0,0 +1,34 @@ +{- git-annex assistant remote problem handling + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.RepoProblem where + +import Assistant.Common +import Assistant.Types.RepoProblem +import Utility.TList + +import Control.Concurrent.STM + +{- Gets all repositories that have problems. Blocks until there is at + - least one. -} +getRepoProblems :: Assistant [RepoProblem] +getRepoProblems = nubBy sameRepoProblem + <$> (atomically . getTList) <<~ repoProblemChan + +{- Indicates that there was a problem with a repository, and the problem + - appears to not be a transient (eg network connection) problem. + - + - If the problem is able to be repaired, the passed action will be run. + - (However, if multiple problems are reported with a single repository, + - only a single action will be run.) + -} +repoHasProblem :: UUID -> Assistant () -> Assistant () +repoHasProblem u afterrepair = do + rp <- RepoProblem + <$> pure u + <*> asIO afterrepair + (atomically . flip consTList rp) <<~ repoProblemChan diff --git a/Assistant/Restart.hs b/Assistant/Restart.hs new file mode 100644 index 0000000000..65d913712f --- /dev/null +++ b/Assistant/Restart.hs @@ -0,0 +1,86 @@ +{- git-annex assistant restarting + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Restart where + +import Assistant.Common +import Assistant.Threads.Watcher +import Assistant.DaemonStatus +import Assistant.NamedThread +import Utility.ThreadScheduler +import Utility.NotificationBroadcaster +import Utility.Url +import qualified Git.Construct +import qualified Git.Config +import Config.Files +import qualified Annex +import qualified Git + +import Control.Concurrent +import System.Posix (getProcessID, signalProcess, sigTERM) +import System.Process (cwd) + +{- Before the assistant can be restarted, have to remove our + - gitAnnexUrlFile and our gitAnnexPidFile. Pausing the watcher is also + - a good idea, to avoid fighting when two assistants are running in the + - same repo. + -} +prepRestart :: Assistant () +prepRestart = do + liftIO . maybe noop (`throwTo` PauseWatcher) =<< namedThreadId watchThread + liftIO . nukeFile =<< liftAnnex (fromRepo gitAnnexUrlFile) + liftIO . nukeFile =<< liftAnnex (fromRepo gitAnnexPidFile) + +{- To finish a restart, send a global redirect to the new url + - to any web browsers that are displaying the webapp. + - + - Wait for browser to update before terminating this process. -} +postRestart :: URLString -> Assistant () +postRestart url = do + modifyDaemonStatus_ $ \status -> status { globalRedirUrl = Just url } + liftIO . sendNotification . globalRedirNotifier =<< getDaemonStatus + void $ liftIO $ forkIO $ do + threadDelaySeconds (Seconds 120) + signalProcess sigTERM =<< getProcessID + +runRestart :: Assistant URLString +runRestart = liftIO . newAssistantUrl + =<< liftAnnex (Git.repoLocation <$> Annex.gitRepo) + +{- Starts up the assistant in the repository, and waits for it to create + - a gitAnnexUrlFile. Waits for the assistant to be up and listening for + - connections by testing the url. -} +newAssistantUrl :: FilePath -> IO URLString +newAssistantUrl repo = do + startAssistant repo + geturl + where + geturl = do + r <- Git.Config.read =<< Git.Construct.fromPath repo + waiturl $ gitAnnexUrlFile r + waiturl urlfile = do + v <- tryIO $ readFile urlfile + case v of + Left _ -> delayed $ waiturl urlfile + Right url -> ifM (listening url) + ( return url + , delayed $ waiturl urlfile + ) + listening url = catchBoolIO $ fst <$> exists url [] Nothing + delayed a = do + threadDelay 100000 -- 1/10th of a second + a + +{- Returns once the assistant has daemonized, but possibly before it's + - listening for web connections. -} +startAssistant :: FilePath -> IO () +startAssistant repo = do + program <- readProgramFile + (_, _, _, pid) <- + createProcess $ + (proc program ["assistant"]) { cwd = Just repo } + void $ checkSuccessProcess pid diff --git a/Assistant/ScanRemotes.hs b/Assistant/ScanRemotes.hs new file mode 100644 index 0000000000..2743c0f361 --- /dev/null +++ b/Assistant/ScanRemotes.hs @@ -0,0 +1,41 @@ +{- git-annex assistant remotes needing scanning + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.ScanRemotes where + +import Assistant.Common +import Assistant.Types.ScanRemotes +import qualified Types.Remote as Remote + +import Data.Function +import Control.Concurrent.STM +import qualified Data.Map as M + +{- Blocks until there is a remote or remotes that need to be scanned. + - + - The list has higher priority remotes listed first. -} +getScanRemote :: Assistant [(Remote, ScanInfo)] +getScanRemote = do + v <- getAssistant scanRemoteMap + liftIO $ atomically $ + reverse . sortBy (compare `on` scanPriority . snd) . M.toList + <$> takeTMVar v + +{- Adds new remotes that need scanning. -} +addScanRemotes :: Bool -> [Remote] -> Assistant () +addScanRemotes _ [] = noop +addScanRemotes full rs = do + v <- getAssistant scanRemoteMap + liftIO $ atomically $ do + m <- fromMaybe M.empty <$> tryTakeTMVar v + putTMVar v $ M.unionWith merge (M.fromList $ zip rs (map info rs)) m + where + info r = ScanInfo (-1 * Remote.cost r) full + merge x y = ScanInfo + { scanPriority = max (scanPriority x) (scanPriority y) + , fullScan = fullScan x || fullScan y + } diff --git a/Assistant/Ssh.hs b/Assistant/Ssh.hs new file mode 100644 index 0000000000..1dc982ba63 --- /dev/null +++ b/Assistant/Ssh.hs @@ -0,0 +1,342 @@ +{- git-annex assistant ssh utilities + - + - Copyright 2012-2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Ssh where + +import Common.Annex +import Utility.Tmp +import Utility.UserInfo +import Utility.Shell +import Utility.Rsync +import Utility.FileMode +import Git.Remote + +import Data.Text (Text) +import qualified Data.Text as T +import Data.Char +import Network.URI + +data SshData = SshData + { sshHostName :: Text + , sshUserName :: Maybe Text + , sshDirectory :: Text + , sshRepoName :: String + , sshPort :: Int + , needsPubKey :: Bool + , sshCapabilities :: [SshServerCapability] + } + deriving (Read, Show, Eq) + +data SshServerCapability = GitAnnexShellCapable | GitCapable | RsyncCapable + deriving (Read, Show, Eq) + +hasCapability :: SshData -> SshServerCapability -> Bool +hasCapability d c = c `elem` sshCapabilities d + +onlyCapability :: SshData -> SshServerCapability -> Bool +onlyCapability d c = all (== c) (sshCapabilities d) + +data SshKeyPair = SshKeyPair + { sshPubKey :: String + , sshPrivKey :: String + } + +instance Show SshKeyPair where + show = sshPubKey + +type SshPubKey = String + +{- ssh -ofoo=bar command-line option -} +sshOpt :: String -> String -> String +sshOpt k v = concat ["-o", k, "=", v] + +sshDir :: IO FilePath +sshDir = do + home <- myHomeDir + return $ home ".ssh" + +{- user@host or host -} +genSshHost :: Text -> Maybe Text -> String +genSshHost host user = maybe "" (\v -> T.unpack v ++ "@") user ++ T.unpack host + +{- Generates a ssh or rsync url from a SshData. -} +genSshUrl :: SshData -> String +genSshUrl sshdata = addtrailingslash $ T.unpack $ T.concat $ + if (onlyCapability sshdata RsyncCapable) + then [u, h, T.pack ":", sshDirectory sshdata] + else [T.pack "ssh://", u, h, d] + where + u = maybe (T.pack "") (\v -> T.concat [v, T.pack "@"]) $ sshUserName sshdata + h = sshHostName sshdata + d + | T.pack "/" `T.isPrefixOf` sshDirectory sshdata = sshDirectory sshdata + | T.pack "~/" `T.isPrefixOf` sshDirectory sshdata = T.concat [T.pack "/", sshDirectory sshdata] + | otherwise = T.concat [T.pack "/~/", sshDirectory sshdata] + addtrailingslash s + | "/" `isSuffixOf` s = s + | otherwise = s ++ "/" + +{- Reverses genSshUrl -} +parseSshUrl :: String -> Maybe SshData +parseSshUrl u + | "ssh://" `isPrefixOf` u = fromssh (drop (length "ssh://") u) + | otherwise = fromrsync u + where + mkdata (userhost, dir) = Just $ SshData + { sshHostName = T.pack host + , sshUserName = if null user then Nothing else Just $ T.pack user + , sshDirectory = T.pack dir + , sshRepoName = genSshRepoName host dir + -- dummy values, cannot determine from url + , sshPort = 22 + , needsPubKey = True + , sshCapabilities = [] + } + where + (user, host) = if '@' `elem` userhost + then separate (== '@') userhost + else ("", userhost) + fromrsync s + | not (rsyncUrlIsShell u) = Nothing + | otherwise = mkdata $ separate (== ':') s + fromssh = mkdata . break (== '/') + +{- Generates a git remote name, like host_dir or host -} +genSshRepoName :: String -> FilePath -> String +genSshRepoName host dir + | null dir = makeLegalName host + | otherwise = makeLegalName $ host ++ "_" ++ dir + +{- The output of ssh, including both stdout and stderr. -} +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 () +validateSshPubKey pubkey + | length (lines pubkey) == 1 = + either error return $ check $ words pubkey + | otherwise = error "too many lines in ssh public key" + where + check [prefix, _key, comment] = do + checkprefix prefix + checkcomment comment + check [prefix, _key] = + checkprefix prefix + 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 + | 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 ] + +removeAuthorizedKeys :: Bool -> FilePath -> SshPubKey -> IO () +removeAuthorizedKeys gitannexshellonly dir pubkey = do + let keyline = authorizedKeysLine gitannexshellonly dir pubkey + sshdir <- sshDir + let keyfile = sshdir "authorized_keys" + ls <- lines <$> readFileStrict keyfile + writeFile keyfile $ unlines $ filter (/= keyline) ls + +{- Implemented as a shell command, so it can be run on remote servers over + - ssh. + - + - The ~/.ssh/git-annex-shell wrapper script is created if not already + - present. + -} +addAuthorizedKeysCommand :: Bool -> FilePath -> SshPubKey -> String +addAuthorizedKeysCommand gitannexshellonly dir pubkey = intercalate "&&" + [ "mkdir -p ~/.ssh" + , intercalate "; " + [ "if [ ! -e " ++ wrapper ++ " ]" + , "then (" ++ intercalate ";" (map echoval script) ++ ") > " ++ wrapper + , "fi" + ] + , "chmod 700 " ++ wrapper + , "touch ~/.ssh/authorized_keys" + , "chmod 600 ~/.ssh/authorized_keys" + , unwords + [ "echo" + , shellEscape $ authorizedKeysLine gitannexshellonly dir pubkey + , ">>~/.ssh/authorized_keys" + ] + ] + where + echoval v = "echo " ++ shellEscape v + wrapper = "~/.ssh/git-annex-shell" + script = + [ shebang_portable + , "set -e" + , "if [ \"x$SSH_ORIGINAL_COMMAND\" != \"x\" ]; then" + , runshell "$SSH_ORIGINAL_COMMAND" + , "else" + , runshell "$@" + , "fi" + ] + runshell var = "exec git-annex-shell -c \"" ++ var ++ "\"" + +authorizedKeysLine :: Bool -> FilePath -> SshPubKey -> String +authorizedKeysLine gitannexshellonly dir pubkey + | gitannexshellonly = limitcommand ++ pubkey + {- TODO: Locking down rsync is difficult, requiring a rather + - 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 " + +{- Generates a ssh key pair. -} +genSshKeyPair :: IO SshKeyPair +genSshKeyPair = withTmpDir "git-annex-keygen" $ \dir -> do + ok <- boolSystem "ssh-keygen" + [ Param "-P", Param "" -- no password + , Param "-f", File $ dir "key" + ] + unless ok $ + error "ssh-keygen failed" + SshKeyPair + <$> readFile (dir "key.pub") + <*> readFile (dir "key") + +{- Installs a ssh key pair, and sets up ssh config with a mangled hostname + - that will enable use of the key. This way we avoid changing the user's + - regular ssh experience at all. Returns a modified SshData containing the + - mangled hostname. + - + - Note that the key files are put in ~/.ssh/git-annex/, rather than directly + - in ssh because of an **INSANE** behavior of gnome-keyring: It loads + - ~/.ssh/ANYTHING.pub, and uses them indiscriminately. But using this key + - for a normal login to the server will force git-annex-shell to run, + - and locks the user out. Luckily, it does not recurse into subdirectories. + - + - Similarly, IdentitiesOnly is set in the ssh config to prevent the + - ssh-agent from forcing use of a different key. + -} +setupSshKeyPair :: SshKeyPair -> SshData -> IO SshData +setupSshKeyPair sshkeypair sshdata = do + sshdir <- sshDir + createDirectoryIfMissing True $ parentDir $ sshdir sshprivkeyfile + + unlessM (doesFileExist $ sshdir sshprivkeyfile) $ + writeFileProtected (sshdir sshprivkeyfile) (sshPrivKey sshkeypair) + unlessM (doesFileExist $ sshdir sshpubkeyfile) $ + writeFile (sshdir sshpubkeyfile) (sshPubKey sshkeypair) + + setSshConfig sshdata + [ ("IdentityFile", "~/.ssh/" ++ sshprivkeyfile) + , ("IdentitiesOnly", "yes") + ] + where + sshprivkeyfile = "git-annex" "key." ++ mangleSshHostName sshdata + sshpubkeyfile = sshprivkeyfile ++ ".pub" + +{- Fixes git-annex ssh key pairs configured in .ssh/config + - by old versions to set IdentitiesOnly. -} +fixSshKeyPair :: IO () +fixSshKeyPair = do + sshdir <- sshDir + let configfile = sshdir "config" + whenM (doesFileExist configfile) $ do + ls <- lines <$> readFileStrict configfile + let ls' = fixSshKeyPair' ls + when (ls /= ls') $ + viaTmp writeFile configfile $ unlines ls' + +{- Strategy: Search for IdentityFile lines in for files with key.git-annex + - in their names. These are for git-annex ssh key pairs. + - Add the IdentitiesOnly line immediately after them, if not already + - present. -} +fixSshKeyPair' :: [String] -> [String] +fixSshKeyPair' = go [] + where + go c [] = reverse c + go c (l:[]) + | all (`isInfixOf` l) indicators = go (fixedline l:l:c) [] + | otherwise = go (l:c) [] + go c (l:next:rest) + | 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"] + fixedline tmpl = takeWhile isSpace tmpl ++ "IdentitiesOnly yes" + +{- Setups up a ssh config with a mangled hostname. + - Returns a modified SshData containing the mangled hostname. -} +setSshConfig :: SshData -> [(String, String)] -> IO SshData +setSshConfig sshdata config = do + sshdir <- sshDir + createDirectoryIfMissing True sshdir + let configfile = sshdir "config" + unlessM (catchBoolIO $ isInfixOf mangledhost <$> readFile configfile) $ + appendFile configfile $ unlines $ + [ "" + , "# Added automatically by git-annex" + , "Host " ++ mangledhost + ] ++ map (\(k, v) -> "\t" ++ k ++ " " ++ v) + (settings ++ config) + return $ sshdata { sshHostName = T.pack mangledhost } + where + mangledhost = mangleSshHostName sshdata + settings = + [ ("Hostname", T.unpack $ sshHostName sshdata) + , ("Port", show $ sshPort sshdata) + ] + +{- 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 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 "%" + - (the latter has special meaning to ssh). + -} +mangleSshHostName :: SshData -> String +mangleSshHostName sshdata = "git-annex-" ++ T.unpack (sshHostName sshdata) + ++ "-" ++ escape extra + where + extra = intercalate "_" $ map T.unpack $ catMaybes + [ sshUserName sshdata + , Just $ sshDirectory sshdata + ] + safe c + | isAlphaNum c = True + | c == '_' = True + | otherwise = False + escape s = replace "%" "." $ escapeURIString safe s + +{- Extracts the real hostname from a mangled ssh hostname. -} +unMangleSshHostName :: String -> String +unMangleSshHostName h = case split "-" h of + ("git":"annex":rest) -> intercalate "-" (beginning rest) + _ -> h + +{- Does ssh have known_hosts data for a hostname? -} +knownHost :: Text -> IO Bool +knownHost hostname = do + sshdir <- sshDir + ifM (doesFileExist $ sshdir "known_hosts") + ( not . null <$> checkhost + , return False + ) + where + {- ssh-keygen -F can crash on some old known_hosts file -} + checkhost = catchDefaultIO "" $ + readProcess "ssh-keygen" ["-F", T.unpack hostname] diff --git a/Assistant/Sync.hs b/Assistant/Sync.hs new file mode 100644 index 0000000000..f7656f52df --- /dev/null +++ b/Assistant/Sync.hs @@ -0,0 +1,276 @@ +{- git-annex assistant repo syncing + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Sync where + +import Assistant.Common +import Assistant.Pushes +import Assistant.NetMessager +import Assistant.Types.NetMessager +import Assistant.Alert +import Assistant.Alert.Utility +import Assistant.DaemonStatus +import Assistant.ScanRemotes +import qualified Command.Sync +import Utility.Parallel +import qualified Git +import qualified Git.Branch +import qualified Git.Command +import qualified Git.Ref +import qualified Remote +import qualified Types.Remote as Remote +import qualified Remote.List as Remote +import qualified Annex.Branch +import Annex.UUID +import Annex.TaggedPush +import qualified Config +import Git.Config +import Assistant.NamedThread +import Assistant.Threads.Watcher (watchThread, WatcherControl(..)) +import Assistant.TransferSlots +import Assistant.TransferQueue +import Assistant.RepoProblem +import Logs.Transfer + +import Data.Time.Clock +import qualified Data.Map as M +import qualified Data.Set as S +import Control.Concurrent + +{- Syncs with remotes that may have been disconnected for a while. + - + - First gets git in sync, and then prepares any necessary file transfers. + - + - An expensive full scan is queued when the git-annex branches of some of + - the remotes have diverged from the local git-annex branch. Otherwise, + - it's sufficient to requeue failed transfers. + - + - XMPP remotes are also signaled that we can push to them, and we request + - they push to us. Since XMPP pushes run ansynchronously, any scan of the + - XMPP remotes has to be deferred until they're done pushing to us, so + - all XMPP remotes are marked as possibly desynced. + - + - Also handles signaling any connectRemoteNotifiers, after the syncing is + - done. + -} +reconnectRemotes :: Bool -> [Remote] -> Assistant () +reconnectRemotes _ [] = noop +reconnectRemotes notifypushes rs = void $ do + rs' <- liftIO $ filterM (Remote.checkAvailable True) rs + unless (null rs') $ do + modifyDaemonStatus_ $ \s -> s + { desynced = S.union (S.fromList $ map Remote.uuid xmppremotes) (desynced s) } + failedrs <- syncAction rs' (const go) + forM_ failedrs $ \r -> + whenM (liftIO $ Remote.checkAvailable False r) $ + repoHasProblem (Remote.uuid r) (syncRemote r) + mapM_ signal $ filter (`notElem` failedrs) rs' + where + gitremotes = filter (notspecialremote . Remote.repo) rs + (xmppremotes, nonxmppremotes) = partition isXMPPRemote rs + notspecialremote r + | Git.repoIsUrl r = True + | Git.repoIsLocal r = True + | Git.repoIsLocalUnknown r = True + | otherwise = False + sync (Just branch) = do + (failedpull, diverged) <- manualPull (Just branch) gitremotes + now <- liftIO getCurrentTime + failedpush <- pushToRemotes' now notifypushes gitremotes + return (nub $ failedpull ++ failedpush, diverged) + {- No local branch exists yet, but we can try pulling. -} + sync Nothing = manualPull Nothing gitremotes + go = do + (failed, diverged) <- sync + =<< liftAnnex (inRepo Git.Branch.current) + addScanRemotes diverged $ + filter (not . remoteAnnexIgnore . Remote.gitconfig) + nonxmppremotes + return failed + signal r = liftIO . mapM_ (flip tryPutMVar ()) + =<< fromMaybe [] . M.lookup (Remote.uuid r) . connectRemoteNotifiers + <$> getDaemonStatus + +{- Updates the local sync branch, then pushes it 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". + - + - After the pushes to normal git remotes, also signals XMPP clients that + - they can request an XMPP push. + - + - Avoids running possibly long-duration commands in the Annex monad, so + - as not to block other threads. + - + - This can fail, when the remote's sync branch (or git-annex branch) has + - been updated by some other remote pushing into it, or by the remote + - itself. To handle failure, a manual pull and merge is done, and the push + - is retried. + - + - When there's a lot of activity, we may fail more than once. + - On the other hand, we may fail because the remote is not available. + - Rather than retrying indefinitely, after the first retry we enter a + - fallback mode, where our push is guarenteed to succeed if the remote is + - reachable. If the fallback fails, the push is queued to be retried + - later. + - + - Returns any remotes that it failed to push to. + -} +pushToRemotes :: Bool -> [Remote] -> Assistant [Remote] +pushToRemotes notifypushes remotes = do + now <- liftIO getCurrentTime + syncAction remotes (pushToRemotes' now notifypushes) +pushToRemotes' :: UTCTime -> Bool -> [Remote] -> Assistant [Remote] +pushToRemotes' now notifypushes remotes = do + (g, branch, u) <- liftAnnex $ do + Annex.Branch.commit "update" + (,,) + <$> gitRepo + <*> inRepo Git.Branch.current + <*> getUUID + let (xmppremotes, normalremotes) = partition isXMPPRemote remotes + ret <- go True branch g u normalremotes + unless (null xmppremotes) $ do + shas <- liftAnnex $ map fst <$> + inRepo (Git.Ref.matchingWithHEAD + [Annex.Branch.fullname, Git.Ref.headRef]) + forM_ xmppremotes $ \r -> sendNetMessage $ + Pushing (getXMPPClientID r) (CanPush u shas) + return ret + where + go _ Nothing _ _ _ = return [] -- no branch, so nothing to 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 + then do + when notifypushes $ + sendNetMessage $ NotifyPush $ + map Remote.uuid succeeded + return failed + else if shouldretry + then retry branch g u failed + else fallback branch g u failed + + updatemap succeeded failed = changeFailedPushMap $ \m -> + M.union (makemap failed) $ + M.difference m (makemap succeeded) + makemap l = M.fromList $ zip l (repeat now) + + retry branch g u rs = do + debug ["trying manual pull to resolve failed pushes"] + void $ manualPull (Just branch) rs + go False (Just branch) g u rs + + fallback branch g u rs = do + debug ["fallback pushing to", show rs] + (succeeded, failed) <- liftIO $ + inParallel (\r -> taggedPush u Nothing branch r g) rs + updatemap succeeded failed + when (notifypushes && (not $ null succeeded)) $ + sendNetMessage $ NotifyPush $ + map Remote.uuid succeeded + return failed + + push g branch remote = Command.Sync.pushBranch remote branch g + +{- Displays an alert while running an action that syncs with some remotes, + - and returns any remotes that it failed to sync with. + - + - XMPP remotes are handled specially; since the action can only start + - an async process for them, they are not included in the alert, but are + - still passed to the action. + - + - Readonly remotes are also hidden (to hide the web special remote). + -} +syncAction :: [Remote] -> ([Remote] -> Assistant [Remote]) -> Assistant [Remote] +syncAction rs a + | null visibleremotes = a rs + | otherwise = do + i <- addAlert $ syncAlert visibleremotes + failed <- a rs + let failed' = filter (not . Git.repoIsLocalUnknown . Remote.repo) failed + let succeeded = filter (`notElem` failed) visibleremotes + if null succeeded && null failed' + then removeAlert i + else updateAlertMap $ mergeAlert i $ + syncResultAlert succeeded failed' + return failed + where + visibleremotes = filter (not . Remote.readonly) $ + filter (not . isXMPPRemote) rs + +{- Manually pull from remotes and merge their branches. Returns any + - remotes that it failed to pull from, and a Bool indicating + - whether the git-annex branches of the remotes and local had + - diverged before the pull. + - + - After pulling from the normal git remotes, requests pushes from any + - XMPP remotes. However, those pushes will run asynchronously, so their + - results are not included in the return data. + -} +manualPull :: Maybe Git.Ref -> [Remote] -> Assistant ([Remote], Bool) +manualPull currentbranch remotes = do + g <- liftAnnex gitRepo + let (xmppremotes, normalremotes) = partition isXMPPRemote remotes + failed <- liftIO $ forM normalremotes $ \r -> + ifM (Git.Command.runBool [Param "fetch", Param $ Remote.name r] g) + ( return Nothing + , return $ Just r + ) + haddiverged <- liftAnnex Annex.Branch.forceUpdate + forM_ normalremotes $ \r -> + liftAnnex $ Command.Sync.mergeRemote r currentbranch + u <- liftAnnex getUUID + forM_ xmppremotes $ \r -> + sendNetMessage $ Pushing (getXMPPClientID r) (PushRequest u) + return (catMaybes failed, haddiverged) + +{- Start syncing a remote, using a background thread. -} +syncRemote :: Remote -> Assistant () +syncRemote remote = do + updateSyncRemotes + thread <- asIO $ do + reconnectRemotes False [remote] + addScanRemotes True [remote] + void $ liftIO $ forkIO $ thread + +{- Use Nothing to change autocommit setting; or a remote to change + - its sync setting. -} +changeSyncable :: Maybe Remote -> Bool -> Assistant () +changeSyncable Nothing enable = do + liftAnnex $ Config.setConfig key (boolConfig enable) + liftIO . maybe noop (`throwTo` signal) + =<< namedThreadId watchThread + where + key = Config.annexConfig "autocommit" + signal + | enable = ResumeWatcher + | otherwise = PauseWatcher +changeSyncable (Just r) True = do + liftAnnex $ changeSyncFlag r True + syncRemote r +changeSyncable (Just r) False = do + liftAnnex $ changeSyncFlag r False + updateSyncRemotes + {- Stop all transfers to or from this remote. + - XXX Can't stop any ongoing scan, or git syncs. -} + void $ dequeueTransfers tofrom + mapM_ (cancelTransfer False) =<< + filter tofrom . M.keys . currentTransfers <$> getDaemonStatus + where + tofrom t = transferUUID t == Remote.uuid r + +changeSyncFlag :: Remote -> Bool -> Annex () +changeSyncFlag r enabled = do + Config.setConfig key (boolConfig enabled) + void Remote.remoteListRefresh + where + key = Config.remoteConfig (Remote.repo r) "sync" diff --git a/Assistant/Threads/Committer.hs b/Assistant/Threads/Committer.hs new file mode 100644 index 0000000000..695703e224 --- /dev/null +++ b/Assistant/Threads/Committer.hs @@ -0,0 +1,493 @@ +{- git-annex assistant commit thread + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Assistant.Threads.Committer where + +import Assistant.Common +import Assistant.Changes +import Assistant.Types.Changes +import Assistant.Commits +import Assistant.Alert +import Assistant.DaemonStatus +import Assistant.TransferQueue +import Assistant.Drop +import Logs.Transfer +import Logs.Location +import qualified Annex.Queue +import qualified Git.Command +import qualified Git.LsFiles +import qualified Git.BuildVersion +import qualified Command.Add +import Utility.ThreadScheduler +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 +import qualified Annex +import Utility.InodeCache +import Annex.Content.Direct + +import Data.Time.Clock +import Data.Tuple.Utils +import qualified Data.Set as S +import qualified Data.Map as M +import Data.Either +import Control.Concurrent + +{- This thread makes git commits at appropriate times. -} +commitThread :: NamedThread +commitThread = namedThread "Committer" $ do + delayadd <- liftAnnex $ + maybe delayaddDefault (return . Just . Seconds) + =<< annexDelayAdd <$> Annex.getGitConfig + waitChangeTime $ \(changes, time) -> do + readychanges <- handleAdds delayadd changes + if shouldCommit time (length readychanges) readychanges + then do + debug + [ "committing" + , show (length readychanges) + , "changes" + ] + void $ alertWhile commitAlert $ + liftAnnex commitStaged + recordCommit + let numchanges = length readychanges + mapM_ checkChangeContent readychanges + return numchanges + else do + refill readychanges + return 0 + +refill :: [Change] -> Assistant () +refill [] = noop +refill cs = do + debug ["delaying commit of", show (length cs), "changes"] + refillChanges cs + +{- Wait for one or more changes to arrive to be committed, and then + - runs an action to commit them. If more changes arrive while this is + - going on, they're handled intelligently, batching up changes into + - large commits where possible, doing rename detection, and + - commiting immediately otherwise. -} +waitChangeTime :: (([Change], UTCTime) -> Assistant Int) -> Assistant () +waitChangeTime a = waitchanges 0 + where + waitchanges lastcommitsize = do + -- Wait one one second as a simple rate limiter. + liftIO $ threadDelaySeconds (Seconds 1) + -- Now, wait until at least one change is available for + -- processing. + cs <- getChanges + handlechanges cs lastcommitsize + handlechanges changes lastcommitsize = do + let len = length changes + -- See if now's a good time to commit. + now <- liftIO getCurrentTime + case (lastcommitsize >= maxCommitSize, shouldCommit now len changes, possiblyrename changes) of + (True, True, _) + | len > maxCommitSize -> + waitchanges =<< a (changes, now) + | otherwise -> aftermaxcommit changes + (_, True, False) -> + waitchanges =<< a (changes, now) + (_, True, True) -> do + morechanges <- getrelatedchanges changes + waitchanges =<< a (changes ++ morechanges, now) + _ -> do + refill changes + waitchanges lastcommitsize + + {- Did we perhaps only get one of the AddChange and RmChange pair + - that make up a file rename? Or some of the pairs that make up + - a directory rename? + -} + possiblyrename = all renamepart + + renamepart (PendingAddChange _ _) = True + renamepart c = isRmChange c + + {- Gets changes related to the passed changes, without blocking + - very long. + - + - If there are multiple RmChanges, this is probably a directory + - rename, in which case it may be necessary to wait longer to get + - all the Changes involved. + -} + getrelatedchanges oldchanges + | length (filter isRmChange oldchanges) > 1 = + concat <$> getbatchchanges [] + | otherwise = do + liftIO humanImperceptibleDelay + getAnyChanges + getbatchchanges cs = do + liftIO $ threadDelay $ fromIntegral $ oneSecond `div` 10 + cs' <- getAnyChanges + if null cs' + then return cs + else getbatchchanges (cs':cs) + + {- The last commit was maximum size, so it's very likely there + - are more changes and we'd like to ensure we make another commit + - of maximum size if possible. + - + - But, it can take a while for the Watcher to wake back up + - after a commit. It can get blocked by another thread + - that is using the Annex state, such as a git-annex branch + - commit. Especially after such a large commit, this can + - take several seconds. When this happens, it defeats the + - normal commit batching, which sees some old changes the + - Watcher found while the commit was being prepared, and sees + - no recent ones, and wants to commit immediately. + - + - All that we need to do, then, is wait for the Watcher to + - wake up, and queue up one more change. + - + - However, it's also possible that we're at the end of changes for + - now. So to avoid waiting a really long time before committing + - those changes we have, poll for up to 30 seconds, and then + - commit them. + - + - Also, try to run something in Annex, to ensure we block + - longer if the Annex state is indeed blocked. + -} + aftermaxcommit oldchanges = loop (30 :: Int) + where + loop 0 = continue oldchanges + loop n = do + liftAnnex noop -- ensure Annex state is free + liftIO $ threadDelaySeconds (Seconds 1) + changes <- getAnyChanges + if null changes + then loop (n - 1) + else continue (oldchanges ++ changes) + continue cs + | null cs = waitchanges 0 + | otherwise = handlechanges cs 0 + +isRmChange :: Change -> Bool +isRmChange (Change { changeInfo = i }) | i == RmChange = True +isRmChange _ = False + +{- An amount of time that is hopefully imperceptably short for humans, + - while long enough for a computer to get some work done. + - Note that 0.001 is a little too short for rename change batching to + - work. -} +humanImperceptibleInterval :: NominalDiffTime +humanImperceptibleInterval = 0.01 + +humanImperceptibleDelay :: IO () +humanImperceptibleDelay = threadDelay $ + truncate $ humanImperceptibleInterval * fromIntegral oneSecond + +maxCommitSize :: Int +maxCommitSize = 5000 + +{- Decide if now is a good time to make a commit. + - Note that the list of changes has an undefined order. + - + - Current strategy: If there have been 10 changes within the past second, + - a batch activity is taking place, so wait for later. + -} +shouldCommit :: UTCTime -> Int -> [Change] -> Bool +shouldCommit now len changes + | len == 0 = False + | len >= maxCommitSize = True + | length recentchanges < 10 = True + | otherwise = False -- batch activity + where + thissecond c = timeDelta c <= 1 + recentchanges = filter thissecond changes + timeDelta c = now `diffUTCTime` changeTime c + +commitStaged :: Annex Bool +commitStaged = do + {- This could fail if there's another commit being made by + - something else. -} + v <- tryAnnex Annex.Queue.flush + case v of + Left _ -> return False + Right _ -> do + {- Empty commits may be made if tree changes cancel + - each other out, etc. Git returns nonzero on those, + - so don't propigate out commit failures. -} + void $ inRepo $ catchMaybeIO . + Git.Command.runQuiet + (Param "commit" : nomessage params) + return True + where + params = + [ Param "--quiet" + {- Avoid running the usual pre-commit hook; + - the Watcher does the same symlink fixing, + - and direct mode bookkeeping updating. -} + , Param "--no-verify" + ] + nomessage ps + | Git.BuildVersion.older "1.7.2" = + Param "-m" : Param "autocommit" : ps + | Git.BuildVersion.older "1.7.8" = + Param "--allow-empty-message" : + Param "-m" : Param "" : ps + | otherwise = + Param "--allow-empty-message" : + Param "--no-edit" : Param "-m" : Param "" : ps + +{- 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 + - try to set file permissions or otherwise access the file after closing + - it. -} +delayaddDefault :: Annex (Maybe Seconds) +#ifdef darwin_HOST_OS +delayaddDefault = ifM isDirect + ( return Nothing + , return $ Just $ Seconds 1 + ) +#else +delayaddDefault = return Nothing +#endif + +{- If there are PendingAddChanges, or InProcessAddChanges, the files + - have not yet actually been added to the annex, and that has to be done + - now, before committing. + - + - Deferring the adds to this point causes batches to be bundled together, + - which allows faster checking with lsof that the files are not still open + - for write by some other process, and faster checking with git-ls-files + - that the files are not already checked into git. + - + - When a file is added, Inotify will notice the new symlink. So this waits + - for additional Changes to arrive, so that the symlink has hopefully been + - staged before returning, and will be committed immediately. + - + - OTOH, for kqueue, eventsCoalesce, so instead the symlink is directly + - created and staged. + - + - Returns a list of all changes that are ready to be committed. + - Any pending adds that are not ready yet are put back into the ChangeChan, + - where they will be retried later. + -} +handleAdds :: Maybe Seconds -> [Change] -> Assistant [Change] +handleAdds delayadd cs = returnWhen (null incomplete) $ do + let (pending, inprocess) = partition isPendingAddChange incomplete + direct <- liftAnnex isDirect + (pending', cleanup) <- if direct + then return (pending, noop) + else findnew pending + (postponed, toadd) <- partitionEithers <$> safeToAdd delayadd pending' inprocess + cleanup + + unless (null postponed) $ + refillChanges postponed + + returnWhen (null toadd) $ do + added <- addaction toadd $ + catMaybes <$> if direct + then adddirect toadd + else forM toadd add + if DirWatcher.eventsCoalesce || null added || direct + then return $ added ++ otherchanges + else do + r <- handleAdds delayadd =<< getChanges + return $ r ++ added ++ otherchanges + where + (incomplete, otherchanges) = partition (\c -> isPendingAddChange c || isInProcessAddChange c) cs + + findnew [] = return ([], noop) + findnew pending@(exemplar:_) = do + (newfiles, cleanup) <- liftAnnex $ + inRepo (Git.LsFiles.notInRepo False $ map changeFile pending) + -- note: timestamp info is lost here + let ts = changeTime exemplar + return (map (PendingAddChange ts) newfiles, void $ liftIO cleanup) + + returnWhen c a + | c = return otherchanges + | otherwise = a + + add :: Change -> Assistant (Maybe Change) + add change@(InProcessAddChange { keySource = ks }) = + catchDefaultIO Nothing <~> doadd + where + doadd = sanitycheck ks $ do + (mkey, mcache) <- liftAnnex $ do + showStart "add" $ keyFilename ks + Command.Add.ingest $ Just ks + maybe (failedingest change) (done change mcache $ keyFilename ks) mkey + add _ = return Nothing + + {- In direct mode, avoid overhead of re-injesting a renamed + - file, by examining the other Changes to see if a removed + - file has the same InodeCache as the new file. If so, + - we can just update bookkeeping, and stage the file in git. + -} + adddirect :: [Change] -> Assistant [Maybe Change] + adddirect toadd = do + ct <- liftAnnex compareInodeCachesWith + m <- liftAnnex $ removedKeysMap ct cs + if M.null m + then forM toadd add + else forM toadd $ \c -> do + mcache <- liftIO $ genInodeCache $ changeFile c + case mcache of + Nothing -> add c + Just cache -> + case M.lookup (inodeCacheToKey ct cache) m of + Nothing -> add c + Just k -> fastadd c k + + fastadd :: Change -> Key -> Assistant (Maybe Change) + fastadd change key = do + let source = keySource change + liftAnnex $ Command.Add.finishIngestDirect key source + done change Nothing (keyFilename source) key + + removedKeysMap :: InodeComparisonType -> [Change] -> Annex (M.Map InodeCacheKey Key) + removedKeysMap ct l = do + mks <- forM (filter isRmChange l) $ \c -> + catKeyFile $ changeFile c + M.fromList . concat <$> mapM mkpairs (catMaybes mks) + where + mkpairs k = map (\c -> (inodeCacheToKey ct c, k)) <$> + recordedInodeCache k + + failedingest change = do + refill [retryChange change] + liftAnnex showEndFail + return Nothing + + done change mcache file key = liftAnnex $ do + logStatus key InfoPresent + link <- ifM isDirect + ( inRepo $ gitAnnexLink file key + , Command.Add.link file key mcache + ) + whenM (pure DirWatcher.eventsCoalesce <||> isDirect) $ + stageSymlink file =<< hashSymlink link + showEndOk + return $ Just $ finishedChange change key + + {- Check that the keysource's keyFilename still exists, + - and is still a hard link to its contentLocation, + - before ingesting it. -} + sanitycheck keysource a = do + fs <- liftIO $ getSymbolicLinkStatus $ keyFilename keysource + ks <- liftIO $ getSymbolicLinkStatus $ contentLocation keysource + if deviceID ks == deviceID fs && fileID ks == fileID fs + then a + else do + -- remove the hard link + when (contentLocation keysource /= keyFilename keysource) $ + void $ liftIO $ tryIO $ removeFile $ contentLocation keysource + return Nothing + + {- Shown an alert while performing an action to add a file or + - files. When only a few files are added, their names are shown + - in the alert. When it's a batch add, the number of files added + - is shown. + - + - Add errors tend to be transient and will be + - automatically dealt with, so the alert is always told + - the add succeeded. + -} + addaction [] a = a + addaction toadd a = alertWhile' (addFileAlert $ map changeFile toadd) $ + (,) + <$> pure True + <*> a + +{- Files can Either be Right to be added now, + - or are unsafe, and must be Left for later. + - + - Check by running lsof on the repository. + -} +safeToAdd :: Maybe Seconds -> [Change] -> [Change] -> Assistant [Either Change Change] +safeToAdd _ [] [] = return [] +safeToAdd delayadd pending inprocess = do + maybe noop (liftIO . threadDelaySeconds) delayadd + liftAnnex $ do + keysources <- forM pending $ Command.Add.lockDown . changeFile + let inprocess' = inprocess ++ mapMaybe mkinprocess (zip pending keysources) + openfiles <- S.fromList . map fst3 . filter openwrite <$> + findopenfiles (map keySource inprocess') + let checked = map (check openfiles) inprocess' + + {- If new events are received when files are closed, + - there's no need to retry any changes that cannot + - be done now. -} + if DirWatcher.closingTracked + then do + mapM_ canceladd $ lefts checked + allRight $ rights checked + else return checked + where + check openfiles change@(InProcessAddChange { keySource = ks }) + | S.member (contentLocation ks) openfiles = Left change + check _ change = Right change + + mkinprocess (c, Just ks) = Just InProcessAddChange + { changeTime = changeTime c + , keySource = ks + } + mkinprocess (_, Nothing) = Nothing + + canceladd (InProcessAddChange { keySource = ks }) = do + warning $ keyFilename ks + ++ " still has writers, not adding" + -- remove the hard link + when (contentLocation ks /= keyFilename ks) $ + void $ liftIO $ tryIO $ removeFile $ contentLocation ks + canceladd _ = noop + + openwrite (_file, mode, _pid) + | mode == Lsof.OpenWriteOnly = True + | mode == Lsof.OpenReadWrite = True + | mode == Lsof.OpenUnknown = True + | otherwise = False + + allRight = return . map Right + + {- Normally the KeySources are locked down inside the temp directory, + - so can just lsof that, which is quite efficient. + - + - In crippled filesystem mode, there is no lock down, so must run lsof + - on each individual file. + -} + findopenfiles keysources = ifM crippledFileSystem + ( liftIO $ do + let segments = segmentXargs $ map keyFilename keysources + concat <$> forM segments (\fs -> Lsof.query $ "--" : fs) + , do + tmpdir <- fromRepo gitAnnexTmpDir + liftIO $ Lsof.queryDir tmpdir + ) + +{- After a Change is committed, queue any necessary transfers or drops + - of the content of the key. + - + - This is not done during the startup scan, because the expensive + - transfer scan does the same thing then. + -} +checkChangeContent :: Change -> Assistant () +checkChangeContent change@(Change { changeInfo = i }) = + case changeInfoKey i of + Nothing -> noop + Just k -> whenM (scanComplete <$> getDaemonStatus) $ do + present <- liftAnnex $ inAnnex k + if present + then queueTransfers "new file created" Next k (Just f) Upload + else queueTransfers "new or renamed file wanted" Next k (Just f) Download + handleDrops "file renamed" present k (Just f) Nothing + where + f = changeFile change +checkChangeContent _ = noop diff --git a/Assistant/Threads/ConfigMonitor.hs b/Assistant/Threads/ConfigMonitor.hs new file mode 100644 index 0000000000..c180c4da92 --- /dev/null +++ b/Assistant/Threads/ConfigMonitor.hs @@ -0,0 +1,87 @@ +{- git-annex assistant config monitor thread + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Threads.ConfigMonitor where + +import Assistant.Common +import Assistant.BranchChange +import Assistant.DaemonStatus +import Assistant.Commits +import Utility.ThreadScheduler +import Logs +import Logs.UUID +import Logs.Trust +import Logs.PreferredContent +import Logs.Group +import Remote.List (remoteListRefresh) +import qualified Git.LsTree as LsTree +import Git.FilePath +import qualified Annex.Branch + +import qualified Data.Set as S + +{- This thread detects when configuration changes have been made to the + - git-annex branch and reloads cached configuration. + - + - If the branch is frequently changing, it's checked for configuration + - changes no more often than once every 60 seconds. On the other hand, + - if the branch has not changed in a while, configuration changes will + - be detected immediately. + -} +configMonitorThread :: NamedThread +configMonitorThread = namedThread "ConfigMonitor" $ loop =<< getConfigs + where + loop old = do + waitBranchChange + new <- getConfigs + when (old /= new) $ do + let changedconfigs = new `S.difference` old + debug $ "reloading config" : + map fst (S.toList changedconfigs) + reloadConfigs new + {- Record a commit to get this config + - change pushed out to remotes. -} + recordCommit + liftIO $ threadDelaySeconds (Seconds 60) + loop new + +{- Config files, and their checksums. -} +type Configs = S.Set (FilePath, String) + +{- All git-annex's config files, and actions to run when they change. -} +configFilesActions :: [(FilePath, Assistant ())] +configFilesActions = + [ (uuidLog, void $ liftAnnex uuidMapLoad) + , (remoteLog, void $ liftAnnex remoteListRefresh) + , (trustLog, void $ liftAnnex trustMapLoad) + , (groupLog, void $ liftAnnex groupMapLoad) + , (scheduleLog, void updateScheduleLog) + -- Preferred content settings depend on most of the other configs, + -- so will be reloaded whenever any configs change. + , (preferredContentLog, noop) + ] + +reloadConfigs :: Configs -> Assistant () +reloadConfigs changedconfigs = do + sequence_ as + void $ liftAnnex preferredContentMapLoad + {- 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. -} + when (any (`elem` fs) [remoteLog, trustLog, uuidLog]) + updateSyncRemotes + where + (fs, as) = unzip $ filter (flip S.member changedfiles . fst) + configFilesActions + changedfiles = S.map fst changedconfigs + +getConfigs :: Assistant Configs +getConfigs = S.fromList . map extract + <$> liftAnnex (inRepo $ LsTree.lsTreeFiles Annex.Branch.fullname files) + where + files = map fst configFilesActions + extract treeitem = (getTopFilePath $ LsTree.file treeitem, LsTree.sha treeitem) diff --git a/Assistant/Threads/Cronner.hs b/Assistant/Threads/Cronner.hs new file mode 100644 index 0000000000..55b3ca2f10 --- /dev/null +++ b/Assistant/Threads/Cronner.hs @@ -0,0 +1,225 @@ +{- git-annex assistant sceduled jobs runner + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE DeriveDataTypeable #-} + +module Assistant.Threads.Cronner ( + cronnerThread +) where + +import Assistant.Common +import Assistant.DaemonStatus +import Utility.NotificationBroadcaster +import Annex.UUID +import Config.Files +import Logs.Schedule +import Utility.Scheduled +import Types.ScheduledActivity +import Utility.ThreadScheduler +import Utility.HumanTime +import Utility.Batch +import Assistant.TransferQueue +import Annex.Content +import Logs.Transfer +import Assistant.Types.UrlRenderer +import Assistant.Alert +import Remote +import qualified Types.Remote as Remote +import qualified Git +import qualified Git.Fsck +import Assistant.Fsck +import Assistant.Repair + +import Control.Concurrent.Async +import Control.Concurrent.MVar +import Data.Time.LocalTime +import Data.Time.Clock +import qualified Data.Map as M +import qualified Data.Set as S + +{- Loads schedules for this repository, and fires off one thread for each + - scheduled event that runs on this repository. Each thread sleeps until + - its event is scheduled to run. + - + - To handle events that run on remotes, which need to only run when + - their remote gets connected, threads are also started, and are passed + - a MVar to wait on, which is stored in the DaemonStatus's + - connectRemoteNotifiers. + - + - In the meantime the main thread waits for any changes to the + - schedules. When there's a change, compare the old and new list of + - schedules to find deleted and added ones. Start new threads for added + - ones, and kill the threads for deleted ones. -} +cronnerThread :: UrlRenderer -> NamedThread +cronnerThread urlrenderer = namedThreadUnchecked "Cronner" $ do + fsckNudge urlrenderer Nothing + dstatus <- getDaemonStatus + h <- liftIO $ newNotificationHandle False (scheduleLogNotifier dstatus) + go h M.empty M.empty + where + go h amap nmap = do + activities <- liftAnnex $ scheduleGet =<< getUUID + + let addedactivities = activities `S.difference` M.keysSet amap + let removedactivities = M.keysSet amap `S.difference` activities + + forM_ (S.toList removedactivities) $ \activity -> + case M.lookup activity amap of + Just a -> do + debug ["stopping removed job for", fromScheduledActivity activity, show (asyncThreadId a)] + liftIO $ cancel a + Nothing -> noop + + lastruntimes <- liftAnnex getLastRunTimes + started <- startactivities (S.toList addedactivities) lastruntimes + let addedamap = M.fromList $ map fst started + let addednmap = M.fromList $ catMaybes $ map snd started + + let removefiltered = M.filterWithKey (\k _ -> S.member k removedactivities) + let amap' = M.difference (M.union addedamap amap) (removefiltered amap) + let nmap' = M.difference (M.union addednmap nmap) (removefiltered nmap) + modifyDaemonStatus_ $ \s -> s { connectRemoteNotifiers = M.fromListWith (++) (M.elems nmap') } + + liftIO $ waitNotification h + debug ["reloading changed activities"] + go h amap' nmap' + startactivities as lastruntimes = forM as $ \activity -> + case connectActivityUUID activity of + Nothing -> do + runner <- asIO2 (sleepingActivityThread urlrenderer) + a <- liftIO $ async $ + runner activity (M.lookup activity lastruntimes) + return ((activity, a), Nothing) + Just u -> do + mvar <- liftIO newEmptyMVar + runner <- asIO2 (remoteActivityThread urlrenderer mvar) + a <- liftIO $ async $ + runner activity (M.lookup activity lastruntimes) + return ((activity, a), Just (activity, (u, [mvar]))) + +{- Calculate the next time the activity is scheduled to run, then + - sleep until that time, and run it. Then call setLastRunTime, and + - loop. + -} +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] + go l (Just (NextTimeExactly t)) = waitrun l t Nothing + go l (Just (NextTimeWindow windowstart windowend)) = + waitrun l windowstart (Just windowend) + desc = fromScheduledActivity activity + schedule = getSchedule activity + waitrun l t mmaxt = do + seconds <- liftIO $ secondsUntilLocalTime t + when (seconds > Seconds 0) $ do + debug ["waiting", show seconds, "for next scheduled", desc] + liftIO $ threadDelaySeconds seconds + now <- liftIO getCurrentTime + tz <- liftIO $ getTimeZone now + let nowt = utcToLocalTime tz now + if tolate nowt tz + then do + debug ["too late to run scheduled", desc] + go l =<< getnexttime l + else run nowt + where + tolate nowt tz = case mmaxt of + Just maxt -> nowt > maxt + -- allow the job to start 10 minutes late + Nothing ->diffUTCTime + (localTimeToUTC tz nowt) + (localTimeToUTC tz t) > 600 + run nowt = do + runActivity urlrenderer activity nowt + go (Just nowt) =<< getnexttime (Just nowt) + +{- Wait for the remote to become available by waiting on the MVar. + - Then check if the time is within a time window when activity + - is scheduled to run, and if so run it. + - Otherwise, just wait again on the MVar. + -} +remoteActivityThread :: UrlRenderer -> MVar () -> ScheduledActivity -> Maybe LocalTime -> Assistant () +remoteActivityThread urlrenderer mvar activity lasttime = do + liftIO $ takeMVar mvar + go =<< liftIO (nextTime (getSchedule activity) lasttime) + where + go (Just (NextTimeWindow windowstart windowend)) = do + now <- liftIO getCurrentTime + tz <- liftIO $ getTimeZone now + if now >= localTimeToUTC tz windowstart && now <= localTimeToUTC tz windowend + then do + let nowt = utcToLocalTime tz now + runActivity urlrenderer activity nowt + loop (Just nowt) + else loop lasttime + go _ = noop -- running at exact time not handled here + loop = remoteActivityThread urlrenderer mvar activity + +secondsUntilLocalTime :: LocalTime -> IO Seconds +secondsUntilLocalTime t = do + now <- getCurrentTime + tz <- getTimeZone now + let secs = truncate $ diffUTCTime (localTimeToUTC tz t) now + return $ if secs > 0 + then Seconds secs + else Seconds 0 + +runActivity :: UrlRenderer -> ScheduledActivity -> LocalTime -> Assistant () +runActivity urlrenderer activity nowt = do + debug ["starting", desc] + runActivity' urlrenderer activity + debug ["finished", desc] + liftAnnex $ setLastRunTime activity nowt + where + desc = fromScheduledActivity activity + +runActivity' :: UrlRenderer -> ScheduledActivity -> Assistant () +runActivity' urlrenderer (ScheduledSelfFsck _ d) = do + program <- liftIO $ readProgramFile + g <- liftAnnex gitRepo + fsckresults <- showFscking urlrenderer Nothing $ tryNonAsync $ do + void $ batchCommand program (Param "fsck" : annexFsckParams d) + Git.Fsck.findBroken True g + u <- liftAnnex getUUID + void $ repairWhenNecessary urlrenderer u Nothing fsckresults + 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) + 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 + Nothing -> go rmt $ do + program <- readProgramFile + void $ batchCommand program $ + [ Param "fsck" + -- avoid downloading files + , Param "--fast" + , Param "--from" + , Param $ Remote.name rmt + ] ++ annexFsckParams d + Just mkfscker -> do + {- Note that having mkfsker return an IO action + - avoids running a long duration fsck in the + - Annex monad. -} + go rmt =<< liftAnnex (mkfscker (annexFsckParams d)) + go rmt annexfscker = do + fsckresults <- showFscking urlrenderer (Just rmt) $ tryNonAsync $ do + void annexfscker + let r = Remote.repo rmt + if Git.repoIsLocal r && not (Git.repoIsLocalUnknown r) + then Just <$> Git.Fsck.findBroken True r + else pure Nothing + maybe noop (void . repairWhenNecessary urlrenderer u (Just rmt)) fsckresults + +annexFsckParams :: Duration -> [CommandParam] +annexFsckParams d = + [ Param "--incremental-schedule=1d" + , Param $ "--time-limit=" ++ fromDuration d + ] diff --git a/Assistant/Threads/DaemonStatus.hs b/Assistant/Threads/DaemonStatus.hs new file mode 100644 index 0000000000..5bbb15acbe --- /dev/null +++ b/Assistant/Threads/DaemonStatus.hs @@ -0,0 +1,29 @@ +{- git-annex assistant daemon status thread + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Threads.DaemonStatus where + +import Assistant.Common +import Assistant.DaemonStatus +import Utility.ThreadScheduler +import Utility.NotificationBroadcaster + +{- This writes the daemon status to disk, when it changes, but no more + - frequently than once every ten minutes. + -} +daemonStatusThread :: NamedThread +daemonStatusThread = namedThread "DaemonStatus" $ do + notifier <- liftIO . newNotificationHandle False + =<< changeNotifier <$> getDaemonStatus + checkpoint + runEvery (Seconds tenMinutes) <~> do + liftIO $ waitNotification notifier + checkpoint + where + checkpoint = do + file <- liftAnnex $ fromRepo gitAnnexDaemonStatusFile + liftIO . writeDaemonStatusFile file =<< getDaemonStatus diff --git a/Assistant/Threads/Glacier.hs b/Assistant/Threads/Glacier.hs new file mode 100644 index 0000000000..4c4012a676 --- /dev/null +++ b/Assistant/Threads/Glacier.hs @@ -0,0 +1,43 @@ +{- git-annex assistant Amazon Glacier retrieval + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} +{-# LANGUAGE OverloadedStrings #-} + +module Assistant.Threads.Glacier where + +import Assistant.Common +import Utility.ThreadScheduler +import qualified Types.Remote as Remote +import qualified Remote.Glacier as Glacier +import Logs.Transfer +import Assistant.DaemonStatus +import Assistant.TransferQueue + +import qualified Data.Set as S + +{- Wakes up every half hour and checks if any glacier remotes have failed + - downloads. If so, runs glacier-cli to check if the files are now + - available, and queues the downloads. -} +glacierThread :: NamedThread +glacierThread = namedThread "Glacier" $ runEvery (Seconds 3600) <~> go + where + isglacier r = Remote.remotetype r == Glacier.remote + go = do + rs <- filter isglacier . syncDataRemotes <$> getDaemonStatus + forM_ rs $ \r -> + check r =<< liftAnnex (getFailedTransfers $ Remote.uuid r) + check _ [] = noop + check r l = do + let keys = map getkey l + (availkeys, failedkeys) <- liftAnnex $ Glacier.jobList r keys + let s = S.fromList (failedkeys ++ availkeys) + let l' = filter (\p -> S.member (getkey p) s) l + forM_ l' $ \(t, info) -> do + liftAnnex $ removeFailedTransfer t + queueTransferWhenSmall "object available from glacier" (associatedFile info) t r + getkey = transferKey . fst diff --git a/Assistant/Threads/Merger.hs b/Assistant/Threads/Merger.hs new file mode 100644 index 0000000000..3f4fcb0cca --- /dev/null +++ b/Assistant/Threads/Merger.hs @@ -0,0 +1,118 @@ +{- git-annex assistant git merge thread + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Threads.Merger where + +import Assistant.Common +import Assistant.TransferQueue +import Assistant.BranchChange +import Assistant.DaemonStatus +import Assistant.ScanRemotes +import Utility.DirWatcher +import Utility.DirWatcher.Types +import qualified Annex.Branch +import qualified Git +import qualified Git.Branch +import qualified Command.Sync +import Annex.TaggedPush +import Remote (remoteFromUUID) + +import qualified Data.Set as S +import qualified Data.Text as T + +{- This thread watches for changes to .git/refs/, and handles incoming + - pushes. -} +mergeThread :: NamedThread +mergeThread = namedThread "Merger" $ do + g <- liftAnnex gitRepo + let dir = Git.localGitDir g "refs" + liftIO $ createDirectoryIfMissing True dir + let hook a = Just <$> asIO2 (runHandler a) + changehook <- hook onChange + errhook <- hook onErr + let hooks = mkWatchHooks + { addHook = changehook + , modifyHook = changehook + , errHook = errhook + } + void $ liftIO $ watchDir dir (const False) hooks id + debug ["watching", dir] + +type Handler = FilePath -> Assistant () + +{- Runs an action handler. + - + - Exceptions are ignored, otherwise a whole thread could be crashed. + -} +runHandler :: Handler -> FilePath -> Maybe FileStatus -> Assistant () +runHandler handler file _filestatus = + either (liftIO . print) (const noop) =<< tryIO <~> handler file + +{- Called when there's an error with inotify. -} +onErr :: Handler +onErr = error + +{- Called when a new branch ref is written, or a branch ref is modified. + - + - At startup, synthetic add events fire, causing this to run, but that's + - ok; it ensures that any changes pushed since the last time the assistant + - ran are merged in. + -} +onChange :: Handler +onChange file + | ".lock" `isSuffixOf` file = noop + | isAnnexBranch file = do + branchChanged + diverged <- liftAnnex Annex.Branch.forceUpdate + when diverged $ + unlessM handleDesynced $ + queueDeferredDownloads "retrying deferred download" Later + | "/synced/" `isInfixOf` file = + mergecurrent =<< liftAnnex (inRepo Git.Branch.current) + | otherwise = noop + where + changedbranch = fileToBranch file + + mergecurrent (Just current) + | equivBranches changedbranch current = do + debug + [ "merging", show changedbranch + , "into", show current + ] + void $ liftAnnex $ Command.Sync.mergeFrom changedbranch + mergecurrent _ = noop + + handleDesynced = case fromTaggedBranch changedbranch of + Nothing -> return False + Just (u, info) -> do + mr <- liftAnnex $ remoteFromUUID u + case mr of + Nothing -> return False + Just r -> do + s <- desynced <$> getDaemonStatus + if S.member u s || Just (T.unpack $ getXMPPClientID r) == info + then do + modifyDaemonStatus_ $ \st -> st + { desynced = S.delete u s } + addScanRemotes True [r] + return True + else return False + +equivBranches :: Git.Ref -> Git.Ref -> Bool +equivBranches x y = base x == base y + where + base = takeFileName . show + +isAnnexBranch :: FilePath -> Bool +isAnnexBranch f = n `isSuffixOf` f + where + n = '/' : show Annex.Branch.name + +fileToBranch :: FilePath -> Git.Ref +fileToBranch f = Git.Ref $ "refs" base + where + base = Prelude.last $ split "/refs/" f diff --git a/Assistant/Threads/MountWatcher.hs b/Assistant/Threads/MountWatcher.hs new file mode 100644 index 0000000000..39ae67537f --- /dev/null +++ b/Assistant/Threads/MountWatcher.hs @@ -0,0 +1,195 @@ +{- git-annex assistant mount watcher, using either dbus or mtab polling + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} +{-# LANGUAGE OverloadedStrings #-} + +module Assistant.Threads.MountWatcher where + +import Assistant.Common +import Assistant.DaemonStatus +import Assistant.Sync +import qualified Annex +import qualified Git +import Utility.ThreadScheduler +import Utility.Mounts +import Remote.List +import qualified Types.Remote as Remote +import Assistant.Types.UrlRenderer +import Assistant.Fsck + +import qualified Data.Set as S + +#if WITH_DBUS +import Utility.DBus +import DBus.Client +import DBus +import Data.Word (Word32) +import Control.Concurrent +import qualified Control.Exception as E +#else +#warning Building without dbus support; will use mtab polling +#endif + +mountWatcherThread :: UrlRenderer -> NamedThread +mountWatcherThread urlrenderer = namedThread "MountWatcher" $ +#if WITH_DBUS + dbusThread urlrenderer +#else + pollingThread urlrenderer +#endif + +#if WITH_DBUS + +dbusThread :: UrlRenderer -> Assistant () +dbusThread urlrenderer = do + runclient <- asIO1 go + r <- liftIO $ E.try $ runClient getSessionAddress runclient + either onerr (const noop) r + where + go client = ifM (checkMountMonitor client) + ( do + {- Store the current mount points in an MVar, to be + - compared later. We could in theory work out the + - mount point from the dbus message, but this is + - easier. -} + mvar <- liftIO $ newMVar =<< currentMountPoints + handleevent <- asIO1 $ \_event -> do + nowmounted <- liftIO $ currentMountPoints + wasmounted <- liftIO $ swapMVar mvar nowmounted + handleMounts urlrenderer wasmounted nowmounted + liftIO $ forM_ mountChanged $ \matcher -> + listen client matcher handleevent + , do + liftAnnex $ + warning "No known volume monitor available through dbus; falling back to mtab polling" + pollingThread urlrenderer + ) + onerr :: E.SomeException -> Assistant () + onerr e = do + {- If the session dbus fails, the user probably + - logged out of their desktop. Even if they log + - back in, we won't have access to the dbus + - session key, so polling is the best that can be + - done in this situation. -} + liftAnnex $ + warning $ "dbus failed; falling back to mtab polling (" ++ show e ++ ")" + pollingThread urlrenderer + +{- Examine the list of services connected to dbus, to see if there + - are any we can use to monitor mounts. If not, will attempt to start one. -} +checkMountMonitor :: Client -> Assistant Bool +checkMountMonitor client = do + running <- filter (`elem` usableservices) + <$> liftIO (listServiceNames client) + case running of + [] -> startOneService client startableservices + (service:_) -> do + debug [ "Using running DBUS service" + , service + , "to monitor mount events." + ] + return True + where + startableservices = [gvfs, gvfsgdu] + usableservices = startableservices ++ [kde] + gvfs = "org.gtk.Private.UDisks2VolumeMonitor" + gvfsgdu = "org.gtk.Private.GduVolumeMonitor" + kde = "org.kde.DeviceNotifications" + +startOneService :: Client -> [ServiceName] -> Assistant Bool +startOneService _ [] = return False +startOneService client (x:xs) = do + _ <- liftIO $ tryNonAsync $ callDBus client "StartServiceByName" + [toVariant x, toVariant (0 :: Word32)] + ifM (liftIO $ elem x <$> listServiceNames client) + ( do + debug + [ "Started DBUS service", x + , "to monitor mount events." + ] + return True + , startOneService client xs + ) + +{- Filter matching events recieved when drives are mounted and unmounted. -} +mountChanged :: [MatchRule] +mountChanged = [gvfs True, gvfs False, kde, kdefallback] + where + {- gvfs reliably generates this event whenever a + - drive is mounted/unmounted, whether automatically, or manually -} + gvfs mount = matchAny + { matchInterface = Just "org.gtk.Private.RemoteVolumeMonitor" + , matchMember = Just $ if mount then "MountAdded" else "MountRemoved" + } + {- This event fires when KDE prompts the user what to do with a drive, + - but maybe not at other times. And it's not received -} + kde = matchAny + { matchInterface = Just "org.kde.Solid.Device" + , matchMember = Just "setupDone" + } + {- This event may not be closely related to mounting a drive, but it's + - observed reliably when a drive gets mounted or unmounted. -} + kdefallback = matchAny + { matchInterface = Just "org.kde.KDirNotify" + , matchMember = Just "enteredDirectory" + } + +#endif + +pollingThread :: UrlRenderer -> Assistant () +pollingThread urlrenderer = go =<< liftIO currentMountPoints + where + go wasmounted = do + liftIO $ threadDelaySeconds (Seconds 10) + nowmounted <- liftIO currentMountPoints + handleMounts urlrenderer wasmounted nowmounted + go nowmounted + +handleMounts :: UrlRenderer -> MountPoints -> MountPoints -> Assistant () +handleMounts urlrenderer wasmounted nowmounted = + mapM_ (handleMount urlrenderer . mnt_dir) $ + S.toList $ newMountPoints wasmounted nowmounted + +handleMount :: UrlRenderer -> FilePath -> Assistant () +handleMount urlrenderer dir = do + debug ["detected mount of", dir] + rs <- filter (Git.repoIsLocal . Remote.repo) <$> remotesUnder dir + mapM_ (fsckNudge urlrenderer . Just) rs + reconnectRemotes True rs + +{- Finds remotes located underneath the mount point. + - + - Updates state to include the remotes. + - + - The config of git remotes is re-read, as it may not have been available + - at startup time, or may have changed (it could even be a different + - repository at the same remote location..) + -} +remotesUnder :: FilePath -> Assistant [Remote] +remotesUnder dir = do + repotop <- liftAnnex $ fromRepo Git.repoPath + rs <- liftAnnex remoteList + pairs <- liftAnnex $ mapM (checkremote repotop) rs + let (waschanged, rs') = unzip pairs + when (or waschanged) $ do + liftAnnex $ Annex.changeState $ \s -> s { Annex.remotes = catMaybes rs' } + updateSyncRemotes + return $ mapMaybe snd $ filter fst pairs + where + checkremote repotop r = case Remote.localpath r of + Just p | dirContains dir (absPathFrom repotop p) -> + (,) <$> pure True <*> updateRemote r + _ -> return (False, Just r) + +type MountPoints = S.Set Mntent + +currentMountPoints :: IO MountPoints +currentMountPoints = S.fromList <$> getMounts + +newMountPoints :: MountPoints -> MountPoints -> MountPoints +newMountPoints old new = S.difference new old diff --git a/Assistant/Threads/NetWatcher.hs b/Assistant/Threads/NetWatcher.hs new file mode 100644 index 0000000000..a7124fa01c --- /dev/null +++ b/Assistant/Threads/NetWatcher.hs @@ -0,0 +1,138 @@ +{- git-annex assistant network connection watcher, using dbus + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} +{-# LANGUAGE OverloadedStrings #-} + +module Assistant.Threads.NetWatcher where + +import Assistant.Common +import Assistant.Sync +import Utility.ThreadScheduler +import qualified Types.Remote as Remote +import Assistant.DaemonStatus +import Utility.NotificationBroadcaster + +#if WITH_DBUS +import Utility.DBus +import DBus.Client +import DBus +import Data.Word (Word32) +import Assistant.NetMessager +#else +#warning Building without dbus support; will poll for network connection changes +#endif + +netWatcherThread :: NamedThread +#if WITH_DBUS +netWatcherThread = thread dbusThread +#else +netWatcherThread = thread noop +#endif + where + thread = namedThread "NetWatcher" + +{- This is a fallback for when dbus cannot be used to detect + - network connection changes, but it also ensures that + - any networked remotes that may have not been routable for a + - 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. + -} +netWatcherFallbackThread :: NamedThread +netWatcherFallbackThread = namedThread "NetWatcherFallback" $ + runEvery (Seconds 3600) <~> handleConnection + +#if WITH_DBUS + +dbusThread :: Assistant () +dbusThread = do + handleerr <- asIO2 onerr + runclient <- asIO1 go + liftIO $ persistentClient getSystemAddress () handleerr runclient + where + go client = ifM (checkNetMonitor client) + ( do + listenNMConnections client <~> handleconn + listenWicdConnections client <~> handleconn + , do + liftAnnex $ + warning "No known network monitor available through dbus; falling back to polling" + ) + handleconn = do + debug ["detected network connection"] + notifyNetMessagerRestart + handleConnection + onerr e _ = do + liftAnnex $ + warning $ "lost dbus connection; falling back to polling (" ++ show e ++ ")" + {- Wait, in hope that dbus will come back -} + liftIO $ threadDelaySeconds (Seconds 60) + +{- Examine the list of services connected to dbus, to see if there + - are any we can use to monitor network connections. -} +checkNetMonitor :: Client -> Assistant Bool +checkNetMonitor client = do + running <- liftIO $ filter (`elem` [networkmanager, wicd]) + <$> listServiceNames client + case running of + [] -> return False + (service:_) -> do + debug [ "Using running DBUS service" + , service + , "to monitor network connection events." + ] + return True + where + 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 + where + matcher = matchAny + { matchInterface = Just "org.freedesktop.NetworkManager.Connection.Active" + , 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 + +{- Listens for new Wicd connections. -} +listenWicdConnections :: Client -> IO () -> IO () +listenWicdConnections client callback = + listen client matcher $ \event -> + when (any (== wicd_success) (signalBody event)) $ + callback + where + matcher = matchAny + { matchInterface = Just "org.wicd.daemon" + , matchMember = Just "ConnectResultsSent" + } + wicd_success = toVariant ("success" :: String) + +#endif + +handleConnection :: Assistant () +handleConnection = do + liftIO . sendNotification . networkConnectedNotifier =<< getDaemonStatus + reconnectRemotes True =<< networkRemotes + +{- Network remotes to sync with. -} +networkRemotes :: Assistant [Remote] +networkRemotes = filter (isNothing . Remote.localpath) . syncRemotes + <$> getDaemonStatus diff --git a/Assistant/Threads/PairListener.hs b/Assistant/Threads/PairListener.hs new file mode 100644 index 0000000000..cd95ab5a43 --- /dev/null +++ b/Assistant/Threads/PairListener.hs @@ -0,0 +1,160 @@ +{- git-annex assistant thread to listen for incoming pairing traffic + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Threads.PairListener where + +import Assistant.Common +import Assistant.Pairing +import Assistant.Pairing.Network +import Assistant.Pairing.MakeRemote +import Assistant.WebApp (UrlRenderer) +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 + listener <- asIO1 $ go [] [] + liftIO $ withSocketsDo $ + runEvery (Seconds 60) $ void $ tryIO $ + listener =<< getsock + where + {- Note this can crash if there's no network interface, + - or only one like lo that doesn't support multicast. -} + getsock = multicastReceiver (multicastAddress $ IPv4Addr undefined) pairingPort + + go reqs cache sock = liftIO (getmsg sock []) >>= \msg -> case readish msg of + 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 + (_, True, _, _) -> do + debug ["ignoring message that looped back"] + go reqs cache sock + (_, _, False, _) -> go reqs cache sock + -- PairReq starts a pairing process, so a + -- new one is always heeded, even if + -- some other pairing is in process. + (_, _, _, PairReq) -> if m `elem` reqs + then go reqs (invalidateCache m cache) sock + else do + pairReqReceived verified urlrenderer m + go (m:take 10 reqs) (invalidateCache m cache) sock + (True, _, _, _) -> do + debug + ["ignoring out of order message" + , show (pairMsgStage m) + , "expected" + , show (succ . inProgressPairStage <$> pip) + ] + go reqs cache sock + (_, _, _, PairAck) -> do + cache' <- pairAckReceived verified pip m cache + go reqs cache' sock + (_,_ , _, PairDone) -> do + pairDoneReceived verified pip m + go reqs cache sock + + {- As well as verifying the message using the shared secret, + - check its UUID against the UUID we have stored. If + - they're the same, someone is sending bogus messages, + - which could be an attempt to brute force the shared secret. -} + verificationCheck _ Nothing = return (Nothing, False) + verificationCheck m (Just pip) + | not verified && sameuuid = do + liftAnnex $ warning + "detected possible pairing brute force attempt; disabled pairing" + stopSending pip + return (Nothing, False) + |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 + - same secret used before, a bogus PairDone is not sent. -} + invalidateCache msg = filter (not . verifiedPairMsg msg) + + getmsg sock c = do + (msg, n, _) <- recvFrom sock chunksz + if n < chunksz + then return $ c ++ msg + else getmsg sock $ c ++ msg + where + chunksz = 1024 + +{- Show an alert when a PairReq is seen. -} +pairReqReceived :: Bool -> UrlRenderer -> PairMsg -> Assistant () +pairReqReceived True _ _ = noop -- ignore our own PairReq +pairReqReceived False urlrenderer msg = do + button <- mkAlertButton True (T.pack "Respond") urlrenderer (FinishLocalPairR msg) + void $ addAlert $ pairRequestReceivedAlert repo button + where + repo = pairRepo msg + +{- When a verified PairAck is seen, a host is ready to pair with us, and has + - already configured our ssh key. Stop sending PairReqs, finish the pairing, + - and send a single PairDone. -} +pairAckReceived :: Bool -> Maybe PairingInProgress -> PairMsg -> [PairingInProgress] -> Assistant [PairingInProgress] +pairAckReceived True (Just pip) msg cache = do + stopSending pip + repodir <- repoPath <$> liftAnnex gitRepo + liftIO $ setupAuthorizedKeys msg repodir + finishedLocalPairing msg (inProgressSshKeyPair pip) + startSending pip PairDone $ multicastPairMsg + (Just 1) (inProgressSecret pip) (inProgressPairData pip) + return $ pip : take 10 cache +{- A stale PairAck might also be seen, after we've finished pairing. + - Perhaps our PairDone was not received. To handle this, we keep + - a cache of recently finished pairings, and re-send PairDone in + - response to stale PairAcks for them. -} +pairAckReceived _ _ msg cache = do + let pips = filter (verifiedPairMsg msg) cache + unless (null pips) $ + forM_ pips $ \pip -> + startSending pip PairDone $ multicastPairMsg + (Just 1) (inProgressSecret pip) (inProgressPairData pip) + return cache + +{- If we get a verified PairDone, the host has accepted our PairAck, and + - has paired with us. Stop sending PairAcks, and finish pairing with them. + - + - TODO: Should third-party hosts remove their pair request alert when they + - see a PairDone? + - Complication: The user could have already clicked on the alert and be + - entering the secret. Would be better to start a fresh pair request in this + - situation. + -} +pairDoneReceived :: Bool -> Maybe PairingInProgress -> PairMsg -> Assistant () +pairDoneReceived False _ _ = noop -- not verified +pairDoneReceived True Nothing _ = noop -- not in progress +pairDoneReceived True (Just pip) msg = do + stopSending pip + finishedLocalPairing msg (inProgressSshKeyPair pip) diff --git a/Assistant/Threads/ProblemFixer.hs b/Assistant/Threads/ProblemFixer.hs new file mode 100644 index 0000000000..8095581a69 --- /dev/null +++ b/Assistant/Threads/ProblemFixer.hs @@ -0,0 +1,70 @@ +{- git-annex assistant thread to handle fixing problems with repositories + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Threads.ProblemFixer ( + problemFixerThread +) where + +import Assistant.Common +import Assistant.Types.RepoProblem +import Assistant.RepoProblem +import Assistant.Types.UrlRenderer +import Assistant.Alert +import Remote +import qualified Types.Remote as Remote +import qualified Git.Fsck +import Assistant.Repair +import qualified Git +import Annex.UUID +import Utility.ThreadScheduler + +{- Waits for problems with a repo, and tries to fsck the repo and repair + - the problem. -} +problemFixerThread :: UrlRenderer -> NamedThread +problemFixerThread urlrenderer = namedThread "ProblemFixer" $ + go =<< getRepoProblems + where + go problems = do + mapM_ (handleProblem urlrenderer) problems + liftIO $ threadDelaySeconds (Seconds 60) + -- Problems may have been re-reported while they were being + -- fixed, so ignore those. If a new unique problem happened + -- 60 seconds after the last was fixed, we're unlikely + -- to do much good anyway. + go =<< filter (\p -> not (any (sameRepoProblem p) problems)) + <$> getRepoProblems + +handleProblem :: UrlRenderer -> RepoProblem -> Assistant () +handleProblem urlrenderer repoproblem = do + fixed <- ifM ((==) (problemUUID repoproblem) <$> liftAnnex getUUID) + ( handleLocalRepoProblem urlrenderer + , maybe (return False) (handleRemoteProblem urlrenderer) + =<< liftAnnex (remoteFromUUID $ problemUUID repoproblem) + ) + when fixed $ + liftIO $ afterFix repoproblem + +handleRemoteProblem :: UrlRenderer -> Remote -> Assistant Bool +handleRemoteProblem urlrenderer rmt + | Git.repoIsLocal r && not (Git.repoIsLocalUnknown r) = + ifM (liftIO $ checkAvailable True rmt) + ( do + fixedlocks <- repairStaleGitLocks r + fsckresults <- showFscking urlrenderer (Just rmt) $ tryNonAsync $ + Git.Fsck.findBroken True r + repaired <- repairWhenNecessary urlrenderer (Remote.uuid rmt) (Just rmt) fsckresults + return $ fixedlocks || repaired + , return False + ) + | otherwise = return False + where + r = Remote.repo rmt + +{- This is not yet used, and should probably do a fsck. -} +handleLocalRepoProblem :: UrlRenderer -> Assistant Bool +handleLocalRepoProblem _urlrenderer = do + repairStaleGitLocks =<< liftAnnex gitRepo diff --git a/Assistant/Threads/Pusher.hs b/Assistant/Threads/Pusher.hs new file mode 100644 index 0000000000..3ec922fe48 --- /dev/null +++ b/Assistant/Threads/Pusher.hs @@ -0,0 +1,49 @@ +{- git-annex assistant git pushing thread + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Threads.Pusher where + +import Assistant.Common +import Assistant.Commits +import Assistant.Pushes +import Assistant.DaemonStatus +import Assistant.Sync +import Utility.ThreadScheduler +import qualified Remote +import qualified Types.Remote as Remote + +{- This thread retries pushes that failed before. -} +pushRetryThread :: NamedThread +pushRetryThread = namedThread "PushRetrier" $ runEvery (Seconds halfhour) <~> do + -- We already waited half an hour, now wait until there are failed + -- pushes to retry. + topush <- getFailedPushesBefore (fromIntegral halfhour) + unless (null topush) $ do + debug ["retrying", show (length topush), "failed pushes"] + void $ pushToRemotes True topush + where + halfhour = 1800 + +{- This thread pushes git commits out to remotes soon after they are made. -} +pushThread :: NamedThread +pushThread = namedThread "Pusher" $ runEvery (Seconds 2) <~> do + -- We already waited two seconds as a simple rate limiter. + -- Next, wait until at least one commit has been made + void getCommits + -- Now see if now's a good time to push. + void $ pushToRemotes True =<< pushTargets + +{- We want to avoid pushing to remotes that are marked readonly. + - + - Also, avoid pushing to local remotes we can easily tell are not available, + - to avoid ugly messages when a removable drive is not attached. + -} +pushTargets :: Assistant [Remote] +pushTargets = liftIO . filterM (Remote.checkAvailable True) + =<< candidates <$> getDaemonStatus + where + candidates = filter (not . Remote.readonly) . syncGitRemotes diff --git a/Assistant/Threads/SanityChecker.hs b/Assistant/Threads/SanityChecker.hs new file mode 100644 index 0000000000..6946e8b3a9 --- /dev/null +++ b/Assistant/Threads/SanityChecker.hs @@ -0,0 +1,175 @@ +{- git-annex assistant sanity checker + - + - Copyright 2012, 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Threads.SanityChecker ( + sanityCheckerStartupThread, + sanityCheckerDailyThread, + sanityCheckerHourlyThread +) where + +import Assistant.Common +import Assistant.DaemonStatus +import Assistant.Alert +import Assistant.Repair +import qualified Git.LsFiles +import qualified Git.Command +import qualified Git.Config +import Utility.ThreadScheduler +import qualified Assistant.Threads.Watcher as Watcher +import Utility.LogFile +import Utility.Batch +import Utility.NotificationBroadcaster +import Config +import Utility.HumanTime +import Git.Repair + +import Data.Time.Clock.POSIX +import qualified Data.Set as S + +{- This thread runs once at startup, and most other threads wait for it + - to finish. (However, the webapp thread does not, to prevent the UI + - being nonresponsive.) -} +sanityCheckerStartupThread :: Maybe Duration -> NamedThread +sanityCheckerStartupThread startupdelay = namedThreadUnchecked "SanityCheckerStartup" $ do + {- Stale git locks can prevent commits from happening, etc. -} + void $ repairStaleGitLocks =<< liftAnnex gitRepo + + {- A corrupt index file can prevent the assistant from working at + - all, so detect and repair. -} + ifM (not <$> liftAnnex (inRepo (checkIndex S.empty))) + ( do + notice ["corrupt index file found at startup; removing and restaging"] + liftAnnex $ inRepo nukeIndex + {- Normally the startup scan avoids re-staging files, + - but with the index deleted, everything needs to be + - restaged. -} + modifyDaemonStatus_ $ \s -> s { forceRestage = True } + , whenM (liftAnnex $ inRepo missingIndex) $ do + debug ["no index file; restaging"] + modifyDaemonStatus_ $ \s -> s { forceRestage = True } + ) + + {- If there's a startup delay, it's done here. -} + liftIO $ maybe noop (threadDelaySeconds . Seconds . fromIntegral . durationSeconds) startupdelay + + {- Notify other threads that the startup sanity check is done. -} + status <- getDaemonStatus + liftIO $ sendNotification $ startupSanityCheckNotifier status + +{- This thread wakes up hourly for inxepensive frequent sanity checks. -} +sanityCheckerHourlyThread :: NamedThread +sanityCheckerHourlyThread = namedThread "SanityCheckerHourly" $ forever $ do + liftIO $ threadDelaySeconds $ Seconds oneHour + hourlyCheck + +{- This thread wakes up daily to make sure the tree is in good shape. -} +sanityCheckerDailyThread :: NamedThread +sanityCheckerDailyThread = namedThread "SanityCheckerDaily" $ forever $ do + waitForNextCheck + + debug ["starting sanity check"] + void $ alertWhile sanityCheckAlert go + debug ["sanity check complete"] + where + go = do + modifyDaemonStatus_ $ \s -> s { sanityCheckRunning = True } + + now <- liftIO getPOSIXTime -- before check started + r <- either showerr return =<< (tryIO . batch) <~> dailyCheck + + modifyDaemonStatus_ $ \s -> s + { sanityCheckRunning = False + , lastSanityCheck = Just now + } + + return r + + showerr e = do + liftAnnex $ warning $ show e + return False + +{- Only run one check per day, from the time of the last check. -} +waitForNextCheck :: Assistant () +waitForNextCheck = do + v <- lastSanityCheck <$> getDaemonStatus + now <- liftIO getPOSIXTime + liftIO $ threadDelaySeconds $ Seconds $ calcdelay now v + where + calcdelay _ Nothing = oneDay + calcdelay now (Just lastcheck) + | lastcheck < now = max oneDay $ + oneDay - truncate (now - lastcheck) + | otherwise = oneDay + +{- It's important to stay out of the Annex monad as much as possible while + - running potentially expensive parts of this check, since remaining in it + - will block the watcher. -} +dailyCheck :: Assistant Bool +dailyCheck = do + g <- liftAnnex gitRepo + + -- Find old unstaged symlinks, and add them to git. + (unstaged, cleanup) <- liftIO $ Git.LsFiles.notInRepo False ["."] g + now <- liftIO getPOSIXTime + forM_ unstaged $ \file -> do + ms <- liftIO $ catchMaybeIO $ getSymbolicLinkStatus file + case ms of + Just s | toonew (statusChangeTime s) now -> noop + | isSymbolicLink s -> addsymlink file ms + _ -> noop + liftIO $ void cleanup + + {- Allow git-gc to run once per day. More frequent gc is avoided + - by default to avoid slowing things down. Only run repacks when 100x + - the usual number of loose objects are present; we tend + - 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.runBool + [ Param "-c", Param "gc.auto=670000" + , Param "gc" + , Param "--auto" + ] g + + return True + where + toonew timestamp now = now < (realToFrac (timestamp + slop) :: POSIXTime) + slop = fromIntegral tenMinutes + insanity msg = do + liftAnnex $ warning msg + void $ addAlert $ sanityCheckFixAlert msg + addsymlink file s = do + isdirect <- liftAnnex isDirect + Watcher.runHandler (Watcher.onAddSymlink isdirect) file s + insanity $ "found unstaged symlink: " ++ file + +hourlyCheck :: Assistant () +hourlyCheck = checkLogSize 0 + +{- Rotate logs until log file size is < 1 mb. -} +checkLogSize :: Int -> Assistant () +checkLogSize n = do + f <- liftAnnex $ fromRepo gitAnnexLogFile + logs <- liftIO $ listLogs f + totalsize <- liftIO $ sum <$> mapM filesize logs + when (totalsize > oneMegabyte) $ do + notice ["Rotated logs due to size:", show totalsize] + liftIO $ openLog f >>= redirLog + when (n < maxLogs + 1) $ + checkLogSize $ n + 1 + where + filesize f = fromIntegral . fileSize <$> liftIO (getFileStatus f) + +oneMegabyte :: Int +oneMegabyte = 1000000 + +oneHour :: Int +oneHour = 60 * 60 + +oneDay :: Int +oneDay = 24 * oneHour + diff --git a/Assistant/Threads/TransferPoller.hs b/Assistant/Threads/TransferPoller.hs new file mode 100644 index 0000000000..68075cac8a --- /dev/null +++ b/Assistant/Threads/TransferPoller.hs @@ -0,0 +1,56 @@ +{- git-annex assistant transfer polling thread + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Threads.TransferPoller where + +import Assistant.Common +import Assistant.DaemonStatus +import Logs.Transfer +import Utility.NotificationBroadcaster +import qualified Assistant.Threads.TransferWatcher as TransferWatcher + +import Control.Concurrent +import qualified Data.Map as M + +{- This thread polls the status of ongoing transfers, determining how much + - of each transfer is complete. -} +transferPollerThread :: NamedThread +transferPollerThread = namedThread "TransferPoller" $ do + g <- liftAnnex gitRepo + tn <- liftIO . newNotificationHandle True =<< + transferNotifier <$> getDaemonStatus + forever $ do + liftIO $ threadDelay 500000 -- 0.5 seconds + ts <- currentTransfers <$> getDaemonStatus + if M.null ts + -- block until transfers running + then liftIO $ waitNotification tn + else mapM_ (poll g) $ M.toList ts + where + poll g (t, info) + {- Downloads are polled by checking the size of the + - temp file being used for the transfer. -} + | transferDirection t == Download = do + let f = gitAnnexTmpLocation (transferKey t) g + sz <- liftIO $ catchMaybeIO $ + fromIntegral . fileSize <$> getFileStatus f + newsize t info sz + {- Uploads don't need to be polled for when the TransferWatcher + - thread can track file modifications. -} + | TransferWatcher.watchesTransferSize = noop + {- Otherwise, this code polls the upload progress + - by reading the transfer info file. -} + | otherwise = do + let f = transferFile t g + mi <- liftIO $ catchDefaultIO Nothing $ + readTransferInfoFile Nothing f + maybe noop (newsize t info . bytesComplete) mi + + newsize t info sz + | bytesComplete info /= sz && isJust sz = + alterTransferInfo t $ \i -> i { bytesComplete = sz } + | otherwise = noop diff --git a/Assistant/Threads/TransferScanner.hs b/Assistant/Threads/TransferScanner.hs new file mode 100644 index 0000000000..ba302d6bb9 --- /dev/null +++ b/Assistant/Threads/TransferScanner.hs @@ -0,0 +1,183 @@ +{- git-annex assistant thread to scan remotes to find needed transfers + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Threads.TransferScanner where + +import Assistant.Common +import Assistant.Types.ScanRemotes +import Assistant.ScanRemotes +import Assistant.TransferQueue +import Assistant.DaemonStatus +import Assistant.Drop +import Assistant.Sync +import Assistant.DeleteRemote +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 +import Utility.NotificationBroadcaster +import Utility.Batch +import qualified Git.LsFiles as LsFiles +import qualified Backend +import Annex.Content +import Annex.Wanted + +import qualified Data.Set as S + +{- This thread waits until a remote needs to be scanned, to find transfers + - that need to be made, to keep data in sync. + -} +transferScannerThread :: UrlRenderer -> NamedThread +transferScannerThread urlrenderer = namedThread "TransferScanner" $ do + startupScan + go S.empty + where + go scanned = do + scanrunning False + liftIO $ threadDelaySeconds (Seconds 2) + (rs, infos) <- unzip <$> getScanRemote + scanrunning True + if any fullScan infos || any (`S.notMember` scanned) rs + then do + expensiveScan urlrenderer rs + go $ scanned `S.union` S.fromList rs + else do + mapM_ failedTransferScan rs + go scanned + scanrunning b = do + ds <- modifyDaemonStatus $ \s -> + (s { transferScanRunning = b }, s) + liftIO $ sendNotification $ transferNotifier ds + + {- All git remotes are synced, and all available remotes + - are scanned in full on startup, for multiple reasons, including: + - + - * This may be the first run, and there may be remotes + - already in place, that need to be synced. + - * Changes may have been made last time we run, but remotes were + - not available to be synced with. + - * Changes may have been made to remotes while we were down. + - * We may have run before, and scanned a remote, but + - only been in a subdirectory of the git remote, and so + - not synced it all. + - * We may have run before, and had transfers queued, + - and then the system (or us) crashed, and that info was + - lost. + - * A remote may be in the unwanted group, and this is a chance + - to determine if the remote has been emptied. + -} + startupScan = do + reconnectRemotes True =<< syncGitRemotes <$> getDaemonStatus + addScanRemotes True =<< syncDataRemotes <$> getDaemonStatus + +{- This is a cheap scan for failed transfers involving a remote. -} +failedTransferScan :: Remote -> Assistant () +failedTransferScan r = do + failed <- liftAnnex $ clearFailedTransfers (Remote.uuid r) + mapM_ retry failed + where + retry (t, info) + | transferDirection t == Download = + {- Check if the remote still has the key. + - If not, relies on the expensiveScan to + - get it queued from some other remote. -} + whenM (liftAnnex $ remoteHas r $ transferKey t) $ + requeue t info + | otherwise = + {- The Transferrer checks when uploading + - that the remote doesn't already have the + - key, so it's not redundantly checked here. -} + requeue t info + requeue t info = queueTransferWhenSmall "retrying failed transfer" (associatedFile info) t r + +{- This is a expensive scan through the full git work tree, finding + - files to transfer. The scan is blocked when the transfer queue gets + - too large. + - + - This also finds files that are present either here or on a remote + - but that are not preferred content, and drops them. Searching for files + - to drop is done concurrently with the scan for transfers. + - + - TODO: It would be better to first drop as much as we can, before + - transferring much, to minimise disk use. + - + - During the scan, we'll also check if any unwanted repositories are empty, + - and can be removed. While unrelated, this is a cheap place to do it, + - since we need to look at the locations of all keys anyway. + -} +expensiveScan :: UrlRenderer -> [Remote] -> Assistant () +expensiveScan urlrenderer rs = unless onlyweb $ batch <~> do + debug ["starting scan of", show visiblers] + + let us = map Remote.uuid rs + + mapM_ (liftAnnex . clearFailedTransfers) us + + unwantedrs <- liftAnnex $ S.fromList + <$> filterM inUnwantedGroup us + + g <- liftAnnex gitRepo + (files, cleanup) <- liftIO $ LsFiles.inRepo [] g + removablers <- scan unwantedrs files + void $ liftIO cleanup + + debug ["finished scan of", show visiblers] + + 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' + + scan unwanted [] = return unwanted + scan unwanted (f:fs) = do + (unwanted', ts) <- maybe + (return (unwanted, [])) + (findtransfers f unwanted) + =<< liftAnnex (Backend.lookupFile f) + mapM_ (enqueue f) ts + scan unwanted' fs + + enqueue f (r, t) = + queueTransferWhenSmall "expensive scan found missing object" + (Just f) t r + findtransfers f unwanted (key, _) = do + {- The syncable remotes may have changed since this + - scan began. -} + syncrs <- syncDataRemotes <$> getDaemonStatus + locs <- liftAnnex $ loggedLocations key + present <- liftAnnex $ inAnnex key + handleDropsFrom locs syncrs + "expensive scan found too many copies of object" + present key (Just f) Nothing + liftAnnex $ do + let slocs = S.fromList locs + let use a = return $ mapMaybe (a key slocs) syncrs + ts <- if present + then filterM (wantSend True (Just f) . Remote.uuid . fst) + =<< use (genTransfer Upload False) + else ifM (wantGet True $ Just f) + ( use (genTransfer Download True) , return [] ) + let unwanted' = S.difference unwanted slocs + return (unwanted', ts) + +genTransfer :: Direction -> Bool -> Key -> S.Set UUID -> Remote -> Maybe (Remote, Transfer) +genTransfer direction want key slocs r + | direction == Upload && Remote.readonly r = Nothing + | S.member (Remote.uuid r) slocs == want = Just + (r, Transfer direction (Remote.uuid r) key) + | otherwise = Nothing + +remoteHas :: Remote -> Key -> Annex Bool +remoteHas r key = elem + <$> pure (Remote.uuid r) + <*> loggedLocations key diff --git a/Assistant/Threads/TransferWatcher.hs b/Assistant/Threads/TransferWatcher.hs new file mode 100644 index 0000000000..cd72828650 --- /dev/null +++ b/Assistant/Threads/TransferWatcher.hs @@ -0,0 +1,104 @@ +{- git-annex assistant transfer watching thread + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Threads.TransferWatcher where + +import Assistant.Common +import Assistant.DaemonStatus +import Assistant.TransferSlots +import Logs.Transfer +import Utility.DirWatcher +import Utility.DirWatcher.Types +import qualified Remote + +import Control.Concurrent +import qualified Data.Map as M + +{- This thread watches for changes to the gitAnnexTransferDir, + - and updates the DaemonStatus's map of ongoing transfers. -} +transferWatcherThread :: NamedThread +transferWatcherThread = namedThread "TransferWatcher" $ do + dir <- liftAnnex $ gitAnnexTransferDir <$> gitRepo + liftIO $ createDirectoryIfMissing True dir + let hook a = Just <$> asIO2 (runHandler a) + addhook <- hook onAdd + delhook <- hook onDel + modifyhook <- hook onModify + errhook <- hook onErr + let hooks = mkWatchHooks + { addHook = addhook + , delHook = delhook + , modifyHook = modifyhook + , errHook = errhook + } + void $ liftIO $ watchDir dir (const False) hooks id + debug ["watching for transfers"] + +type Handler = FilePath -> Assistant () + +{- Runs an action handler. + - + - Exceptions are ignored, otherwise a whole thread could be crashed. + -} +runHandler :: Handler -> FilePath -> Maybe FileStatus -> Assistant () +runHandler handler file _filestatus = + either (liftIO . print) (const noop) =<< tryIO <~> handler file + +{- Called when there's an error with inotify. -} +onErr :: Handler +onErr = error + +{- Called when a new transfer information file is written. -} +onAdd :: Handler +onAdd file = case parseTransferFile file of + Nothing -> noop + Just t -> go t =<< liftAnnex (checkTransfer t) + where + go _ Nothing = noop -- transfer already finished + go t (Just info) = do + debug [ "transfer starting:", describeTransfer t info ] + r <- liftAnnex $ Remote.remoteFromUUID $ transferUUID t + updateTransferInfo t info { transferRemote = r } + +{- Called when a transfer information file is updated. + - + - The only thing that should change in the transfer info is the + - bytesComplete, so that's the only thing updated in the DaemonStatus. -} +onModify :: Handler +onModify file = case parseTransferFile file of + Nothing -> noop + Just t -> go t =<< liftIO (readTransferInfoFile Nothing file) + where + go _ Nothing = noop + go t (Just newinfo) = alterTransferInfo t $ + \i -> i { bytesComplete = bytesComplete newinfo } + +{- This thread can only watch transfer sizes when the DirWatcher supports + - tracking modificatons to files. -} +watchesTransferSize :: Bool +watchesTransferSize = modifyTracked + +{- Called when a transfer information file is removed. -} +onDel :: Handler +onDel file = case parseTransferFile file of + Nothing -> noop + Just t -> do + debug [ "transfer finishing:", show t] + minfo <- removeTransfer t + + -- Run transfer hook. + m <- transferHook <$> getDaemonStatus + maybe noop (\hook -> void $ liftIO $ forkIO $ hook t) + (M.lookup (transferKey t) m) + + finished <- asIO2 finishedTransfer + void $ liftIO $ forkIO $ do + {- XXX race workaround delay. The location + - log needs to be updated before finishedTransfer + - runs. -} + threadDelay 10000000 -- 10 seconds + finished t minfo diff --git a/Assistant/Threads/Transferrer.hs b/Assistant/Threads/Transferrer.hs new file mode 100644 index 0000000000..0bc419e15e --- /dev/null +++ b/Assistant/Threads/Transferrer.hs @@ -0,0 +1,25 @@ +{- git-annex assistant data transferrer thread + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Threads.Transferrer where + +import Assistant.Common +import Assistant.TransferQueue +import Assistant.TransferSlots +import Logs.Transfer +import Config.Files + +{- Dispatches transfers from the queue. -} +transfererThread :: NamedThread +transfererThread = namedThread "Transferrer" $ do + program <- liftIO readProgramFile + forever $ inTransferSlot program $ + maybe (return Nothing) (uncurry genTransfer) + =<< getNextTransfer notrunning + where + {- Skip transfers that are already running. -} + notrunning = isNothing . startedTime diff --git a/Assistant/Threads/UpgradeWatcher.hs b/Assistant/Threads/UpgradeWatcher.hs new file mode 100644 index 0000000000..80f2040a07 --- /dev/null +++ b/Assistant/Threads/UpgradeWatcher.hs @@ -0,0 +1,109 @@ +{- git-annex assistant thread to detect when git-annex is upgraded + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Assistant.Threads.UpgradeWatcher ( + upgradeWatcherThread +) where + +import Assistant.Common +import Assistant.Upgrade +import Utility.DirWatcher +import Utility.DirWatcher.Types +import Utility.ThreadScheduler +import Assistant.Types.UrlRenderer +import Assistant.Alert +import Assistant.DaemonStatus +#ifdef WITH_WEBAPP +import Assistant.WebApp.Types +import qualified Build.SysConfig +#endif + +import Control.Concurrent.MVar +import qualified Data.Text as T + +data WatcherState = InStartupScan | Started | Upgrading + deriving (Eq) + +upgradeWatcherThread :: UrlRenderer -> NamedThread +upgradeWatcherThread urlrenderer = namedThread "UpgradeWatcher" $ do + whenM (liftIO checkSuccessfulUpgrade) $ + showSuccessfulUpgrade urlrenderer + go =<< liftIO upgradeFlagFile + where + go Nothing = debug [ "cannot determine program path" ] + go (Just flagfile) = do + mvar <- liftIO $ newMVar InStartupScan + changed <- Just <$> asIO2 (changedFile urlrenderer mvar flagfile) + let hooks = mkWatchHooks + { addHook = changed + , delHook = changed + , addSymlinkHook = changed + , modifyHook = changed + , delDirHook = changed + } + let dir = parentDir flagfile + let depth = length (splitPath dir) + 1 + let nosubdirs f = length (splitPath f) == depth + void $ liftIO $ watchDir dir nosubdirs hooks (startup mvar) + -- Ignore bogus events generated during the startup scan. + startup mvar scanner = do + r <- scanner + void $ swapMVar mvar Started + return r + +changedFile :: UrlRenderer -> MVar WatcherState -> FilePath -> FilePath -> Maybe FileStatus -> Assistant () +changedFile urlrenderer mvar flagfile file _status + | flagfile /= file = noop + | otherwise = do + state <- liftIO $ readMVar mvar + when (state == Started) $ do + setstate Upgrading + ifM (liftIO upgradeSanityCheck) + ( handleUpgrade urlrenderer + , do + debug ["new version failed sanity check; not using"] + setstate Started + ) + where + setstate = void . liftIO . swapMVar mvar + +handleUpgrade :: UrlRenderer -> Assistant () +handleUpgrade urlrenderer = do + -- Wait 2 minutes for any final upgrade changes to settle. + -- (For example, other associated files may be being put into + -- place.) Not needed when using a distribution bundle, because + -- in that case git-annex handles the upgrade in a non-racy way. + liftIO $ unlessM usingDistribution $ + threadDelaySeconds (Seconds 120) + ifM autoUpgradeEnabled + ( do + debug ["starting automatic upgrade"] + unattendedUpgrade +#ifdef WITH_WEBAPP + , do + button <- mkAlertButton True (T.pack "Finish Upgrade") urlrenderer ConfigFinishUpgradeR + void $ addAlert $ upgradeReadyAlert button +#else + , noop +#endif + ) + +showSuccessfulUpgrade :: UrlRenderer -> Assistant () +showSuccessfulUpgrade urlrenderer = do +#ifdef WITH_WEBAPP + button <- ifM autoUpgradeEnabled + ( pure Nothing + , Just <$> mkAlertButton True + (T.pack "Enable Automatic Upgrades") + urlrenderer ConfigEnableAutomaticUpgradeR + ) + void $ addAlert $ upgradeFinishedAlert button Build.SysConfig.packageversion +#else + noop +#endif diff --git a/Assistant/Threads/Upgrader.hs b/Assistant/Threads/Upgrader.hs new file mode 100644 index 0000000000..f0c47e8441 --- /dev/null +++ b/Assistant/Threads/Upgrader.hs @@ -0,0 +1,101 @@ +{- git-annex assistant thread to detect when upgrade is available + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Assistant.Threads.Upgrader ( + upgraderThread +) where + +import Assistant.Common +import Assistant.Upgrade + +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 +import Assistant.WebApp.Types +#endif + +import Data.Time.Clock +import qualified Data.Text as T + +upgraderThread :: UrlRenderer -> NamedThread +upgraderThread urlrenderer = namedThread "Upgrader" $ + when (isJust Build.SysConfig.upgradelocation) $ do + {- Check for upgrade on startup, unless it was just + - upgraded. -} + unlessM (liftIO checkSuccessfulUpgrade) $ + checkUpgrade urlrenderer + h <- liftIO . newNotificationHandle False . networkConnectedNotifier =<< getDaemonStatus + go h =<< liftIO getCurrentTime + where + {- 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 + liftIO $ waitNotification h + autoupgrade <- liftAnnex $ annexAutoUpgrade <$> Annex.getGitConfig + if autoupgrade == NoAutoUpgrade + then go h lastchecked + else do + now <- liftIO getCurrentTime + if diffUTCTime now lastchecked > halfday + then do + checkUpgrade urlrenderer + go h =<< liftIO getCurrentTime + else go h lastchecked + halfday = 12 * 60 * 60 + +checkUpgrade :: UrlRenderer -> Assistant () +checkUpgrade urlrenderer = do + debug [ "Checking if an upgrade is available." ] + go =<< getDistributionInfo + where + go Nothing = debug [ "Failed to check if upgrade is available." ] + go (Just d) = do + let installed = Git.Version.normalize Build.SysConfig.packageversion + let avail = Git.Version.normalize $ distributionVersion d + let old = Git.Version.normalize <$> distributionUrgentUpgrade d + if Just installed <= old + then canUpgrade High urlrenderer d + else if installed < avail + then canUpgrade Low urlrenderer d + else debug [ "No new version found." ] + +canUpgrade :: AlertPriority -> UrlRenderer -> GitAnnexDistribution -> Assistant () +canUpgrade urgency urlrenderer d = ifM autoUpgradeEnabled + ( startDistributionDownload d + , do +#ifdef WITH_WEBAPP + button <- mkAlertButton True (T.pack "Upgrade") urlrenderer (ConfigStartUpgradeR d) + void $ addAlert (canUpgradeAlert urgency (distributionVersion d) button) +#else + noop +#endif + ) + +getDistributionInfo :: Assistant (Maybe GitAnnexDistribution) +getDistributionInfo = do + ua <- liftAnnex Url.getUserAgent + liftIO $ withTmpFile "git-annex.tmp" $ \tmpfile h -> do + hClose h + ifM (Url.downloadQuiet distributionInfoUrl [] [] tmpfile ua) + ( 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 new file mode 100644 index 0000000000..6a56eadbbd --- /dev/null +++ b/Assistant/Threads/Watcher.hs @@ -0,0 +1,355 @@ +{- git-annex assistant tree watcher + - + - Copyright 2012-2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE DeriveDataTypeable, CPP #-} + +module Assistant.Threads.Watcher ( + watchThread, + WatcherControl(..), + checkCanWatch, + needLsof, + onAddSymlink, + runHandler, +) where + +import Assistant.Common +import Assistant.DaemonStatus +import Assistant.Changes +import Assistant.Types.Changes +import Assistant.Alert +import Utility.DirWatcher +import Utility.DirWatcher.Types +import qualified Utility.Lsof as Lsof +import qualified Annex +import qualified Annex.Queue +import qualified Git +import qualified Git.UpdateIndex +import qualified Git.LsFiles as LsFiles +import qualified Backend +import Annex.Direct +import Annex.Content.Direct +import Annex.CatFile +import Annex.CheckIgnore +import Annex.Link +import Annex.FileMatcher +import Annex.ReplaceFile +import Git.Types +import Config +import Utility.ThreadScheduler + +import Data.Bits.Utils +import Data.Typeable +import qualified Data.ByteString.Lazy as L +import qualified Control.Exception as E +import Data.Time.Clock + +checkCanWatch :: Annex () +checkCanWatch + | canWatch = do + liftIO Lsof.setup + unlessM (liftIO (inPath "lsof") <||> Annex.getState Annex.force) + needLsof + | otherwise = error "watch mode is not available on this system" + +needLsof :: Annex () +needLsof = error $ unlines + [ "The lsof command is needed for watch mode to be safe, and is not in PATH." + , "To override lsof checks to ensure that files are not open for writing" + , "when added to the annex, you can use --force" + , "Be warned: This can corrupt data in the annex, and make fsck complain." + ] + +{- A special exception that can be thrown to pause or resume the watcher. -} +data WatcherControl = PauseWatcher | ResumeWatcher + deriving (Show, Eq, Typeable) + +instance E.Exception WatcherControl + +watchThread :: NamedThread +watchThread = namedThread "Watcher" $ + ifM (liftAnnex $ annexAutoCommit <$> Annex.getGitConfig) + ( runWatcher + , waitFor ResumeWatcher runWatcher + ) + +runWatcher :: Assistant () +runWatcher = do + startup <- asIO1 startupScan + matcher <- liftAnnex largeFilesMatcher + direct <- liftAnnex isDirect + symlinkssupported <- liftAnnex $ coreSymlinks <$> Annex.getGitConfig + addhook <- hook $ if direct + then onAddDirect symlinkssupported matcher + else onAdd matcher + delhook <- hook onDel + addsymlinkhook <- hook $ onAddSymlink direct + deldirhook <- hook onDelDir + errhook <- hook onErr + let hooks = mkWatchHooks + { addHook = addhook + , delHook = delhook + , addSymlinkHook = addsymlinkhook + , delDirHook = deldirhook + , errHook = errhook + } + handle <- liftIO $ watchDir "." ignored 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 + waitFor ResumeWatcher runWatcher + where + hook a = Just <$> asIO2 (runHandler a) + +waitFor :: WatcherControl -> Assistant () -> Assistant () +waitFor sig next = do + r <- liftIO (E.try pause :: IO (Either E.SomeException ())) + case r of + Left e -> case E.fromException e of + Just s + | s == sig -> next + _ -> noop + _ -> noop + where + pause = runEvery (Seconds 86400) noop + +{- Initial scartup scan. The action should return once the scan is complete. -} +startupScan :: IO a -> Assistant a +startupScan scanner = do + liftAnnex $ showAction "scanning" + alertWhile' startupScanAlert $ do + r <- liftIO scanner + + -- Notice any files that were deleted before + -- watching was started. + top <- liftAnnex $ fromRepo Git.repoPath + (fs, cleanup) <- liftAnnex $ inRepo $ LsFiles.deleted [top] + forM_ fs $ \f -> do + liftAnnex $ onDel' f + maybe noop recordChange =<< madeChange f RmChange + void $ liftIO cleanup + + liftAnnex $ showAction "started" + liftIO $ putStrLn "" + + modifyDaemonStatus_ $ \s -> s { scanComplete = True } + + return (True, r) + +{- Hardcoded ignores, passed to the DirWatcher so it can avoid looking + - at the entire .git directory. Does not include .gitignores. -} +ignored :: FilePath -> Bool +ignored = ig . takeFileName + where + ig ".git" = True + ig ".gitignore" = True + ig ".gitattributes" = True +#ifdef darwin_HOST_OS + ig ".DS_Store" = True +#endif + ig _ = False + +unlessIgnored :: FilePath -> Assistant (Maybe Change) -> Assistant (Maybe Change) +unlessIgnored file a = ifM (liftAnnex $ checkIgnored file) + ( noChange + , a + ) + +type Handler = FilePath -> Maybe FileStatus -> Assistant (Maybe Change) + +{- Runs an action handler, and if there was a change, adds it to the ChangeChan. + - + - Exceptions are ignored, otherwise a whole watcher thread could be crashed. + -} +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 + Right Nothing -> noop + Right (Just change) -> do + -- Just in case the commit thread is not + -- flushing the queue fast enough. + liftAnnex Annex.Queue.flushWhenFull + recordChange change + where + 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 bigfilematcher file = ifM (liftAnnex $ checkFileMatcher bigfilematcher file) + ( pendingAddChange file + , do + liftAnnex $ Annex.Queue.addCommand "add" + [Params "--force --"] [file] + madeChange file AddFileChange + ) + +onAdd :: FileMatcher -> Handler +onAdd matcher file filestatus + | maybe False isRegularFile filestatus = + unlessIgnored file $ + add matcher file + | otherwise = noChange + +shouldRestage :: DaemonStatus -> Bool +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 symlinkssupported matcher file fs = do + v <- liftAnnex $ catKeyFile file + case (v, fs) of + (Just key, Just filestatus) -> + ifM (liftAnnex $ sameFileStatus key filestatus) + {- It's possible to get an add event for + - an existing file that is not + - really modified, but it might have + - just been deleted and been put back, + - so it symlink is restaged to make sure. -} + ( ifM (shouldRestage <$> getDaemonStatus) + ( do + link <- liftAnnex $ inRepo $ gitAnnexLink file key + addLink file link (Just key) + , noChange + ) + , guardSymlinkStandin (Just key) $ do + debug ["changed direct", file] + liftAnnex $ changedDirect key file + add matcher file + ) + _ -> unlessIgnored file $ + guardSymlinkStandin Nothing $ do + debug ["add direct", file] + add matcher file + where + {- 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. -} + guardSymlinkStandin mk a + | symlinkssupported = a + | otherwise = do + linktarget <- liftAnnex $ getAnnexLinkTarget file + case linktarget of + Nothing -> a + Just lt -> do + case fileKey $ takeFileName lt of + Nothing -> noop + Just key -> void $ liftAnnex $ + addAssociatedFile key file + onAddSymlink' linktarget mk True file fs + +{- A symlink might be an arbitrary symlink, which is just added. + - Or, if it is a git-annex symlink, ensure it points to the content + - before adding it. + -} +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' :: Maybe String -> Maybe Key -> Bool -> Handler +onAddSymlink' linktarget mk isdirect file filestatus = go mk + where + go (Just key) = do + when isdirect $ + liftAnnex $ void $ addAssociatedFile key file + link <- liftAnnex $ inRepo $ gitAnnexLink file key + if linktarget == Just link + then ensurestaged (Just link) =<< getDaemonStatus + else do + unless isdirect $ + liftAnnex $ replaceFile file $ + makeAnnexLink link + addLink file link (Just key) + -- other symlink, not git-annex + go Nothing = ensurestaged linktarget =<< getDaemonStatus + + {- This is often called on symlinks that are already + - staged correctly. A symlink may have been deleted + - and being re-added, or added when the watcher was + - not running. So they're normally restaged to make sure. + - + - As an optimisation, during the startup scan, avoid + - restaging everything. Only links that were created since + - the last time the daemon was running are staged. + - (If the daemon has never ran before, avoid staging + - links too.) + -} + ensurestaged (Just link) daemonstatus + | shouldRestage daemonstatus = addLink file link mk + | otherwise = case filestatus of + Just s + | not (afterLastDaemonRun (statusChangeTime s) daemonstatus) -> noChange + _ -> addLink file link mk + ensurestaged Nothing _ = noChange + +{- For speed, tries to reuse the existing blob for symlink target. -} +addLink :: FilePath -> FilePath -> Maybe Key -> Assistant (Maybe Change) +addLink file link mk = do + debug ["add symlink", file] + liftAnnex $ do + v <- catObjectDetails $ Ref $ ':':file + case v of + Just (currlink, sha, _type) + | s2w8 link == L.unpack currlink -> + stageSymlink file sha + _ -> stageSymlink file =<< hashSymlink link + madeChange file $ LinkChange mk + +onDel :: Handler +onDel file _ = do + debug ["file deleted", file] + liftAnnex $ onDel' file + madeChange file RmChange + +onDel' :: FilePath -> Annex () +onDel' file = do + whenM isDirect $ do + mkey <- catKeyFile file + case mkey of + Nothing -> noop + Just key -> void $ removeAssociatedFile key file + Annex.Queue.addUpdateIndex =<< + inRepo (Git.UpdateIndex.unstageFile file) + +{- A directory has been deleted, or moved, so tell git to remove anything + - that was inside it from its cache. Since it could reappear at any time, + - use --cached to only delete it from the index. + - + - This queues up a lot of RmChanges, which assists the Committer in + - pairing up renamed files when the directory was renamed. -} +onDelDir :: Handler +onDelDir dir _ = do + debug ["directory deleted", dir] + (fs, clean) <- liftAnnex $ inRepo $ LsFiles.deleted [dir] + + liftAnnex $ mapM_ onDel' fs + + -- Get the events queued up as fast as possible, so the + -- committer sees them all in one block. + now <- liftIO getCurrentTime + recordChanges $ map (\f -> Change now f RmChange) fs + + void $ liftIO clean + liftAnnex Annex.Queue.flushWhenFull + noChange + +{- Called when there's an error with inotify or kqueue. -} +onErr :: Handler +onErr msg _ = do + liftAnnex $ warning msg + void $ addAlert $ warningAlert "watcher" msg + noChange diff --git a/Assistant/Threads/WebApp.hs b/Assistant/Threads/WebApp.hs new file mode 100644 index 0000000000..2ad61168e1 --- /dev/null +++ b/Assistant/Threads/WebApp.hs @@ -0,0 +1,109 @@ +{- git-annex assistant webapp thread + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE TemplateHaskell, MultiParamTypeClasses #-} +{-# LANGUAGE CPP #-} +{-# OPTIONS_GHC -fno-warn-orphans #-} + +module Assistant.Threads.WebApp where + +import Assistant.Common +import Assistant.WebApp +import Assistant.WebApp.Types +import Assistant.WebApp.DashBoard +import Assistant.WebApp.SideBar +import Assistant.WebApp.Notifications +import Assistant.WebApp.RepoList +import Assistant.WebApp.Configurators +import Assistant.WebApp.Configurators.Local +import Assistant.WebApp.Configurators.Ssh +import Assistant.WebApp.Configurators.Pairing +import Assistant.WebApp.Configurators.AWS +import Assistant.WebApp.Configurators.IA +import Assistant.WebApp.Configurators.WebDAV +import Assistant.WebApp.Configurators.XMPP +import Assistant.WebApp.Configurators.Preferences +import Assistant.WebApp.Configurators.Edit +import Assistant.WebApp.Configurators.Delete +import Assistant.WebApp.Configurators.Fsck +import Assistant.WebApp.Configurators.Upgrade +import Assistant.WebApp.Documentation +import Assistant.WebApp.Control +import Assistant.WebApp.OtherRepos +import Assistant.WebApp.Repair +import Assistant.Types.ThreadedMonad +import Utility.WebApp +import Utility.Tmp +import Utility.FileMode +import Git + +import Yesod +import Network.Socket (SockAddr, HostName) +import Data.Text (pack, unpack) + +mkYesodDispatch "WebApp" $(parseRoutesFile "Assistant/WebApp/routes") + +type Url = String + +webAppThread + :: AssistantData + -> UrlRenderer + -> Bool + -> Maybe String + -> Maybe HostName + -> Maybe (IO Url) + -> Maybe (Url -> FilePath -> IO ()) + -> NamedThread +webAppThread assistantdata urlrenderer noannex cannotrun listenhost postfirstrun onstartup = thread $ liftIO $ do +#ifdef __ANDROID__ + when (isJust listenhost) $ + -- See Utility.WebApp + error "Sorry, --listen is not currently supported on Android" +#endif + webapp <- WebApp + <$> pure assistantdata + <*> (pack <$> genRandomToken) + <*> getreldir + <*> pure staticRoutes + <*> pure postfirstrun + <*> pure cannotrun + <*> pure noannex + <*> pure listenhost + setUrlRenderer urlrenderer $ yesodRender webapp (pack "") + app <- toWaiAppPlain webapp + app' <- ifM debugEnabled + ( return $ httpDebugLogger app + , return app + ) + runWebApp listenhost app' $ \addr -> if noannex + then withTmpFile "webapp.html" $ \tmpfile _ -> + go addr webapp tmpfile Nothing + else do + let st = threadState assistantdata + htmlshim <- runThreadState st $ fromRepo gitAnnexHtmlShim + urlfile <- runThreadState st $ fromRepo gitAnnexUrlFile + go addr webapp htmlshim (Just urlfile) + where + -- 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" + getreldir + | noannex = return Nothing + | otherwise = Just <$> + (relHome =<< absPath + =<< runThreadState (threadState assistantdata) (fromRepo repoPath)) + go addr webapp htmlshim urlfile = do + let url = myUrl webapp addr + maybe noop (`writeFileProtected` url) urlfile + writeHtmlShim "Starting webapp..." url htmlshim + maybe noop (\a -> a url htmlshim) onstartup + +myUrl :: WebApp -> SockAddr -> Url +myUrl webapp addr = unpack $ yesodRender webapp urlbase DashboardR [] + where + urlbase = pack $ "http://" ++ show addr diff --git a/Assistant/Threads/XMPPClient.hs b/Assistant/Threads/XMPPClient.hs new file mode 100644 index 0000000000..8eb4699390 --- /dev/null +++ b/Assistant/Threads/XMPPClient.hs @@ -0,0 +1,368 @@ +{- git-annex XMPP client + - + - Copyright 2012, 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Threads.XMPPClient where + +import Assistant.Common +import Assistant.XMPP +import Assistant.XMPP.Client +import Assistant.NetMessager +import Assistant.Types.NetMessager +import Assistant.Types.Buddies +import Assistant.XMPP.Buddies +import Assistant.Sync +import Assistant.DaemonStatus +import qualified Remote +import Utility.ThreadScheduler +import Assistant.WebApp (UrlRenderer) +import Assistant.WebApp.Types hiding (liftAssistant) +import Assistant.Alert +import Assistant.Pairing +import Assistant.XMPP.Git +import Annex.UUID +import Logs.UUID + +import Network.Protocol.XMPP +import Control.Concurrent +import Control.Concurrent.STM.TMVar +import Control.Concurrent.STM (atomically) +import qualified Data.Text as T +import qualified Data.Set as S +import qualified Data.Map as M +import qualified Git.Branch +import Data.Time.Clock +import Control.Concurrent.Async + +xmppClientThread :: UrlRenderer -> NamedThread +xmppClientThread urlrenderer = namedThread "XMPPClient" $ + restartableClient . xmppClient urlrenderer =<< getAssistant id + +{- Runs the client, handing restart events. -} +restartableClient :: (XMPPCreds -> IO ()) -> Assistant () +restartableClient a = forever $ go =<< liftAnnex getXMPPCreds + where + go Nothing = waitNetMessagerRestart + go (Just creds) = do + tid <- liftIO $ forkIO $ a creds + waitNetMessagerRestart + liftIO $ killThread tid + +xmppClient :: UrlRenderer -> AssistantData -> XMPPCreds -> IO () +xmppClient urlrenderer d creds = + retry (runclient creds) =<< getCurrentTime + where + liftAssistant = runAssistant d + inAssistant = liftIO . liftAssistant + + {- When the client exits, it's restarted; + - if it keeps failing, back off to wait 5 minutes before + - trying it again. -} + retry client starttime = do + {- The buddy list starts empty each time + - the client connects, so that stale info + - is not retained. -} + liftAssistant $ + updateBuddyList (const noBuddies) <<~ buddyList + void client + liftAssistant $ modifyDaemonStatus_ $ \s -> s + { xmppClientID = Nothing } + now <- getCurrentTime + if diffUTCTime now starttime > 300 + then do + liftAssistant $ debug ["connection lost; reconnecting"] + retry client now + else do + liftAssistant $ debug ["connection failed; will retry"] + threadDelaySeconds (Seconds 300) + retry client =<< getCurrentTime + + runclient c = liftIO $ connectXMPP c $ \jid -> do + selfjid <- bindJID jid + putStanza gitAnnexSignature + + inAssistant $ do + modifyDaemonStatus_ $ \s -> s + { xmppClientID = Just $ xmppJID creds } + debug ["connected", logJid selfjid] + + lasttraffic <- liftIO $ atomically . newTMVar =<< getCurrentTime + + sender <- xmppSession $ sendnotifications selfjid + receiver <- xmppSession $ receivenotifications selfjid lasttraffic + pinger <- xmppSession $ sendpings selfjid lasttraffic + {- Run all 3 threads concurrently, until + - any of them throw an exception. + - Then kill all 3 threads, and rethrow the + - exception. + - + - If this thread gets an exception, the 3 threads + - will also be killed. -} + liftIO $ pinger `concurrently` sender `concurrently` receiver + + sendnotifications selfjid = forever $ + join $ inAssistant $ relayNetMessage selfjid + receivenotifications selfjid lasttraffic = forever $ do + l <- decodeStanza selfjid <$> getStanza + void $ liftIO $ atomically . swapTMVar lasttraffic =<< getCurrentTime + inAssistant $ debug + ["received:", show $ map logXMPPEvent l] + mapM_ (handle selfjid) l + sendpings selfjid lasttraffic = forever $ do + putStanza pingstanza + + startping <- liftIO getCurrentTime + liftIO $ threadDelaySeconds (Seconds 120) + t <- liftIO $ atomically $ readTMVar lasttraffic + when (t < startping) $ do + inAssistant $ debug ["ping timeout"] + error "ping timeout" + where + {- 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 + + handle 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)) = + maybe noop (inAssistant . pairMsgReceived urlrenderer stage u selfjid) (parseJID c) + handle _ (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 + + resendImportantMessages selfjid (Presence { presenceFrom = Just jid }) = do + let c = formatJID jid + (stored, sent) <- inAssistant $ + checkImportantNetMessages (formatJID (baseJID jid), c) + forM_ (S.toList $ S.difference stored sent) $ \msg -> do + let msg' = readdressNetMessage msg c + inAssistant $ debug + [ "sending to new client:" + , logJid jid + , show $ logNetMessage msg' + ] + join $ inAssistant $ convertNetMsg msg' selfjid + inAssistant $ sentImportantNetMessage msg c + resendImportantMessages _ _ = noop + +data XMPPEvent + = GotNetMessage NetMessage + | PresenceMessage Presence + | Ignorable ReceivedStanza + | Unknown ReceivedStanza + | ProtocolError ReceivedStanza + deriving Show + +logXMPPEvent :: XMPPEvent -> String +logXMPPEvent (GotNetMessage m) = logNetMessage m +logXMPPEvent (PresenceMessage p) = logPresence p +logXMPPEvent (Ignorable (ReceivedPresence p)) = "Ignorable " ++ logPresence p +logXMPPEvent (Ignorable _) = "Ignorable message" +logXMPPEvent (Unknown _) = "Unknown message" +logXMPPEvent (ProtocolError _) = "Protocol error message" + +logPresence :: Presence -> String +logPresence (p@Presence { presenceFrom = Just jid }) = unwords + [ "Presence from" + , logJid jid + , show $ extractGitAnnexTag p + ] +logPresence _ = "Presence from unknown" + +logJid :: JID -> String +logJid jid = + let name = T.unpack (buddyName jid) + resource = maybe "" (T.unpack . strResource) (jidResource jid) + in take 1 name ++ show (length name) ++ "/" ++ resource + +logClient :: Client -> String +logClient (Client jid) = logJid jid + +{- Decodes an XMPP stanza into one or more events. -} +decodeStanza :: JID -> ReceivedStanza -> [XMPPEvent] +decodeStanza selfjid s@(ReceivedPresence p) + | presenceType p == PresenceError = [ProtocolError s] + | isNothing (presenceFrom p) = [Ignorable s] + | presenceFrom p == Just selfjid = [Ignorable s] + | otherwise = maybe [PresenceMessage p] decode (gitAnnexTagInfo p) + where + decode i + | tagAttr i == pushAttr = impliedp $ GotNetMessage $ NotifyPush $ + decodePushNotification (tagValue i) + | tagAttr i == queryAttr = impliedp $ GotNetMessage QueryPresence + | otherwise = [Unknown s] + {- Things sent via presence imply a presence message, + - along with their real meaning. -} + impliedp v = [PresenceMessage p, v] +decodeStanza selfjid s@(ReceivedMessage m) + | isNothing (messageFrom m) = [Ignorable s] + | messageFrom m == Just selfjid = [Ignorable s] + | messageType m == MessageError = [ProtocolError s] + | otherwise = [fromMaybe (Unknown s) (GotNetMessage <$> decodeMessage m)] +decodeStanza _ s = [Unknown s] + +{- Waits for a NetMessager message to be sent, and relays it to XMPP. + - + - Chat messages must be directed to specific clients, not a base + - account JID, due to git-annex clients using a negative presence priority. + - PairingNotification messages are always directed at specific + - clients, but Pushing messages are sometimes not, and need to be exploded + - out to specific clients. + - + - Important messages, not directed at any specific client, + - are cached to be sent later when additional clients connect. + -} +relayNetMessage :: JID -> Assistant (XMPP ()) +relayNetMessage selfjid = do + msg <- waitNetMessage + debug ["sending:", logNetMessage msg] + a1 <- handleImportant msg + a2 <- convert msg + return (a1 >> a2) + where + handleImportant msg = case parseJID =<< isImportantNetMessage msg of + Just tojid + | tojid == baseJID tojid -> do + storeImportantNetMessage msg (formatJID tojid) $ + \c -> (baseJID <$> parseJID c) == Just tojid + return $ putStanza presenceQuery + _ -> return noop + convert (Pushing c pushstage) = withOtherClient selfjid c $ \tojid -> + if tojid == baseJID tojid + then do + clients <- maybe [] (S.toList . buddyAssistants) + <$> getBuddy (genBuddyKey tojid) <<~ buddyList + debug ["exploded undirected message to clients", unwords $ map logClient clients] + return $ forM_ clients $ \(Client jid) -> + putStanza $ pushMessage pushstage jid selfjid + else do + debug ["to client:", logJid tojid] + return $ putStanza $ pushMessage pushstage tojid selfjid + convert msg = convertNetMsg msg selfjid + +{- Converts a NetMessage to an XMPP action. -} +convertNetMsg :: NetMessage -> JID -> Assistant (XMPP ()) +convertNetMsg msg selfjid = convert msg + where + convert (NotifyPush us) = return $ putStanza $ pushNotification us + convert QueryPresence = return $ putStanza presenceQuery + convert (PairingNotification stage c u) = withOtherClient selfjid c $ \tojid -> do + changeBuddyPairing tojid True + return $ putStanza $ pairingNotification stage u tojid selfjid + convert (Pushing c pushstage) = withOtherClient selfjid c $ \tojid -> + return $ putStanza $ pushMessage pushstage tojid selfjid + +withOtherClient :: JID -> ClientID -> (JID -> Assistant (XMPP ())) -> Assistant (XMPP ()) +withOtherClient selfjid c a = case parseJID c of + Nothing -> return noop + Just tojid + | tojid == selfjid -> return noop + | otherwise -> a tojid + +withClient :: ClientID -> (JID -> XMPP ()) -> XMPP () +withClient c a = maybe noop a $ parseJID c + +{- Returns an IO action that runs a XMPP action in a separate thread, + - using a session to allow it to access the same XMPP client. -} +xmppSession :: XMPP () -> XMPP (IO ()) +xmppSession a = do + s <- getSession + return $ void $ runXMPP s a + +{- We only pull from one remote out of the set listed in the push + - notification, as an optimisation. + - + - Note that it might be possible (though very unlikely) for the push + - notification to take a while to be sent, and multiple pushes happen + - before it is sent, so it includes multiple remotes that were pushed + - to at different times. + - + - It could then be the case that the remote we choose had the earlier + - push sent to it, but then failed to get the later push, and so is not + - fully up-to-date. If that happens, the pushRetryThread will come along + - and retry the push, and we'll get another notification once it succeeds, + - and pull again. -} +pull :: [UUID] -> Assistant () +pull [] = noop +pull us = do + rs <- filter matching . syncGitRemotes <$> getDaemonStatus + debug $ "push notification for" : map (fromUUID . Remote.uuid ) rs + pullone rs =<< liftAnnex (inRepo Git.Branch.current) + where + matching r = Remote.uuid r `S.member` s + s = S.fromList us + + pullone [] _ = noop + pullone (r:rs) branch = + unlessM (null . fst <$> manualPull branch [r]) $ + pullone rs branch + +{- PairReq from another client using our JID is automatically + - accepted. This is so pairing devices all using the same XMPP + - account works without confirmations. + - + - Also, autoaccept PairReq from the same JID of any repo we've + - already paired with, as long as the UUID in the PairReq is + - one we know about. +-} +pairMsgReceived :: UrlRenderer -> PairStage -> UUID -> JID -> JID -> Assistant () +pairMsgReceived urlrenderer PairReq theiruuid selfjid theirjid + | baseJID selfjid == baseJID theirjid = autoaccept + | otherwise = do + knownjids <- mapMaybe (parseJID . getXMPPClientID) + . filter isXMPPRemote . syncRemotes <$> getDaemonStatus + um <- liftAnnex uuidMap + if elem (baseJID theirjid) knownjids && M.member theiruuid um + then autoaccept + else showalert + + where + autoaccept = do + selfuuid <- liftAnnex getUUID + sendNetMessage $ + PairingNotification PairAck (formatJID theirjid) selfuuid + finishXMPPPairing theirjid theiruuid + -- Show an alert to let the user decide if they want to pair. + showalert = do + button <- mkAlertButton True (T.pack "Respond") urlrenderer $ + ConfirmXMPPPairFriendR $ + PairKey theiruuid $ formatJID theirjid + void $ addAlert $ pairRequestReceivedAlert + (T.unpack $ buddyName theirjid) + button + +{- PairAck must come from one of the buddies we are pairing with; + - don't pair with just anyone. -} +pairMsgReceived _ PairAck theiruuid _selfjid theirjid = + whenM (isBuddyPairing theirjid) $ do + changeBuddyPairing theirjid False + selfuuid <- liftAnnex getUUID + sendNetMessage $ + PairingNotification PairDone (formatJID theirjid) selfuuid + finishXMPPPairing theirjid theiruuid + +pairMsgReceived _ PairDone _theiruuid _selfjid theirjid = + changeBuddyPairing theirjid False + +isBuddyPairing :: JID -> Assistant Bool +isBuddyPairing jid = maybe False buddyPairing <$> + getBuddy (genBuddyKey jid) <<~ buddyList + +changeBuddyPairing :: JID -> Bool -> Assistant () +changeBuddyPairing jid ispairing = + updateBuddyList (M.adjust set key) <<~ buddyList + where + key = genBuddyKey jid + set b = b { buddyPairing = ispairing } diff --git a/Assistant/Threads/XMPPPusher.hs b/Assistant/Threads/XMPPPusher.hs new file mode 100644 index 0000000000..30c91c7f09 --- /dev/null +++ b/Assistant/Threads/XMPPPusher.hs @@ -0,0 +1,81 @@ +{- git-annex XMPP pusher threads + - + - This is a pair of threads. One handles git send-pack, + - and the other git receive-pack. Each thread can be running at most + - one such operation at a time. + - + - Why not use a single thread? Consider two clients A and B. + - If both decide to run a receive-pack at the same time to the other, + - they would deadlock with only one thread. For larger numbers of + - clients, the two threads are also sufficient. + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Threads.XMPPPusher where + +import Assistant.Common +import Assistant.NetMessager +import Assistant.Types.NetMessager +import Assistant.WebApp (UrlRenderer) +import Assistant.WebApp.Configurators.XMPP (checkCloudRepos) +import Assistant.XMPP.Git + +import Control.Exception as E + +xmppSendPackThread :: UrlRenderer -> NamedThread +xmppSendPackThread = pusherThread "XMPPSendPack" SendPack + +xmppReceivePackThread :: UrlRenderer -> NamedThread +xmppReceivePackThread = pusherThread "XMPPReceivePack" ReceivePack + +pusherThread :: String -> PushSide -> UrlRenderer -> NamedThread +pusherThread threadname side urlrenderer = namedThread threadname $ go Nothing + where + go lastpushedto = do + msg <- waitPushInitiation side $ selectNextPush lastpushedto + debug ["started running push", logNetMessage msg] + + runpush <- asIO $ runPush checker msg + r <- liftIO (E.try runpush :: IO (Either SomeException (Maybe ClientID))) + let successful = case r of + Right (Just _) -> True + _ -> False + + {- Empty the inbox, because stuff may have + - been left in it if the push failed. -} + let justpushedto = getclient msg + maybe noop (`emptyInbox` side) justpushedto + + debug ["finished running push", logNetMessage msg, show successful] + go $ if successful then justpushedto else lastpushedto + + checker = checkCloudRepos urlrenderer + + getclient (Pushing cid _) = Just cid + getclient _ = Nothing + +{- Select the next push to run from the queue. + - The queue cannot be empty! + - + - We prefer to select the most recently added push, because its requestor + - is more likely to still be connected. + - + - When passed the ID of a client we just pushed to, we prefer to not + - immediately push again to that same client. This avoids one client + - drowing out others. So pushes from the client we just pushed to are + - relocated to the beginning of the list, to be processed later. + -} +selectNextPush :: Maybe ClientID -> [NetMessage] -> (NetMessage, [NetMessage]) +selectNextPush _ (m:[]) = (m, []) -- common case +selectNextPush _ [] = error "selectNextPush: empty list" +selectNextPush lastpushedto l = go [] l + where + go (r:ejected) [] = (r, ejected) + go rejected (m:ms) = case m of + (Pushing clientid _) + | Just clientid /= lastpushedto -> (m, rejected ++ ms) + _ -> go (m:rejected) ms + go [] [] = undefined diff --git a/Assistant/TransferQueue.hs b/Assistant/TransferQueue.hs new file mode 100644 index 0000000000..f94e73c2b2 --- /dev/null +++ b/Assistant/TransferQueue.hs @@ -0,0 +1,223 @@ +{- git-annex assistant pending transfer queue + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.TransferQueue ( + TransferQueue, + Schedule(..), + newTransferQueue, + getTransferQueue, + queueTransfers, + queueTransfersMatching, + queueDeferredDownloads, + queueTransfer, + queueTransferAt, + queueTransferWhenSmall, + getNextTransfer, + getMatchingTransfers, + dequeueTransfers, +) where + +import Assistant.Common +import Assistant.DaemonStatus +import Assistant.Types.TransferQueue +import Logs.Transfer +import Types.Remote +import qualified Remote +import qualified Types.Remote as Remote +import Annex.Wanted +import Utility.TList + +import Control.Concurrent.STM +import qualified Data.Map as M +import qualified Data.Set as S + +type Reason = String + +{- Reads the queue's content without blocking or changing it. -} +getTransferQueue :: Assistant [(Transfer, TransferInfo)] +getTransferQueue = (atomically . readTList . queuelist) <<~ transferQueue + +stubInfo :: AssociatedFile -> Remote -> TransferInfo +stubInfo f r = stubTransferInfo + { transferRemote = Just r + , associatedFile = f + } + +{- Adds transfers to queue for some of the known remotes. + - Honors preferred content settings, only transferring wanted files. -} +queueTransfers :: Reason -> Schedule -> Key -> AssociatedFile -> Direction -> Assistant () +queueTransfers = queueTransfersMatching (const True) + +{- Adds transfers to queue for some of the known remotes, that match a + - condition. Honors preferred content settings. -} +queueTransfersMatching :: (UUID -> Bool) -> Reason -> Schedule -> Key -> AssociatedFile -> Direction -> Assistant () +queueTransfersMatching matching reason schedule k f direction + | direction == Download = whenM (liftAnnex $ wantGet True f) go + | otherwise = go + where + go = do + + rs <- liftAnnex . selectremotes + =<< syncDataRemotes <$> getDaemonStatus + let matchingrs = filter (matching . Remote.uuid) rs + if null matchingrs + then defer + else forM_ matchingrs $ \r -> + enqueue reason schedule (gentransfer r) (stubInfo f r) + selectremotes rs + {- Queue downloads from all remotes that + - have the key. The list of remotes is ordered with + - cheapest first. More expensive ones will only be tried + - if downloading from a cheap one fails. -} + | direction == Download = do + s <- locs + return $ filter (inset s) rs + {- Upload to all remotes that want the content and don't + - already have it. -} + | otherwise = do + s <- locs + filterM (wantSend True f . Remote.uuid) $ + filter (\r -> not (inset s r || Remote.readonly r)) rs + where + locs = S.fromList <$> Remote.keyLocations k + inset s r = S.member (Remote.uuid r) s + gentransfer r = Transfer + { transferDirection = direction + , transferKey = k + , transferUUID = Remote.uuid r + } + defer + {- Defer this download, as no known remote has the key. -} + | direction == Download = do + q <- getAssistant transferQueue + void $ liftIO $ atomically $ + consTList (deferreddownloads q) (k, f) + | otherwise = noop + +{- Queues any deferred downloads that can now be accomplished, leaving + - any others in the list to try again later. -} +queueDeferredDownloads :: Reason -> Schedule -> Assistant () +queueDeferredDownloads reason schedule = do + q <- getAssistant transferQueue + l <- liftIO $ atomically $ readTList (deferreddownloads q) + rs <- syncDataRemotes <$> getDaemonStatus + left <- filterM (queue rs) l + unless (null left) $ + liftIO $ atomically $ appendTList (deferreddownloads q) left + where + queue rs (k, f) = do + uuids <- liftAnnex $ Remote.keyLocations k + let sources = filter (\r -> uuid r `elem` uuids) rs + unless (null sources) $ + forM_ sources $ \r -> + enqueue reason schedule + (gentransfer r) (stubInfo f r) + return $ null sources + where + gentransfer r = Transfer + { transferDirection = Download + , transferKey = k + , transferUUID = Remote.uuid r + } + +enqueue :: Reason -> Schedule -> Transfer -> TransferInfo -> Assistant () +enqueue reason schedule t info + | schedule == Next = go consTList + | otherwise = go snocTList + where + go modlist = whenM (add modlist) $ do + debug [ "queued", describeTransfer t info, ": " ++ reason ] + notifyTransfer + add modlist = do + q <- getAssistant transferQueue + dstatus <- getAssistant daemonStatusHandle + liftIO $ atomically $ ifM (checkRunningTransferSTM dstatus t) + ( return False + , do + l <- readTList (queuelist q) + if (t `notElem` map fst l) + then do + void $ modifyTVar' (queuesize q) succ + void $ modlist (queuelist q) (t, info) + return True + else return False + ) + +{- Adds a transfer to the queue. -} +queueTransfer :: Reason -> Schedule -> AssociatedFile -> Transfer -> Remote -> Assistant () +queueTransfer reason schedule f t remote = + enqueue reason schedule t (stubInfo f remote) + +{- Blocks until the queue is no larger than a given size, and then adds a + - transfer to the queue. -} +queueTransferAt :: Int -> Reason -> Schedule -> AssociatedFile -> Transfer -> Remote -> Assistant () +queueTransferAt wantsz reason schedule f t remote = do + q <- getAssistant transferQueue + liftIO $ atomically $ do + sz <- readTVar (queuesize q) + unless (sz <= wantsz) $ + retry -- blocks until queuesize changes + enqueue reason schedule t (stubInfo f remote) + +queueTransferWhenSmall :: Reason -> AssociatedFile -> Transfer -> Remote -> Assistant () +queueTransferWhenSmall reason = queueTransferAt 10 reason Later + +{- Blocks until a pending transfer is available in the queue, + - and removes it. + - + - Checks that it's acceptable, before adding it to the + - currentTransfers map. If it's not acceptable, it's discarded. + - + - This is done in a single STM transaction, so there is no window + - where an observer sees an inconsistent status. -} +getNextTransfer :: (TransferInfo -> Bool) -> Assistant (Maybe (Transfer, TransferInfo)) +getNextTransfer acceptable = do + q <- getAssistant transferQueue + dstatus <- getAssistant daemonStatusHandle + liftIO $ atomically $ do + sz <- readTVar (queuesize q) + if sz < 1 + then retry -- blocks until queuesize changes + else do + (r@(t,info):rest) <- readTList (queuelist q) + void $ modifyTVar' (queuesize q) pred + setTList (queuelist q) rest + if acceptable info + then do + adjustTransfersSTM dstatus $ + M.insertWith' const t info + return $ Just r + else return Nothing + +{- Moves transfers matching a condition from the queue, to the + - currentTransfers map. -} +getMatchingTransfers :: (Transfer -> Bool) -> Assistant [(Transfer, TransferInfo)] +getMatchingTransfers c = do + q <- getAssistant transferQueue + dstatus <- getAssistant daemonStatusHandle + liftIO $ atomically $ do + ts <- dequeueTransfersSTM q c + unless (null ts) $ + adjustTransfersSTM dstatus $ \m -> M.union m $ M.fromList ts + return ts + +{- Removes transfers matching a condition from the queue, and returns the + - removed transfers. -} +dequeueTransfers :: (Transfer -> Bool) -> Assistant [(Transfer, TransferInfo)] +dequeueTransfers c = do + q <- getAssistant transferQueue + removed <- liftIO $ atomically $ dequeueTransfersSTM q c + unless (null removed) $ + notifyTransfer + return removed + +dequeueTransfersSTM :: TransferQueue -> (Transfer -> Bool) -> STM [(Transfer, TransferInfo)] +dequeueTransfersSTM q c = do + (removed, ts) <- partition (c . fst) <$> readTList (queuelist q) + void $ writeTVar (queuesize q) (length ts) + setTList (queuelist q) ts + return removed diff --git a/Assistant/TransferSlots.hs b/Assistant/TransferSlots.hs new file mode 100644 index 0000000000..cb66e845a1 --- /dev/null +++ b/Assistant/TransferSlots.hs @@ -0,0 +1,286 @@ +{- git-annex assistant transfer slots + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Assistant.TransferSlots where + +import Assistant.Common +import Utility.ThreadScheduler +import Assistant.Types.TransferSlots +import Assistant.DaemonStatus +import Assistant.TransferrerPool +import Assistant.Types.TransferrerPool +import Assistant.Types.TransferQueue +import Assistant.TransferQueue +import Assistant.Alert +import Assistant.Alert.Utility +import Assistant.Commits +import Assistant.Drop +import Logs.Transfer +import Logs.Location +import qualified Git +import qualified Remote +import qualified Types.Remote as Remote +import Annex.Content +import Annex.Wanted +import Config.Files + +import qualified Data.Map as M +import qualified Control.Exception as E +import Control.Concurrent +import qualified Control.Concurrent.MSemN as MSemN +#ifndef mingw32_HOST_OS +import System.Posix.Process (getProcessGroupIDOf) +import System.Posix.Signals (signalProcessGroup, sigTERM, sigKILL) +#endif + +type TransferGenerator = Assistant (Maybe (Transfer, TransferInfo, Transferrer -> Assistant ())) + +{- Waits until a transfer slot becomes available, then runs a + - TransferGenerator, and then runs the transfer action in its own thread. + -} +inTransferSlot :: FilePath -> TransferGenerator -> Assistant () +inTransferSlot program gen = do + flip MSemN.wait 1 <<~ transferSlots + runTransferThread program =<< gen + +{- Runs a TransferGenerator, and its transfer action, + - without waiting for a slot to become available. -} +inImmediateTransferSlot :: FilePath -> TransferGenerator -> Assistant () +inImmediateTransferSlot program gen = do + flip MSemN.signal (-1) <<~ transferSlots + runTransferThread program =<< gen + +{- Runs a transfer action, in an already allocated transfer slot. + - Once it finishes, frees the transfer slot. + - + - Note that the action is subject to being killed when the transfer + - is canceled or paused. + - + - A PauseTransfer exception is handled by letting the action be killed, + - then pausing the thread until a ResumeTransfer exception is raised, + - then rerunning the action. + -} +runTransferThread :: FilePath -> Maybe (Transfer, TransferInfo, Transferrer -> Assistant ()) -> Assistant () +runTransferThread _ Nothing = flip MSemN.signal 1 <<~ transferSlots +runTransferThread program (Just (t, info, a)) = do + d <- getAssistant id + aio <- asIO1 a + tid <- liftIO $ forkIO $ runTransferThread' program d aio + updateTransferInfo t $ info { transferTid = Just tid } + +runTransferThread' :: FilePath -> AssistantData -> (Transferrer -> IO ()) -> IO () +runTransferThread' program d run = go + where + go = catchPauseResume $ + withTransferrer program (transferrerPool d) + run + pause = catchPauseResume $ + runEvery (Seconds 86400) noop + {- Note: This must use E.try, rather than E.catch. + - When E.catch is used, and has called go in its exception + - handler, Control.Concurrent.throwTo will block sometimes + - when signaling. Using E.try avoids the problem. -} + catchPauseResume a' = do + r <- E.try a' :: IO (Either E.SomeException ()) + case r of + Left e -> case E.fromException e of + Just PauseTransfer -> pause + Just ResumeTransfer -> go + _ -> done + _ -> done + done = runAssistant d $ + flip MSemN.signal 1 <<~ transferSlots + +{- By the time this is called, the daemonstatus's currentTransfers map should + - already have been updated to include the transfer. -} +genTransfer :: Transfer -> TransferInfo -> TransferGenerator +genTransfer t info = case (transferRemote info, associatedFile info) of + (Just remote, Just file) + | Git.repoIsLocalUnknown (Remote.repo remote) -> do + -- optimisation for removable drives not plugged in + liftAnnex $ recordFailedTransfer t info + void $ removeTransfer t + return Nothing + | otherwise -> ifM (liftAnnex $ shouldTransfer t info) + ( do + debug [ "Transferring:" , describeTransfer t info ] + notifyTransfer + return $ Just (t, info, go remote file) + , do + debug [ "Skipping unnecessary transfer:", + describeTransfer t info ] + void $ removeTransfer t + finishedTransfer t (Just info) + return Nothing + ) + _ -> return Nothing + where + direction = transferDirection t + isdownload = direction == Download + + {- Alerts are only shown for successful transfers. + - Transfers can temporarily fail for many reasons, + - so there's no point in bothering the user about + - those. The assistant should recover. + - + - After a successful upload, handle dropping it from + - here, if desired. In this case, the remote it was + - uploaded to is known to have it. + - + - Also, after a successful transfer, the location + - log has changed. Indicate that a commit has been + - made, in order to queue a push of the git-annex + - branch out to remotes that did not participate + - in the transfer. + - + - If the process failed, it could have crashed, + - so remove the transfer from the list of current + - transfers, just in case it didn't stop + - in a way that lets the TransferWatcher do its + - usual cleanup. However, first check if something else is + - running the transfer, to avoid removing active transfers. + -} + go remote file transferrer = ifM (liftIO $ performTransfer transferrer t $ associatedFile info) + ( do + void $ addAlert $ makeAlertFiller True $ + transferFileAlert direction True file + unless isdownload $ + handleDrops + ("object uploaded to " ++ show remote) + True (transferKey t) + (associatedFile info) + (Just remote) + void recordCommit + , whenM (liftAnnex $ isNothing <$> checkTransfer t) $ + void $ removeTransfer t + ) + +{- Called right before a transfer begins, this is a last chance to avoid + - unnecessary transfers. + - + - For downloads, we obviously don't need to download if the already + - have the object. + - + - Smilarly, for uploads, check if the remote is known to already have + - the object. + - + - Also, uploads get queued to all remotes, in order of cost. + - This may mean, for example, that an object is uploaded over the LAN + - to a locally paired client, and once that upload is done, a more + - expensive transfer remote no longer wants the object. (Since + - all the clients have it already.) So do one last check if this is still + - preferred content. + - + - We'll also do one last preferred content check for downloads. An + - example of a case where this could be needed is if a download is queued + - for a file that gets moved out of an archive directory -- but before + - that download can happen, the file is put back in the archive. + -} +shouldTransfer :: Transfer -> TransferInfo -> Annex Bool +shouldTransfer t info + | transferDirection t == Download = + (not <$> inAnnex key) <&&> wantGet True file + | transferDirection t == Upload = case transferRemote info of + Nothing -> return False + Just r -> notinremote r + <&&> wantSend True file (Remote.uuid r) + | otherwise = return False + where + key = transferKey t + file = associatedFile info + + {- Trust the location log to check if the remote already has + - the key. This avoids a roundtrip to the remote. -} + notinremote r = notElem (Remote.uuid r) <$> loggedLocations key + +{- Queue uploads of files downloaded to us, spreading them + - out to other reachable remotes. + - + - Downloading a file may have caused a remote to not want it; + - so check for drops from remotes. + - + - Uploading a file may cause the local repo, or some other remote to not + - want it; handle that too. + -} +finishedTransfer :: Transfer -> Maybe TransferInfo -> Assistant () +finishedTransfer t (Just info) + | transferDirection t == Download = + whenM (liftAnnex $ inAnnex $ transferKey t) $ do + dodrops False + queueTransfersMatching (/= transferUUID t) + "newly received object" + Later (transferKey t) (associatedFile info) Upload + | otherwise = dodrops True + where + dodrops fromhere = handleDrops + ("drop wanted after " ++ describeTransfer t info) + fromhere (transferKey t) (associatedFile info) Nothing +finishedTransfer _ _ = noop + +{- Pause a running transfer. -} +pauseTransfer :: Transfer -> Assistant () +pauseTransfer = cancelTransfer True + +{- Cancel a running transfer. -} +cancelTransfer :: Bool -> Transfer -> Assistant () +cancelTransfer pause t = do + m <- getCurrentTransfers + unless pause $ + {- remove queued transfer -} + void $ dequeueTransfers $ equivilantTransfer t + {- stop running transfer -} + maybe noop stop (M.lookup t m) + where + stop info = do + {- When there's a thread associated with the + - transfer, it's signaled first, to avoid it + - displaying any alert about the transfer having + - failed when the transfer process is killed. -} + liftIO $ maybe noop signalthread $ transferTid info + liftIO $ maybe noop killproc $ transferPid info + if pause + then void $ alterTransferInfo t $ + \i -> i { transferPaused = True } + else void $ removeTransfer t + signalthread tid + | pause = throwTo tid PauseTransfer + | otherwise = killThread tid + killproc pid = void $ tryIO $ do +#ifndef mingw32_HOST_OS + {- In order to stop helper processes like rsync, + - kill the whole process group of the process + - running the transfer. -} + g <- getProcessGroupIDOf pid + void $ tryIO $ signalProcessGroup sigTERM g + threadDelay 50000 -- 0.05 second grace period + void $ tryIO $ signalProcessGroup sigKILL g +#else + error "TODO: cancelTransfer not implemented on Windows" +#endif + +{- Start or resume a transfer. -} +startTransfer :: Transfer -> Assistant () +startTransfer t = do + m <- getCurrentTransfers + maybe startqueued go (M.lookup t m) + where + go info = maybe (start info) resume $ transferTid info + startqueued = do + is <- map snd <$> getMatchingTransfers (== t) + maybe noop start $ headMaybe is + resume tid = do + alterTransferInfo t $ \i -> i { transferPaused = False } + liftIO $ throwTo tid ResumeTransfer + start info = do + program <- liftIO readProgramFile + inImmediateTransferSlot program $ + genTransfer t info + +getCurrentTransfers :: Assistant TransferMap +getCurrentTransfers = currentTransfers <$> getDaemonStatus diff --git a/Assistant/TransferrerPool.hs b/Assistant/TransferrerPool.hs new file mode 100644 index 0000000000..bb4648731a --- /dev/null +++ b/Assistant/TransferrerPool.hs @@ -0,0 +1,95 @@ +{- A pool of "git-annex transferkeys" processes + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Assistant.TransferrerPool where + +import Assistant.Common +import Assistant.Types.TransferrerPool +import Logs.Transfer + +#ifndef mingw32_HOST_OS +import qualified Command.TransferKeys as T +#endif + +import Control.Concurrent.STM +import System.Process (create_group) +import Control.Exception (throw) +import Control.Concurrent + +{- Runs an action with a Transferrer from the pool. -} +withTransferrer :: FilePath -> TransferrerPool -> (Transferrer -> IO a) -> IO a +withTransferrer program pool a = do + t <- maybe (mkTransferrer program) (checkTransferrer program) + =<< atomically (tryReadTChan pool) + v <- tryNonAsync $ a t + unlessM (putback t) $ + void $ forkIO $ stopTransferrer t + either throw return v + where + putback t = atomically $ ifM (isEmptyTChan pool) + ( do + writeTChan pool t + return True + , return False + ) + +{- 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 +#ifndef mingw32_HOST_OS + T.sendRequest t f (transferrerWrite transferrer) + T.readResponse (transferrerRead transferrer) +#else + error "TODO performTransfer not implemented on Windows" +#endif + +{- Starts a new git-annex transferkeys process, setting up a pipe + - that will be used to communicate with it. -} +mkTransferrer :: FilePath -> IO Transferrer +mkTransferrer program = do +#ifndef mingw32_HOST_OS + (myread, twrite) <- createPipe + (tread, mywrite) <- createPipe + mapM_ (\fd -> setFdOption fd CloseOnExec True) [myread, mywrite] + let params = + [ Param "transferkeys" + , Param "--readfd", Param $ show tread + , Param "--writefd", Param $ show twrite + ] + {- It's put into its own group so that the whole group can be + - killed to stop a transfer. -} + (_, _, _, pid) <- createProcess (proc program $ toCommand params) + { create_group = True } + closeFd twrite + closeFd tread + myreadh <- fdToHandle myread + mywriteh <- fdToHandle mywrite + fileEncoding myreadh + fileEncoding mywriteh + return $ Transferrer + { transferrerRead = myreadh + , transferrerWrite = mywriteh + , transferrerHandle = pid + } +#else + error "TODO mkTransferrer not implemented on Windows" +#endif + +{- Checks if a Transferrer is still running. If not, makes a new one. -} +checkTransferrer :: FilePath -> Transferrer -> IO Transferrer +checkTransferrer program t = maybe (return t) (const $ mkTransferrer program) + =<< getProcessExitCode (transferrerHandle t) + +{- Closing the fds will stop the transferrer. -} +stopTransferrer :: Transferrer -> IO () +stopTransferrer t = do + hClose $ transferrerRead t + hClose $ transferrerWrite t + void $ waitForProcess $ transferrerHandle t diff --git a/Assistant/Types/Alert.hs b/Assistant/Types/Alert.hs new file mode 100644 index 0000000000..e6fbe86d39 --- /dev/null +++ b/Assistant/Types/Alert.hs @@ -0,0 +1,78 @@ +{- git-annex assistant alert types + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Types.Alert where + +import Utility.Tense + +import Data.Text (Text) +import qualified Data.Map as M + +{- Different classes of alerts are displayed differently. -} +data AlertClass = Success | Message | Activity | Warning | Error + deriving (Eq, Ord) + +data AlertPriority = Filler | Low | Medium | High | Pinned + deriving (Eq, Ord) + +{- An alert can have an name, which is used to combine it with other similar + - alerts. -} +data AlertName + = FileAlert TenseChunk + | SanityCheckFixAlert + | WarningAlert String + | PairAlert String + | XMPPNeededAlert + | RemoteRemovalAlert String + | CloudRepoNeededAlert + | SyncAlert + | NotFsckedAlert + | UpgradeAlert + deriving (Eq) + +{- The first alert is the new alert, the second is an old alert. + - Should return a modified version of the old alert. -} +type AlertCombiner = Alert -> Alert -> Maybe Alert + +data Alert = Alert + { alertClass :: AlertClass + , alertHeader :: Maybe TenseText + , alertMessageRender :: Alert -> TenseText + , alertData :: [TenseChunk] + , alertCounter :: Int + , alertBlockDisplay :: Bool + , alertClosable :: Bool + , alertPriority :: AlertPriority + , alertIcon :: Maybe AlertIcon + , alertCombiner :: Maybe AlertCombiner + , alertName :: Maybe AlertName + , alertButtons :: [AlertButton] + } + +data AlertIcon = ActivityIcon | SyncIcon | SuccessIcon | ErrorIcon | InfoIcon | UpgradeIcon | TheCloud + +type AlertMap = M.Map AlertId Alert + +{- Higher AlertId indicates a more recent alert. -} +newtype AlertId = AlertId Integer + deriving (Read, Show, Eq, Ord) + +firstAlertId :: AlertId +firstAlertId = AlertId 0 + +nextAlertId :: AlertId -> AlertId +nextAlertId (AlertId i) = AlertId $ succ i + +{- When clicked, a button always redirects to a URL + - It may also run an IO action in the background, which is useful + - to make the button close or otherwise change the alert. -} +data AlertButton = AlertButton + { buttonLabel :: Text + , buttonUrl :: Text + , buttonAction :: Maybe (AlertId -> IO ()) + , buttonPrimary :: Bool + } diff --git a/Assistant/Types/BranchChange.hs b/Assistant/Types/BranchChange.hs new file mode 100644 index 0000000000..399abee54d --- /dev/null +++ b/Assistant/Types/BranchChange.hs @@ -0,0 +1,19 @@ +{- git-annex assistant git-annex branch change tracking + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Types.BranchChange where + +import Control.Concurrent.MSampleVar +import Common.Annex + +newtype BranchChangeHandle = BranchChangeHandle (MSampleVar ()) + +newBranchChangeHandle :: IO BranchChangeHandle +newBranchChangeHandle = BranchChangeHandle <$> newEmptySV + +fromBranchChangeHandle :: BranchChangeHandle -> MSampleVar () +fromBranchChangeHandle (BranchChangeHandle v) = v diff --git a/Assistant/Types/Buddies.hs b/Assistant/Types/Buddies.hs new file mode 100644 index 0000000000..36d8a4fedc --- /dev/null +++ b/Assistant/Types/Buddies.hs @@ -0,0 +1,80 @@ +{- git-annex assistant buddies + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Assistant.Types.Buddies where + +import Common.Annex + +import qualified Data.Map as M +import Control.Concurrent.STM +import Utility.NotificationBroadcaster +import Data.Text as T + +{- For simplicity, dummy types are defined even when XMPP is disabled. -} +#ifdef WITH_XMPP +import Network.Protocol.XMPP +import Data.Set as S +import Data.Ord + +newtype Client = Client JID + deriving (Eq, Show) + +instance Ord Client where + compare = comparing show + +data Buddy = Buddy + { buddyPresent :: S.Set Client + , buddyAway :: S.Set Client + , buddyAssistants :: S.Set Client + , buddyPairing :: Bool + } +#else +data Buddy = Buddy +#endif + deriving (Eq, Show) + +data BuddyKey = BuddyKey T.Text + deriving (Eq, Ord, Show, Read) + +data PairKey = PairKey UUID T.Text + deriving (Eq, Ord, Show, Read) + +type Buddies = M.Map BuddyKey Buddy + +{- A list of buddies, and a way to notify when it changes. -} +type BuddyList = (TMVar Buddies, NotificationBroadcaster) + +noBuddies :: Buddies +noBuddies = M.empty + +newBuddyList :: IO BuddyList +newBuddyList = (,) + <$> atomically (newTMVar noBuddies) + <*> newNotificationBroadcaster + +getBuddyList :: BuddyList -> IO [Buddy] +getBuddyList (v, _) = M.elems <$> atomically (readTMVar v) + +getBuddy :: BuddyKey -> BuddyList -> IO (Maybe Buddy) +getBuddy k (v, _) = M.lookup k <$> atomically (readTMVar v) + +getBuddyBroadcaster :: BuddyList -> NotificationBroadcaster +getBuddyBroadcaster (_, h) = h + +{- Applies a function to modify the buddy list, and if it's changed, + - sends notifications to any listeners. -} +updateBuddyList :: (Buddies -> Buddies) -> BuddyList -> IO () +updateBuddyList a (v, caster) = do + changed <- atomically $ do + buds <- takeTMVar v + let buds' = a buds + putTMVar v buds' + return $ buds /= buds' + when changed $ + sendNotification caster diff --git a/Assistant/Types/Changes.hs b/Assistant/Types/Changes.hs new file mode 100644 index 0000000000..e8ecc6e48b --- /dev/null +++ b/Assistant/Types/Changes.hs @@ -0,0 +1,77 @@ +{- git-annex assistant change tracking + - + - Copyright 2012-2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Types.Changes where + +import Types.KeySource +import Types.Key +import Utility.TList + +import Control.Concurrent.STM +import Data.Time.Clock + +{- An un-ordered pool of Changes that have been noticed and should be + - staged and committed. Changes will typically be in order, but ordering + - may be lost. In any case, order should not matter, as any given Change + - may later be reverted by a later Change (ie, a file is added and then + - deleted). Code that processes the changes needs to deal with such + - scenarios. + -} +type ChangePool = TList Change + +newChangePool :: IO ChangePool +newChangePool = atomically newTList + +data Change + = Change + { changeTime :: UTCTime + , _changeFile :: FilePath + , changeInfo :: ChangeInfo + } + | PendingAddChange + { changeTime ::UTCTime + , _changeFile :: FilePath + } + | InProcessAddChange + { changeTime ::UTCTime + , keySource :: KeySource + } + deriving (Show) + +data ChangeInfo = AddKeyChange Key | AddFileChange | LinkChange (Maybe Key) | RmChange + deriving (Show, Eq, Ord) + +changeInfoKey :: ChangeInfo -> Maybe Key +changeInfoKey (AddKeyChange k) = Just k +changeInfoKey (LinkChange (Just k)) = Just k +changeInfoKey _ = Nothing + +changeFile :: Change -> FilePath +changeFile (Change _ f _) = f +changeFile (PendingAddChange _ f) = f +changeFile (InProcessAddChange _ ks) = keyFilename ks + +isPendingAddChange :: Change -> Bool +isPendingAddChange (PendingAddChange {}) = True +isPendingAddChange _ = False + +isInProcessAddChange :: Change -> Bool +isInProcessAddChange (InProcessAddChange {}) = True +isInProcessAddChange _ = False + +retryChange :: Change -> Change +retryChange (InProcessAddChange time ks) = + PendingAddChange time (keyFilename ks) +retryChange c = c + +finishedChange :: Change -> Key -> Change +finishedChange c@(InProcessAddChange { keySource = ks }) k = Change + { changeTime = changeTime c + , _changeFile = keyFilename ks + , changeInfo = AddKeyChange k + } +finishedChange c _ = c diff --git a/Assistant/Types/Commits.hs b/Assistant/Types/Commits.hs new file mode 100644 index 0000000000..500faa9011 --- /dev/null +++ b/Assistant/Types/Commits.hs @@ -0,0 +1,19 @@ +{- git-annex assistant commit tracking + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Types.Commits where + +import Utility.TList + +import Control.Concurrent.STM + +type CommitChan = TList Commit + +data Commit = Commit + +newCommitChan :: IO CommitChan +newCommitChan = atomically newTList diff --git a/Assistant/Types/DaemonStatus.hs b/Assistant/Types/DaemonStatus.hs new file mode 100644 index 0000000000..a618c700d7 --- /dev/null +++ b/Assistant/Types/DaemonStatus.hs @@ -0,0 +1,119 @@ +{- git-annex assistant daemon status + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Types.DaemonStatus where + +import Common.Annex +import Assistant.Pairing +import Utility.NotificationBroadcaster +import Logs.Transfer +import Assistant.Types.ThreadName +import Assistant.Types.NetMessager +import Assistant.Types.Alert +import Utility.Url + +import Control.Concurrent.STM +import Control.Concurrent.MVar +import Control.Concurrent.Async +import Data.Time.Clock.POSIX +import qualified Data.Map as M +import qualified Data.Set as S + +data DaemonStatus = DaemonStatus + -- All the named threads that comprise the daemon, + -- and actions to run to restart them. + { startedThreads :: M.Map ThreadName (Async (), IO ()) + -- False when the daemon is performing its startup scan + , scanComplete :: Bool + -- True when all files should be restaged. + , forceRestage :: Bool + -- Time when a previous process of the daemon was running ok + , lastRunning :: Maybe POSIXTime + -- True when the daily sanity checker is running + , sanityCheckRunning :: Bool + -- Last time the daily sanity checker ran + , lastSanityCheck :: Maybe POSIXTime + -- True when a scan for file transfers is running + , transferScanRunning :: Bool + -- Currently running file content transfers + , currentTransfers :: TransferMap + -- Messages to display to the user. + , alertMap :: AlertMap + , lastAlertId :: AlertId + -- Ordered list of all remotes that can be synced with + , syncRemotes :: [Remote] + -- Ordered list of remotes to sync git with + , syncGitRemotes :: [Remote] + -- Ordered list of remotes to sync data with + , syncDataRemotes :: [Remote] + -- Are we syncing to any cloud remotes? + , syncingToCloudRemote :: Bool + -- List of uuids of remotes that we may have gotten out of sync with. + , desynced :: S.Set UUID + -- Pairing request that is in progress. + , pairingInProgress :: Maybe PairingInProgress + -- Broadcasts notifications about all changes to the DaemonStatus. + , changeNotifier :: NotificationBroadcaster + -- Broadcasts notifications when queued or current transfers change. + , transferNotifier :: NotificationBroadcaster + -- Broadcasts notifications when there's a change to the alerts. + , alertNotifier :: NotificationBroadcaster + -- Broadcasts notifications when the syncRemotes change. + , syncRemotesNotifier :: NotificationBroadcaster + -- Broadcasts notifications when the scheduleLog changes. + , scheduleLogNotifier :: NotificationBroadcaster + -- Broadcasts a notification once the startup sanity check has run. + , startupSanityCheckNotifier :: NotificationBroadcaster + -- Broadcasts notifications when the network is connected. + , networkConnectedNotifier :: NotificationBroadcaster + -- Broadcasts notifications when a global redirect is needed. + , globalRedirNotifier :: NotificationBroadcaster + , globalRedirUrl :: Maybe URLString + -- Actions to run after a Key is transferred. + , transferHook :: M.Map Key (Transfer -> IO ()) + -- When the XMPP client is connected, this will contain the XMPP + -- address. + , xmppClientID :: Maybe ClientID + -- MVars to signal when a remote gets connected. + , connectRemoteNotifiers :: M.Map UUID [MVar ()] + } + +type TransferMap = M.Map Transfer TransferInfo + +{- This TMVar is never left empty, so accessing it will never block. -} +type DaemonStatusHandle = TMVar DaemonStatus + +newDaemonStatus :: IO DaemonStatus +newDaemonStatus = DaemonStatus + <$> pure M.empty + <*> pure False + <*> pure False + <*> pure Nothing + <*> pure False + <*> pure Nothing + <*> pure False + <*> pure M.empty + <*> pure M.empty + <*> pure firstAlertId + <*> pure [] + <*> pure [] + <*> pure [] + <*> pure False + <*> pure S.empty + <*> pure Nothing + <*> newNotificationBroadcaster + <*> newNotificationBroadcaster + <*> newNotificationBroadcaster + <*> newNotificationBroadcaster + <*> newNotificationBroadcaster + <*> newNotificationBroadcaster + <*> newNotificationBroadcaster + <*> newNotificationBroadcaster + <*> pure Nothing + <*> pure M.empty + <*> pure Nothing + <*> pure M.empty diff --git a/Assistant/Types/NamedThread.hs b/Assistant/Types/NamedThread.hs new file mode 100644 index 0000000000..5dd1364ad2 --- /dev/null +++ b/Assistant/Types/NamedThread.hs @@ -0,0 +1,21 @@ +{- named threads + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Types.NamedThread where + +import Assistant.Monad +import Assistant.Types.ThreadName + +{- Information about a named thread that can be run. -} +data NamedThread = NamedThread Bool ThreadName (Assistant ()) + +namedThread :: String -> Assistant () -> NamedThread +namedThread = NamedThread True . ThreadName + +{- A named thread that can start running before the startup sanity check. -} +namedThreadUnchecked :: String -> Assistant () -> NamedThread +namedThreadUnchecked = NamedThread False . ThreadName diff --git a/Assistant/Types/NetMessager.hs b/Assistant/Types/NetMessager.hs new file mode 100644 index 0000000000..0af262e9a2 --- /dev/null +++ b/Assistant/Types/NetMessager.hs @@ -0,0 +1,155 @@ +{- git-annex assistant out of band network messager types + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Types.NetMessager where + +import Common.Annex +import Assistant.Pairing +import Git.Types + +import qualified Data.Text 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. -} +data NetMessage + -- indicate that pushes have been made to the repos with these uuids + = NotifyPush [UUID] + -- requests other clients to inform us of their presence + | QueryPresence + -- notification about a stage in the pairing process, + -- involving a client, and a UUID. + | PairingNotification PairStage ClientID UUID + -- used for git push over the network messager + | Pushing ClientID PushStage + deriving (Show, Eq, Ord) + +{- Something used to identify the client, or clients to send the message to. -} +type ClientID = Text + +data PushStage + -- indicates that we have data to push over the out of band network + = CanPush UUID [Sha] + -- request that a git push be sent over the out of band network + | PushRequest UUID + -- indicates that a push is starting + | StartingPush UUID + -- a chunk of output of git receive-pack + | ReceivePackOutput SequenceNum ByteString + -- a chuck of output of git send-pack + | SendPackOutput SequenceNum ByteString + -- sent when git receive-pack exits, with its exit code + | ReceivePackDone ExitCode + deriving (Show, Eq, Ord) + +{- A sequence number. Incremented by one per packet in a sequence, + - starting with 1 for the first packet. 0 means sequence numbers are + - not being used. -} +type SequenceNum = Int + +{- NetMessages that are important (and small), and should be stored to be + - resent when new clients are seen. -} +isImportantNetMessage :: NetMessage -> Maybe ClientID +isImportantNetMessage (Pushing c (CanPush _ _)) = Just c +isImportantNetMessage (Pushing c (PushRequest _)) = Just c +isImportantNetMessage _ = Nothing + +{- Checks if two important NetMessages are equivilant. + - That is to say, assuming they were sent to the same client, + - would it do the same thing for one as for the other? -} +equivilantImportantNetMessages :: NetMessage -> NetMessage -> Bool +equivilantImportantNetMessages (Pushing _ (CanPush _ _)) (Pushing _ (CanPush _ _)) = True +equivilantImportantNetMessages (Pushing _ (PushRequest _)) (Pushing _ (PushRequest _)) = True +equivilantImportantNetMessages _ _ = False + +readdressNetMessage :: NetMessage -> ClientID -> NetMessage +readdressNetMessage (PairingNotification stage _ uuid) c = PairingNotification stage c uuid +readdressNetMessage (Pushing _ stage) c = Pushing c stage +readdressNetMessage m _ = m + +{- Convert a NetMessage to something that can be logged. -} +logNetMessage :: NetMessage -> String +logNetMessage (Pushing c stage) = show $ Pushing (logClientID c) $ + case stage of + ReceivePackOutput n _ -> ReceivePackOutput n elided + SendPackOutput n _ -> SendPackOutput n elided + s -> s + where + elided = B8.pack "" +logNetMessage (PairingNotification stage c uuid) = + show $ PairingNotification stage (logClientID c) uuid +logNetMessage m = show m + +logClientID :: ClientID -> ClientID +logClientID c = T.concat [T.take 1 c, T.pack $ show $ T.length c] + +{- Things that initiate either side of a push, but do not actually send data. -} +isPushInitiation :: PushStage -> Bool +isPushInitiation (PushRequest _) = True +isPushInitiation (StartingPush _) = True +isPushInitiation _ = False + +isPushNotice :: PushStage -> Bool +isPushNotice (CanPush _ _) = True +isPushNotice _ = False + +data PushSide = SendPack | ReceivePack + deriving (Eq, Ord, Show) + +pushDestinationSide :: PushStage -> PushSide +pushDestinationSide (CanPush _ _) = ReceivePack +pushDestinationSide (PushRequest _) = SendPack +pushDestinationSide (StartingPush _) = ReceivePack +pushDestinationSide (ReceivePackOutput _ _) = SendPack +pushDestinationSide (SendPackOutput _ _) = ReceivePack +pushDestinationSide (ReceivePackDone _) = SendPack + +type SideMap a = PushSide -> a + +mkSideMap :: STM a -> IO (SideMap a) +mkSideMap gen = do + (sp, rp) <- atomically $ (,) <$> gen <*> gen + return $ lookupside sp rp + where + lookupside sp _ SendPack = sp + lookupside _ rp ReceivePack = rp + +getSide :: PushSide -> SideMap a -> a +getSide side m = m side + +type Inboxes = TVar (M.Map ClientID (Int, D.DList NetMessage)) + +data NetMessager = NetMessager + -- outgoing messages + { netMessages :: TChan NetMessage + -- important messages for each client + , importantNetMessages :: TMVar (M.Map ClientID (S.Set NetMessage)) + -- important messages that are believed to have been sent to a client + , sentImportantNetMessages :: TMVar (M.Map ClientID (S.Set NetMessage)) + -- write to this to restart the net messager + , netMessagerRestart :: MSampleVar () + -- queue of incoming messages that request the initiation of pushes + , netMessagerPushInitiations :: SideMap (TMVar [NetMessage]) + -- incoming messages containing data for a running + -- (or not yet started) push + , netMessagerInboxes :: SideMap Inboxes + } + +newNetMessager :: IO NetMessager +newNetMessager = NetMessager + <$> atomically newTChan + <*> atomically (newTMVar M.empty) + <*> atomically (newTMVar M.empty) + <*> newEmptySV + <*> mkSideMap newEmptyTMVar + <*> mkSideMap (newTVar M.empty) diff --git a/Assistant/Types/Pushes.hs b/Assistant/Types/Pushes.hs new file mode 100644 index 0000000000..99e0ee1628 --- /dev/null +++ b/Assistant/Types/Pushes.hs @@ -0,0 +1,24 @@ +{- git-annex assistant push tracking + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Types.Pushes where + +import Common.Annex + +import Control.Concurrent.STM +import Data.Time.Clock +import qualified Data.Map as M + +{- Track the most recent push failure for each remote. -} +type PushMap = M.Map Remote UTCTime +type FailedPushMap = TMVar PushMap + +{- The TMVar starts empty, and is left empty when there are no + - failed pushes. This way we can block until there are some failed pushes. + -} +newFailedPushMap :: IO FailedPushMap +newFailedPushMap = atomically newEmptyTMVar diff --git a/Assistant/Types/RepoProblem.hs b/Assistant/Types/RepoProblem.hs new file mode 100644 index 0000000000..ece5a52868 --- /dev/null +++ b/Assistant/Types/RepoProblem.hs @@ -0,0 +1,28 @@ +{- git-annex assistant repository problem tracking + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Types.RepoProblem where + +import Types +import Utility.TList + +import Control.Concurrent.STM +import Data.Function + +data RepoProblem = RepoProblem + { problemUUID :: UUID + , afterFix :: IO () + } + +{- The afterFix actions are assumed to all be equivilant. -} +sameRepoProblem :: RepoProblem -> RepoProblem -> Bool +sameRepoProblem = (==) `on` problemUUID + +type RepoProblemChan = TList RepoProblem + +newRepoProblemChan :: IO RepoProblemChan +newRepoProblemChan = atomically newTList diff --git a/Assistant/Types/ScanRemotes.hs b/Assistant/Types/ScanRemotes.hs new file mode 100644 index 0000000000..8219f9baf1 --- /dev/null +++ b/Assistant/Types/ScanRemotes.hs @@ -0,0 +1,25 @@ +{- git-annex assistant remotes needing scanning + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Types.ScanRemotes where + +import Common.Annex + +import Control.Concurrent.STM +import qualified Data.Map as M + +data ScanInfo = ScanInfo + { scanPriority :: Float + , fullScan :: Bool + } + +type ScanRemoteMap = TMVar (M.Map Remote ScanInfo) + +{- The TMVar starts empty, and is left empty when there are no remotes + - to scan. -} +newScanRemoteMap :: IO ScanRemoteMap +newScanRemoteMap = atomically newEmptyTMVar diff --git a/Assistant/Types/ThreadName.hs b/Assistant/Types/ThreadName.hs new file mode 100644 index 0000000000..c8d264a381 --- /dev/null +++ b/Assistant/Types/ThreadName.hs @@ -0,0 +1,14 @@ +{- name of a thread + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Types.ThreadName where + +newtype ThreadName = ThreadName String + deriving (Eq, Read, Show, Ord) + +fromThreadName :: ThreadName -> String +fromThreadName (ThreadName n) = n diff --git a/Assistant/Types/ThreadedMonad.hs b/Assistant/Types/ThreadedMonad.hs new file mode 100644 index 0000000000..1a2aa7eb7f --- /dev/null +++ b/Assistant/Types/ThreadedMonad.hs @@ -0,0 +1,38 @@ +{- making the Annex monad available across threads + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Types.ThreadedMonad where + +import Common.Annex +import qualified Annex + +import Control.Concurrent +import Data.Tuple + +{- The Annex state is stored in a MVar, so that threaded actions can access + - it. -} +type ThreadState = MVar Annex.AnnexState + +{- Stores the Annex state in a MVar. + - + - Once the action is finished, retrieves the state from the MVar. + -} +withThreadState :: (ThreadState -> Annex a) -> Annex a +withThreadState a = do + state <- Annex.getState id + mvar <- liftIO $ newMVar state + r <- a mvar + newstate <- liftIO $ takeMVar mvar + Annex.changeState (const newstate) + return r + +{- Runs an Annex action, using the state from the MVar. + - + - This serializes calls by threads; only one thread can run in Annex at a + - time. -} +runThreadState :: ThreadState -> Annex a -> IO a +runThreadState mvar a = modifyMVar mvar $ \state -> swap <$> Annex.run state a diff --git a/Assistant/Types/TransferQueue.hs b/Assistant/Types/TransferQueue.hs new file mode 100644 index 0000000000..e4bf2ae922 --- /dev/null +++ b/Assistant/Types/TransferQueue.hs @@ -0,0 +1,29 @@ +{- git-annex assistant pending transfer queue + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Types.TransferQueue where + +import Common.Annex +import Logs.Transfer + +import Control.Concurrent.STM +import Utility.TList + +data TransferQueue = TransferQueue + { queuesize :: TVar Int + , queuelist :: TList (Transfer, TransferInfo) + , deferreddownloads :: TList (Key, AssociatedFile) + } + +data Schedule = Next | Later + deriving (Eq) + +newTransferQueue :: IO TransferQueue +newTransferQueue = atomically $ TransferQueue + <$> newTVar 0 + <*> newTList + <*> newTList diff --git a/Assistant/Types/TransferSlots.hs b/Assistant/Types/TransferSlots.hs new file mode 100644 index 0000000000..5140995a37 --- /dev/null +++ b/Assistant/Types/TransferSlots.hs @@ -0,0 +1,34 @@ +{- git-annex assistant transfer slots + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE DeriveDataTypeable #-} + +module Assistant.Types.TransferSlots where + +import qualified Control.Exception as E +import qualified Control.Concurrent.MSemN as MSemN +import Data.Typeable + +type TransferSlots = MSemN.MSemN Int + +{- A special exception that can be thrown to pause or resume a transfer, while + - keeping its slot in use. -} +data TransferException = PauseTransfer | ResumeTransfer + deriving (Show, Eq, Typeable) + +instance E.Exception TransferException + +{- Number of concurrent transfers allowed to be run from the assistant. + - + - Transfers launched by other means, including by remote assistants, + - do not currently take up slots. + -} +numSlots :: Int +numSlots = 1 + +newTransferSlots :: IO TransferSlots +newTransferSlots = MSemN.new numSlots diff --git a/Assistant/Types/TransferrerPool.hs b/Assistant/Types/TransferrerPool.hs new file mode 100644 index 0000000000..2727a69190 --- /dev/null +++ b/Assistant/Types/TransferrerPool.hs @@ -0,0 +1,23 @@ +{- A pool of "git-annex transferkeys" processes + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Assistant.Types.TransferrerPool where + +import Common.Annex + +import Control.Concurrent.STM + +type TransferrerPool = TChan Transferrer + +data Transferrer = Transferrer + { transferrerRead :: Handle + , transferrerWrite :: Handle + , transferrerHandle :: ProcessHandle + } + +newTransferrerPool :: IO TransferrerPool +newTransferrerPool = newTChanIO diff --git a/Assistant/Types/UrlRenderer.hs b/Assistant/Types/UrlRenderer.hs new file mode 100644 index 0000000000..521905bf3c --- /dev/null +++ b/Assistant/Types/UrlRenderer.hs @@ -0,0 +1,26 @@ +{- webapp url renderer access from the assistant + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Assistant.Types.UrlRenderer ( + UrlRenderer, + newUrlRenderer +) where + +#ifdef WITH_WEBAPP + +import Assistant.WebApp (UrlRenderer, newUrlRenderer) + +#else + +data UrlRenderer = UrlRenderer -- dummy type + +newUrlRenderer :: IO UrlRenderer +newUrlRenderer = return UrlRenderer + +#endif diff --git a/Assistant/Upgrade.hs b/Assistant/Upgrade.hs new file mode 100644 index 0000000000..fd71897cad --- /dev/null +++ b/Assistant/Upgrade.hs @@ -0,0 +1,316 @@ +{- git-annex assistant upgrading + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Assistant.Upgrade where + +import Assistant.Common +import Assistant.Restart +import qualified Annex +import Assistant.Alert +import Assistant.DaemonStatus +import Utility.Env +import Types.Distribution +import Logs.Transfer +import Logs.Web +import Logs.Presence +import Logs.Location +import Annex.Content +import qualified Backend +import qualified Types.Backend +import qualified Types.Key +import Assistant.TransferQueue +import Assistant.TransferSlots +import Remote (remoteFromUUID) +import Annex.Path +import Config.Files +import Utility.ThreadScheduler +import Utility.Tmp +import Utility.UserInfo +import qualified Utility.Lsof as Lsof + +import qualified Data.Map as M +import Data.Tuple.Utils + +{- Upgrade without interaction in the webapp. -} +unattendedUpgrade :: Assistant () +unattendedUpgrade = do + prepUpgrade + url <- runRestart + postUpgrade url + +prepUpgrade :: Assistant () +prepUpgrade = do + void $ addAlert upgradingAlert + void $ liftIO $ setEnv upgradedEnv "1" True + prepRestart + +postUpgrade :: URLString -> Assistant () +postUpgrade = postRestart + +autoUpgradeEnabled :: Assistant Bool +autoUpgradeEnabled = liftAnnex $ (==) AutoUpgrade . annexAutoUpgrade <$> Annex.getGitConfig + +checkSuccessfulUpgrade :: IO Bool +checkSuccessfulUpgrade = isJust <$> getEnv upgradedEnv + +upgradedEnv :: String +upgradedEnv = "GIT_ANNEX_UPGRADED" + +{- Start downloading the distribution key from the web. + - Install a hook that will be run once the download is complete, + - and finishes the upgrade. + - + - Creates the destination directory where the upgrade will be installed + - early, in order to check if another upgrade has happened (or is + - happending). On failure, the directory is removed. + -} +startDistributionDownload :: GitAnnexDistribution -> Assistant () +startDistributionDownload d = go =<< liftIO . newVersionLocation d =<< liftIO oldVersionLocation + where + go Nothing = debug ["Skipping redundant upgrade"] + go (Just dest) = do + liftAnnex $ setUrlPresent k u + hook <- asIO1 $ distributionDownloadComplete d dest cleanup + modifyDaemonStatus_ $ \s -> s + { transferHook = M.insert k hook (transferHook s) } + maybe noop (queueTransfer "upgrade" Next (Just f) t) + =<< liftAnnex (remoteFromUUID webUUID) + startTransfer t + k = distributionKey d + u = distributionUrl d + f = takeFileName u ++ " (for upgrade)" + t = Transfer + { transferDirection = Download + , transferUUID = webUUID + , transferKey = k + } + cleanup = liftAnnex $ do + removeAnnex k + setUrlMissing k u + logStatus k InfoMissing + +{- Called once the download is done. + - Passed an action that can be used to clean up the downloaded file. + - + - Fsck the key to verify the download. + -} +distributionDownloadComplete :: GitAnnexDistribution -> FilePath -> Assistant () -> Transfer -> Assistant () +distributionDownloadComplete d dest cleanup t + | transferDirection t == Download = do + debug ["finished downloading git-annex distribution"] + maybe (failedupgrade "bad download") go + =<< liftAnnex (withObjectLoc k fsckit (getM fsckit)) + | otherwise = cleanup + where + k = distributionKey d + fsckit f = case Backend.maybeLookupBackendName (Types.Key.keyBackendName k) of + Nothing -> return $ Just f + Just b -> case Types.Backend.fsckKey b of + Nothing -> return $ Just f + Just a -> ifM (a k f) + ( return $ Just f + , return Nothing + ) + go f = do + ua <- asIO $ upgradeToDistribution dest cleanup f + fa <- asIO1 failedupgrade + liftIO $ ua `catchNonAsync` (fa . show) + failedupgrade msg = do + void $ addAlert $ upgradeFailedAlert msg + cleanup + liftIO $ void $ tryIO $ removeDirectoryRecursive dest + +{- The upgrade method varies by OS. + - + - In general, find where the distribution was installed before, + - and unpack the new distribution next to it (in a versioned directory). + - Then update the programFile to point to the new version. + -} +upgradeToDistribution :: FilePath -> Assistant () -> FilePath -> Assistant () +upgradeToDistribution newdir cleanup distributionfile = do + liftIO $ createDirectoryIfMissing True newdir + (program, deleteold) <- unpack + changeprogram program + cleanup + prepUpgrade + url <- runRestart + {- At this point, the new assistant is fully running, so + - it's safe to delete the old version. -} + liftIO $ void $ tryIO deleteold + postUpgrade url + where + changeprogram program = liftIO $ do + unlessM (boolSystem program [Param "version"]) $ + error "New git-annex program failed to run! Not using." + pf <- programFile + liftIO $ writeFile pf program + +#ifdef darwin_HOST_OS + {- OS X uses a dmg, so mount it, and copy the contents into place. -} + unpack = liftIO $ do + olddir <- oldVersionLocation + withTmpDirIn (parentDir newdir) "git-annex.upgrade" $ \tmpdir -> do + void $ boolSystem "hdiutil" + [ Param "attach", File distributionfile + , Param "-mountpoint", File tmpdir + ] + void $ boolSystem "cp" + [ Param "-R" + , File $ tmpdir installBase "Contents" + , File $ newdir + ] + void $ boolSystem "hdiutil" + [ Param "eject" + , File tmpdir + ] + sanitycheck newdir + let deleteold = do + deleteFromManifest $ olddir "Contents" "MacOS" + makeorigsymlink olddir + return (newdir "Contents" "MacOS" "git-annex", deleteold) +#else + {- Linux uses a tarball (so could other POSIX systems), so + - untar it (into a temp directory) and move the directory + - into place. -} + unpack = liftIO $ do + olddir <- oldVersionLocation + withTmpDirIn (parentDir newdir) "git-annex.upgrade" $ \tmpdir -> do + let tarball = tmpdir "tar" + -- Cannot rely on filename extension, and this also + -- avoids problems if tar doesn't support transparent + -- decompression. + void $ boolSystem "sh" + [ Param "-c" + , Param $ "zcat < " ++ shellEscape distributionfile ++ + " > " ++ shellEscape tarball + ] + tarok <- boolSystem "tar" + [ Param "xf" + , Param tarball + , Param "--directory", File tmpdir + ] + unless tarok $ + error $ "failed to untar " ++ distributionfile + sanitycheck $ tmpdir installBase + installby rename newdir (tmpdir installBase) + let deleteold = do + deleteFromManifest olddir + makeorigsymlink olddir + return (newdir "git-annex", deleteold) + installby a dstdir srcdir = + mapM_ (\x -> a x (dstdir takeFileName x)) + =<< dirContents srcdir +#endif + sanitycheck dir = + unlessM (doesDirectoryExist dir) $ + error $ "did not find " ++ dir ++ " in " ++ distributionfile + makeorigsymlink olddir = do + let origdir = parentDir olddir installBase + nukeFile origdir + createSymbolicLink newdir origdir + +{- Finds where the old version was installed. -} +oldVersionLocation :: IO FilePath +oldVersionLocation = do +#ifdef darwin_HOST_OS + pdir <- parentDir <$> readProgramFile + let dirs = splitDirectories pdir + {- It will probably be deep inside a git-annex.app directory. -} + let olddir = case findIndex ("git-annex.app" `isPrefixOf`) dirs of + Nothing -> pdir + Just i -> joinPath (take (i + 1) dirs) +#else + olddir <- parentDir <$> readProgramFile +#endif + when (null olddir) $ + error $ "Cannot find old distribution bundle; not upgrading." + return olddir + +{- Finds a place to install the new version. + - Generally, put it in the parent directory of where the old version was + - installed, and use a version number in the directory name. + - If unable to write to there, instead put it in the home directory. + - + - The directory is created. If it already exists, returns Nothing. + -} +newVersionLocation :: GitAnnexDistribution -> FilePath -> IO (Maybe FilePath) +newVersionLocation d olddir = + trymkdir newloc $ do + home <- myHomeDir + trymkdir (home s) $ + return Nothing + where + s = installBase ++ "." ++ distributionVersion d + topdir = parentDir olddir + newloc = topdir s + trymkdir dir fallback = + (createDirectory dir >> return (Just dir)) + `catchIO` const fallback + +installBase :: String +installBase = "git-annex." ++ +#ifdef linux_HOST_OS + "linux" +#else +#ifdef darwin_HOST_OS + "app" +#else + "dir" +#endif +#endif + +deleteFromManifest :: FilePath -> IO () +deleteFromManifest dir = do + fs <- map (dir ) . lines <$> catchDefaultIO "" (readFile manifest) + mapM_ nukeFile fs + nukeFile manifest + removeEmptyRecursive dir + where + manifest = dir "git-annex.MANIFEST" + +removeEmptyRecursive :: FilePath -> IO () +removeEmptyRecursive dir = do + print ("remove", dir) + mapM_ removeEmptyRecursive =<< dirContents dir + void $ tryIO $ removeDirectory dir + +{- This is a file that the UpgradeWatcher can watch for modifications to + - detect when git-annex has been upgraded. + -} +upgradeFlagFile :: IO (Maybe FilePath) +upgradeFlagFile = ifM usingDistribution + ( Just <$> programFile + , programPath + ) + +{- Sanity check to see if an upgrade is complete and the program is ready + - to be run. -} +upgradeSanityCheck :: IO Bool +upgradeSanityCheck = ifM usingDistribution + ( doesFileExist =<< programFile + , do + -- Ensure that the program is present, and has no writers, + -- and can be run. This should handle distribution + -- upgrades, manual upgrades, etc. + v <- programPath + case v of + Nothing -> return False + Just program -> do + untilM (doesFileExist program <&&> nowriter program) $ + threadDelaySeconds (Seconds 60) + boolSystem program [Param "version"] + ) + where + nowriter f = null + . filter (`elem` [Lsof.OpenReadWrite, Lsof.OpenWriteOnly]) + . map snd3 + <$> Lsof.query [f] + +usingDistribution :: IO Bool +usingDistribution = isJust <$> getEnv "GIT_ANNEX_STANDLONE_ENV" diff --git a/Assistant/WebApp.hs b/Assistant/WebApp.hs new file mode 100644 index 0000000000..ece75d7ba6 --- /dev/null +++ b/Assistant/WebApp.hs @@ -0,0 +1,73 @@ +{- git-annex assistant webapp core + - + - Copyright 2012, 2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE TypeFamilies, QuasiQuotes, MultiParamTypeClasses #-} +{-# LANGUAGE TemplateHaskell, OverloadedStrings, RankNTypes #-} + +module Assistant.WebApp where + +import Assistant.WebApp.Types +import Assistant.Common +import Utility.NotificationBroadcaster +import Utility.Yesod + +import Data.Text (Text) +import Control.Concurrent +import qualified Network.Wai as W +import qualified Data.ByteString.Char8 as S8 +import qualified Data.Text as T + +waitNotifier :: Assistant NotificationBroadcaster -> NotificationId -> Handler () +waitNotifier getbroadcaster nid = liftAssistant $ do + b <- getbroadcaster + liftIO $ waitNotification $ notificationHandleFromId b nid + +newNotifier :: Assistant NotificationBroadcaster -> Handler NotificationId +newNotifier getbroadcaster = liftAssistant $ do + b <- getbroadcaster + liftIO $ notificationHandleToId <$> newNotificationHandle True b + +{- Adds the auth parameter as a hidden field on a form. Must be put into + - every form. -} +webAppFormAuthToken :: Widget +webAppFormAuthToken = do + webapp <- liftH getYesod + [whamlet||] + +{- A button with an icon, and maybe label or tooltip, that can be + - clicked to perform some action. + - With javascript, clicking it POSTs the Route, and remains on the same + - page. + - With noscript, clicking it GETs the Route. -} +actionButton :: Route WebApp -> (Maybe String) -> (Maybe String) -> String -> String -> Widget +actionButton route label tooltip buttonclass iconclass = $(widgetFile "actionbutton") + +type UrlRenderFunc = Route WebApp -> [(Text, Text)] -> Text +type UrlRenderer = MVar (UrlRenderFunc) + +newUrlRenderer :: IO UrlRenderer +newUrlRenderer = newEmptyMVar + +setUrlRenderer :: UrlRenderer -> (UrlRenderFunc) -> IO () +setUrlRenderer = putMVar + +inFirstRun :: Handler Bool +inFirstRun = isNothing . relDir <$> getYesod + +{- Blocks until the webapp is running and has called setUrlRenderer. -} +renderUrl :: UrlRenderer -> Route WebApp -> [(Text, Text)] -> IO Text +renderUrl urlrenderer route params = do + r <- readMVar urlrenderer + return $ r route params + +{- Redirects back to the referring page, or if there's none, DashboardR -} +redirectBack :: Handler () +redirectBack = do + mr <- lookup "referer" . W.requestHeaders <$> waiRequest + case mr of + Nothing -> redirect DashboardR + Just r -> redirect $ T.pack $ S8.unpack r diff --git a/Assistant/WebApp/Common.hs b/Assistant/WebApp/Common.hs new file mode 100644 index 0000000000..f7a49601f0 --- /dev/null +++ b/Assistant/WebApp/Common.hs @@ -0,0 +1,18 @@ +{- git-annex assistant webapp, common imports + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.WebApp.Common (module X) where + +import Assistant.Common as X +import Assistant.WebApp as X +import Assistant.WebApp.Page as X +import Assistant.WebApp.Form as X +import Assistant.WebApp.Types as X +import Assistant.WebApp.RepoId as X +import Utility.Yesod as X hiding (textField, passwordField, insertBy, replace, joinPath, deleteBy, delete, insert, Key, Option) + +import Data.Text as X (Text) diff --git a/Assistant/WebApp/Configurators.hs b/Assistant/WebApp/Configurators.hs new file mode 100644 index 0000000000..625546dfee --- /dev/null +++ b/Assistant/WebApp/Configurators.hs @@ -0,0 +1,44 @@ +{- git-annex assistant webapp configurators + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE QuasiQuotes, TemplateHaskell, OverloadedStrings, CPP #-} + +module Assistant.WebApp.Configurators where + +import Assistant.WebApp.Common +import Assistant.WebApp.RepoList +#ifdef WITH_XMPP +import Assistant.XMPP.Client +#endif + +{- The main configuration screen. -} +getConfigurationR :: Handler Html +getConfigurationR = ifM inFirstRun + ( redirect FirstRepositoryR + , page "Configuration" (Just Configuration) $ do +#ifdef WITH_XMPP + xmppconfigured <- liftAnnex $ isJust <$> getXMPPCreds +#else + let xmppconfigured = False +#endif + $(widgetFile "configurators/main") + ) + +getAddRepositoryR :: Handler Html +getAddRepositoryR = page "Add Repository" (Just Configuration) $ do + let repolist = repoListDisplay mainRepoSelector + $(widgetFile "configurators/addrepository") + +makeMiscRepositories :: Widget +makeMiscRepositories = $(widgetFile "configurators/addrepository/misc") + +makeCloudRepositories :: Widget +makeCloudRepositories = $(widgetFile "configurators/addrepository/cloud") + +makeArchiveRepositories :: Widget +makeArchiveRepositories = $(widgetFile "configurators/addrepository/archive") + diff --git a/Assistant/WebApp/Configurators/AWS.hs b/Assistant/WebApp/Configurators/AWS.hs new file mode 100644 index 0000000000..ab2a32a599 --- /dev/null +++ b/Assistant/WebApp/Configurators/AWS.hs @@ -0,0 +1,230 @@ +{- git-annex assistant webapp configurators for Amazon AWS services + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP, QuasiQuotes, TemplateHaskell, OverloadedStrings #-} + +module Assistant.WebApp.Configurators.AWS where + +import Assistant.WebApp.Common +import Assistant.WebApp.MakeRemote +#ifdef WITH_S3 +import qualified Remote.S3 as S3 +#endif +import qualified Remote.Glacier as Glacier +import qualified Remote.Helper.AWS as AWS +import Logs.Remote +import qualified Remote +import qualified Types.Remote as Remote +import Types.Remote (RemoteConfig) +import Types.StandardGroups +import Creds +import Assistant.Gpg +import Git.Types (RemoteName) + +import qualified Data.Text as T +import qualified Data.Map as M +import Data.Char + +awsConfigurator :: Widget -> Handler Html +awsConfigurator = page "Add an Amazon repository" (Just Configuration) + +glacierConfigurator :: Widget -> Handler Html +glacierConfigurator a = do + ifM (liftIO $ inPath "glacier") + ( awsConfigurator a + , awsConfigurator needglaciercli + ) + where + needglaciercli = $(widgetFile "configurators/needglaciercli") + +data StorageClass = StandardRedundancy | ReducedRedundancy + deriving (Eq, Enum, Bounded) + +instance Show StorageClass where + show StandardRedundancy = "STANDARD" + show ReducedRedundancy = "REDUCED_REDUNDANCY" + +data AWSInput = AWSInput + { accessKeyID :: Text + , secretAccessKey :: Text + , datacenter :: Text + -- Only used for S3, not Glacier. + , storageClass :: StorageClass + , repoName :: Text + , enableEncryption :: EnableEncryption + } + +data AWSCreds = AWSCreds Text Text + +extractCreds :: AWSInput -> AWSCreds +extractCreds i = AWSCreds (accessKeyID i) (secretAccessKey i) + +s3InputAForm :: Maybe CredPair -> MkAForm AWSInput +s3InputAForm defcreds = AWSInput + <$> accessKeyIDFieldWithHelp (T.pack . fst <$> defcreds) + <*> secretAccessKeyField (T.pack . snd <$> defcreds) + <*> datacenterField AWS.S3 + <*> areq (selectFieldList storageclasses) "Storage class" (Just StandardRedundancy) + <*> areq textField "Repository name" (Just "S3") + <*> enableEncryptionField + where + storageclasses :: [(Text, StorageClass)] + storageclasses = + [ ("Standard redundancy", StandardRedundancy) + , ("Reduced redundancy (costs less)", ReducedRedundancy) + ] + +glacierInputAForm :: Maybe CredPair -> MkAForm AWSInput +glacierInputAForm defcreds = AWSInput + <$> accessKeyIDFieldWithHelp (T.pack . fst <$> defcreds) + <*> secretAccessKeyField (T.pack . snd <$> defcreds) + <*> datacenterField AWS.Glacier + <*> pure StandardRedundancy + <*> areq textField "Repository name" (Just "glacier") + <*> enableEncryptionField + +awsCredsAForm :: Maybe CredPair -> MkAForm AWSCreds +awsCredsAForm defcreds = AWSCreds + <$> accessKeyIDFieldWithHelp (T.pack . fst <$> defcreds) + <*> secretAccessKeyField (T.pack . snd <$> defcreds) + +accessKeyIDField :: Widget -> Maybe Text -> MkAForm Text +accessKeyIDField help = areq (textField `withNote` help) "Access Key ID" + +accessKeyIDFieldWithHelp :: Maybe Text -> MkAForm Text +accessKeyIDFieldWithHelp = accessKeyIDField help + where + help = [whamlet| + + Get Amazon access keys +|] + +secretAccessKeyField :: Maybe Text -> MkAForm Text +secretAccessKeyField = areq passwordField "Secret Access Key" + +datacenterField :: AWS.Service -> MkAForm Text +datacenterField service = areq (selectFieldList list) "Datacenter" defregion + where + list = M.toList $ AWS.regionMap service + defregion = Just $ AWS.defaultRegion service + +getAddS3R :: Handler Html +getAddS3R = postAddS3R + +postAddS3R :: Handler Html +#ifdef WITH_S3 +postAddS3R = awsConfigurator $ do + defcreds <- liftAnnex previouslyUsedAWSCreds + ((result, form), enctype) <- liftH $ + runFormPostNoToken $ renderBootstrap $ s3InputAForm defcreds + case result of + FormSuccess input -> liftH $ do + let name = T.unpack $ repoName input + makeAWSRemote initSpecialRemote S3.remote TransferGroup (extractCreds input) name $ M.fromList + [ configureEncryption $ enableEncryption input + , ("type", "S3") + , ("datacenter", T.unpack $ datacenter input) + , ("storageclass", show $ storageClass input) + ] + _ -> $(widgetFile "configurators/adds3") +#else +postAddS3R = error "S3 not supported by this build" +#endif + +getAddGlacierR :: Handler Html +getAddGlacierR = postAddGlacierR + +postAddGlacierR :: Handler Html +#ifdef WITH_S3 +postAddGlacierR = glacierConfigurator $ do + defcreds <- liftAnnex previouslyUsedAWSCreds + ((result, form), enctype) <- liftH $ + runFormPostNoToken $ renderBootstrap $ glacierInputAForm defcreds + case result of + FormSuccess input -> liftH $ do + let name = T.unpack $ repoName input + makeAWSRemote initSpecialRemote Glacier.remote SmallArchiveGroup (extractCreds input) name $ M.fromList + [ configureEncryption $ enableEncryption input + , ("type", "glacier") + , ("datacenter", T.unpack $ datacenter input) + ] + _ -> $(widgetFile "configurators/addglacier") +#else +postAddGlacierR = error "S3 not supported by this build" +#endif + +getEnableS3R :: UUID -> Handler Html +#ifdef WITH_S3 +getEnableS3R uuid = do + m <- liftAnnex readRemoteLog + if isIARemoteConfig $ fromJust $ M.lookup uuid m + then redirect $ EnableIAR uuid + else postEnableS3R uuid +#else +getEnableS3R = postEnableS3R +#endif + +postEnableS3R :: UUID -> Handler Html +#ifdef WITH_S3 +postEnableS3R uuid = awsConfigurator $ enableAWSRemote S3.remote uuid +#else +postEnableS3R _ = error "S3 not supported by this build" +#endif + +getEnableGlacierR :: UUID -> Handler Html +getEnableGlacierR = postEnableGlacierR + +postEnableGlacierR :: UUID -> Handler Html +postEnableGlacierR = glacierConfigurator . enableAWSRemote Glacier.remote + +enableAWSRemote :: RemoteType -> UUID -> Widget +#ifdef WITH_S3 +enableAWSRemote remotetype uuid = do + defcreds <- liftAnnex previouslyUsedAWSCreds + ((result, form), enctype) <- liftH $ + runFormPostNoToken $ renderBootstrap $ awsCredsAForm defcreds + case result of + FormSuccess creds -> liftH $ do + m <- liftAnnex readRemoteLog + let name = fromJust $ M.lookup "name" $ + fromJust $ M.lookup uuid m + makeAWSRemote enableSpecialRemote remotetype SmallArchiveGroup creds name M.empty + _ -> do + description <- liftAnnex $ + T.pack <$> Remote.prettyUUID uuid + $(widgetFile "configurators/enableaws") +#else +enableAWSRemote _ _ = error "S3 not supported by this build" +#endif + +makeAWSRemote :: SpecialRemoteMaker -> RemoteType -> StandardGroup -> AWSCreds -> RemoteName -> RemoteConfig -> Handler () +makeAWSRemote maker remotetype defaultgroup (AWSCreds ak sk) name config = do + liftIO $ AWS.setCredsEnv (T.unpack ak, T.unpack sk) + setupCloudRemote defaultgroup Nothing $ + maker hostname remotetype config + where + {- AWS services use the remote name as the basis for a host + - name, so filter it to contain valid characters. -} + hostname = case filter isAlphaNum name of + [] -> "aws" + n -> n + +getRepoInfo :: RemoteConfig -> Widget +getRepoInfo c = [whamlet|S3 remote using bucket: #{bucket}|] + where + bucket = fromMaybe "" $ M.lookup "bucket" c + +#ifdef WITH_S3 +isIARemoteConfig :: RemoteConfig -> Bool +isIARemoteConfig = S3.isIAHost . fromMaybe "" . M.lookup "host" + +previouslyUsedAWSCreds :: Annex (Maybe CredPair) +previouslyUsedAWSCreds = getM gettype [S3.remote, Glacier.remote] + where + gettype t = previouslyUsedCredPair AWS.creds t $ + not . isIARemoteConfig . Remote.config +#endif diff --git a/Assistant/WebApp/Configurators/Delete.hs b/Assistant/WebApp/Configurators/Delete.hs new file mode 100644 index 0000000000..c29e4a681a --- /dev/null +++ b/Assistant/WebApp/Configurators/Delete.hs @@ -0,0 +1,132 @@ +{- git-annex assistant webapp repository deletion + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE QuasiQuotes, TemplateHaskell, OverloadedStrings #-} + +module Assistant.WebApp.Configurators.Delete where + +import Assistant.WebApp.Common +import Assistant.DeleteRemote +import Assistant.DaemonStatus +import Assistant.ScanRemotes +import Assistant.Sync +import qualified Remote +import qualified Git +import Config.Files +import Utility.FileMode +import Logs.Trust +import Logs.Remote +import Logs.PreferredContent +import Types.StandardGroups +import Annex.UUID + +import System.IO.HVFS (SystemFS(..)) +import qualified Data.Text as T +import qualified Data.Map as M +import System.Path + +notCurrentRepo :: UUID -> Handler Html -> Handler Html +notCurrentRepo uuid a = do + u <- liftAnnex getUUID + if u == uuid + then redirect DeleteCurrentRepositoryR + else go =<< liftAnnex (Remote.remoteFromUUID uuid) + where + go Nothing = error "Unknown UUID" + go (Just _) = a + +getDisableRepositoryR :: UUID -> Handler Html +getDisableRepositoryR uuid = notCurrentRepo uuid $ do + void $ liftAssistant $ disableRemote uuid + redirect DashboardR + +getDeleteRepositoryR :: UUID -> Handler Html +getDeleteRepositoryR uuid = notCurrentRepo uuid $ + deletionPage $ do + reponame <- liftAnnex $ Remote.prettyUUID uuid + $(widgetFile "configurators/delete/start") + +getStartDeleteRepositoryR :: UUID -> Handler Html +getStartDeleteRepositoryR uuid = do + remote <- fromMaybe (error "unknown remote") + <$> liftAnnex (Remote.remoteFromUUID uuid) + liftAnnex $ do + trustSet uuid UnTrusted + setStandardGroup uuid UnwantedGroup + liftAssistant $ addScanRemotes True [remote] + redirect DashboardR + +getFinishDeleteRepositoryR :: UUID -> Handler Html +getFinishDeleteRepositoryR uuid = deletionPage $ do + void $ liftAssistant $ removeRemote uuid + + reponame <- liftAnnex $ Remote.prettyUUID uuid + {- If it's not listed in the remote log, it must be a git repo. -} + gitrepo <- liftAnnex $ M.notMember uuid <$> readRemoteLog + $(widgetFile "configurators/delete/finished") + +getDeleteCurrentRepositoryR :: Handler Html +getDeleteCurrentRepositoryR = deleteCurrentRepository + +postDeleteCurrentRepositoryR :: Handler Html +postDeleteCurrentRepositoryR = deleteCurrentRepository + +deleteCurrentRepository :: Handler Html +deleteCurrentRepository = dangerPage $ do + reldir <- fromJust . relDir <$> liftH getYesod + havegitremotes <- haveremotes syncGitRemotes + havedataremotes <- haveremotes syncDataRemotes + ((result, form), enctype) <- liftH $ + runFormPostNoToken $ renderBootstrap $ sanityVerifierAForm $ + SanityVerifier magicphrase + case result of + FormSuccess _ -> liftH $ do + dir <- liftAnnex $ fromRepo Git.repoPath + liftIO $ removeAutoStartFile dir + + {- Disable syncing to this repository, and all + - remotes. This stops all transfers, and all + - file watching. -} + liftAssistant $ do + changeSyncable Nothing False + rs <- syncRemotes <$> getDaemonStatus + mapM_ (\r -> changeSyncable (Just r) False) rs + + {- Make all directories writable, so all annexed + - content can be deleted. -} + liftIO $ do + recurseDir SystemFS dir >>= + filterM doesDirectoryExist >>= + mapM_ allowWrite + removeDirectoryRecursive dir + + redirect ShutdownConfirmedR + _ -> $(widgetFile "configurators/delete/currentrepository") + where + haveremotes selector = not . null . selector + <$> liftAssistant getDaemonStatus + +data SanityVerifier = SanityVerifier T.Text + deriving (Eq) + +sanityVerifierAForm :: SanityVerifier -> MkAForm SanityVerifier +sanityVerifierAForm template = SanityVerifier + <$> areq checksanity "Confirm deletion?" Nothing + where + checksanity = checkBool (\input -> SanityVerifier input == template) + insane textField + + insane = "Maybe this is not a good idea..." :: Text + +deletionPage :: Widget -> Handler Html +deletionPage = page "Delete repository" (Just Configuration) + +dangerPage :: Widget -> Handler Html +dangerPage = page "Danger danger danger" (Just Configuration) + +magicphrase :: Text +magicphrase = "Yes, please do as I say!" diff --git a/Assistant/WebApp/Configurators/Edit.hs b/Assistant/WebApp/Configurators/Edit.hs new file mode 100644 index 0000000000..6e7cbef5b3 --- /dev/null +++ b/Assistant/WebApp/Configurators/Edit.hs @@ -0,0 +1,269 @@ +{- git-annex assistant webapp configurator for editing existing repos + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP, QuasiQuotes, TemplateHaskell, OverloadedStrings #-} + +module Assistant.WebApp.Configurators.Edit where + +import Assistant.WebApp.Common +import Assistant.WebApp.Gpg +import Assistant.DaemonStatus +import Assistant.WebApp.MakeRemote (uniqueRemoteName) +import Assistant.WebApp.Configurators.XMPP (xmppNeeded) +import Assistant.ScanRemotes +import Assistant.Sync +import qualified Assistant.WebApp.Configurators.AWS as AWS +import qualified Assistant.WebApp.Configurators.IA as IA +#ifdef WITH_S3 +import qualified Remote.S3 as S3 +#endif +import qualified Remote +import qualified Types.Remote as Remote +import qualified Remote.List as Remote +import Logs.UUID +import Logs.Group +import Logs.PreferredContent +import Logs.Remote +import Types.StandardGroups +import qualified Git +import qualified Git.Command +import qualified Git.Config +import qualified Annex +import Git.Remote +import Remote.Helper.Encryptable (extractCipher) +import Types.Crypto +import Utility.Gpg +import Annex.UUID +import Assistant.Ssh +import Config + +import qualified Data.Text as T +import qualified Data.Map as M +import qualified Data.Set as S + +data RepoGroup = RepoGroupCustom String | RepoGroupStandard StandardGroup + deriving (Show, Eq) + +data RepoConfig = RepoConfig + { repoName :: Text + , repoDescription :: Maybe Text + , repoGroup :: RepoGroup + , repoAssociatedDirectory :: Maybe Text + , repoSyncable :: Bool + } + deriving (Show) + +getRepoConfig :: UUID -> Maybe Remote -> Annex RepoConfig +getRepoConfig uuid mremote = do + groups <- lookupGroups uuid + remoteconfig <- M.lookup uuid <$> readRemoteLog + let (repogroup, associateddirectory) = case getStandardGroup groups of + Nothing -> (RepoGroupCustom $ unwords $ S.toList groups, Nothing) + Just g -> (RepoGroupStandard g, associatedDirectory remoteconfig g) + + description <- fmap T.pack . M.lookup uuid <$> uuidMap + + syncable <- case mremote of + Just r -> return $ remoteAnnexSync $ Remote.gitconfig r + Nothing -> annexAutoCommit <$> Annex.getGitConfig + + return $ RepoConfig + (T.pack $ maybe "here" Remote.name mremote) + description + repogroup + (T.pack <$> associateddirectory) + syncable + +setRepoConfig :: UUID -> Maybe Remote -> RepoConfig -> RepoConfig -> Handler () +setRepoConfig uuid mremote oldc newc = do + when descriptionChanged $ liftAnnex $ do + maybe noop (describeUUID uuid . T.unpack) (repoDescription newc) + void uuidMapLoad + when nameChanged $ do + liftAnnex $ do + name <- fromRepo $ uniqueRemoteName (legalName newc) 0 + {- git remote rename expects there to be a + - remote..fetch, and exits nonzero if + - there's not. Special remotes don't normally + - have that, and don't use it. Temporarily add + - it if it's missing. -} + let remotefetch = "remote." ++ T.unpack (repoName oldc) ++ ".fetch" + needfetch <- isNothing <$> fromRepo (Git.Config.getMaybe remotefetch) + when needfetch $ + inRepo $ Git.Command.run + [Param "config", Param remotefetch, Param ""] + inRepo $ Git.Command.run + [ Param "remote" + , Param "rename" + , Param $ T.unpack $ repoName oldc + , Param name + ] + void Remote.remoteListRefresh + liftAssistant updateSyncRemotes + when associatedDirectoryChanged $ case repoAssociatedDirectory newc of + Nothing -> noop + Just t + | T.null t -> noop + | otherwise -> liftAnnex $ do + let dir = takeBaseName $ T.unpack t + m <- readRemoteLog + case M.lookup uuid m of + Nothing -> noop + Just remoteconfig -> configSet uuid $ + M.insert "preferreddir" dir remoteconfig + when groupChanged $ do + liftAnnex $ case repoGroup newc of + RepoGroupStandard g -> setStandardGroup uuid g + RepoGroupCustom s -> groupSet uuid $ S.fromList $ words s + {- Enabling syncing will cause a scan, + - so avoid queueing a duplicate scan. -} + when (repoSyncable newc && not syncableChanged) $ liftAssistant $ + case mremote of + Just remote -> addScanRemotes True [remote] + Nothing -> addScanRemotes True + =<< syncDataRemotes <$> getDaemonStatus + when syncableChanged $ + liftAssistant $ changeSyncable mremote (repoSyncable newc) + where + syncableChanged = repoSyncable oldc /= repoSyncable newc + associatedDirectoryChanged = repoAssociatedDirectory oldc /= repoAssociatedDirectory newc + groupChanged = repoGroup oldc /= repoGroup newc + nameChanged = isJust mremote && legalName oldc /= legalName newc + descriptionChanged = repoDescription oldc /= repoDescription newc + + legalName = makeLegalName . T.unpack . repoName + +editRepositoryAForm :: Bool -> RepoConfig -> MkAForm RepoConfig +editRepositoryAForm ishere def = RepoConfig + <$> areq (if ishere then readonlyTextField else textField) + "Name" (Just $ repoName def) + <*> aopt textField "Description" (Just $ repoDescription def) + <*> areq (selectFieldList groups `withNote` help) "Repository group" (Just $ repoGroup def) + <*> associateddirectory + <*> areq checkBoxField "Syncing enabled" (Just $ repoSyncable def) + where + groups = customgroups ++ standardgroups + standardgroups :: [(Text, RepoGroup)] + standardgroups = map (\g -> (T.pack $ descStandardGroup g , RepoGroupStandard g)) + [minBound :: StandardGroup .. maxBound :: StandardGroup] + customgroups :: [(Text, RepoGroup)] + customgroups = case repoGroup def of + RepoGroupCustom s -> [(T.pack s, RepoGroupCustom s)] + _ -> [] + help = [whamlet|What's this?|] + + associateddirectory = case repoAssociatedDirectory def of + Nothing -> aopt hiddenField "" Nothing + Just d -> aopt textField "Associated directory" (Just $ Just d) + +getEditRepositoryR :: RepoId -> Handler Html +getEditRepositoryR = postEditRepositoryR + +postEditRepositoryR :: RepoId -> Handler Html +postEditRepositoryR = editForm False + +getEditNewRepositoryR :: UUID -> Handler Html +getEditNewRepositoryR = postEditNewRepositoryR + +postEditNewRepositoryR :: UUID -> Handler Html +postEditNewRepositoryR = editForm True . RepoUUID + +getEditNewCloudRepositoryR :: UUID -> Handler Html +getEditNewCloudRepositoryR = postEditNewCloudRepositoryR + +postEditNewCloudRepositoryR :: UUID -> Handler Html +postEditNewCloudRepositoryR uuid = xmppNeeded >> editForm True (RepoUUID uuid) + +editForm :: Bool -> RepoId -> Handler Html +editForm new (RepoUUID uuid) = page "Edit repository" (Just Configuration) $ do + mremote <- liftAnnex $ Remote.remoteFromUUID uuid + when (mremote == Nothing) $ + whenM ((/=) uuid <$> liftAnnex getUUID) $ + error "unknown remote" + curr <- liftAnnex $ getRepoConfig uuid mremote + liftAnnex $ checkAssociatedDirectory curr mremote + ((result, form), enctype) <- liftH $ + runFormPostNoToken $ renderBootstrap $ editRepositoryAForm (isNothing mremote) curr + case result of + FormSuccess input -> liftH $ do + setRepoConfig uuid mremote curr input + liftAnnex $ checkAssociatedDirectory input mremote + redirect DashboardR + _ -> do + let istransfer = repoGroup curr == RepoGroupStandard TransferGroup + config <- liftAnnex $ M.lookup uuid <$> readRemoteLog + let repoInfo = getRepoInfo mremote config + let repoEncryption = getRepoEncryption mremote config + $(widgetFile "configurators/edit/repository") +editForm new r@(RepoName _) = page "Edit repository" (Just Configuration) $ do + mr <- liftAnnex (repoIdRemote r) + let repoInfo = getRepoInfo mr Nothing + g <- liftAnnex gitRepo + let sshrepo = maybe False (remoteLocationIsSshUrl . flip parseRemoteLocation g . Git.repoLocation . Remote.repo) mr + $(widgetFile "configurators/edit/nonannexremote") + +{- Makes any directory associated with the repository. -} +checkAssociatedDirectory :: RepoConfig -> Maybe Remote -> Annex () +checkAssociatedDirectory _ Nothing = noop +checkAssociatedDirectory cfg (Just r) = do + repoconfig <- M.lookup (Remote.uuid r) <$> readRemoteLog + case repoGroup cfg of + RepoGroupStandard gr -> case associatedDirectory repoconfig gr of + Just d -> inRepo $ \g -> + createDirectoryIfMissing True $ + Git.repoPath g d + Nothing -> noop + _ -> noop + +getRepoInfo :: Maybe Remote.Remote -> Maybe Remote.RemoteConfig -> Widget +getRepoInfo (Just r) (Just c) = case M.lookup "type" c of + Just "S3" +#ifdef WITH_S3 + | S3.isIA c -> IA.getRepoInfo c +#endif + | otherwise -> AWS.getRepoInfo c + Just t + | t /= "git" -> [whamlet|#{t} remote|] + _ -> getGitRepoInfo $ Remote.repo r +getRepoInfo (Just r) _ = getRepoInfo (Just r) (Just $ Remote.config r) +getRepoInfo _ _ = [whamlet|git repository|] + +getGitRepoInfo :: Git.Repo -> Widget +getGitRepoInfo r = do + let loc = Git.repoLocation r + [whamlet|git repository located at #{loc}|] + +getRepoEncryption :: Maybe Remote.Remote -> Maybe Remote.RemoteConfig -> Widget +getRepoEncryption (Just _) (Just c) = case extractCipher c of + Nothing -> + [whamlet|not encrypted|] + (Just (SharedCipher _)) -> + [whamlet|encrypted: encryption key stored in git repository|] + (Just (EncryptedCipher _ _ (KeyIds { keyIds = ks }))) -> do + knownkeys <- liftIO secretKeys + [whamlet| +encrypted using gpg key: +