summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoeyHess <>2013-05-16 15:38:19 (GMT)
committerhdiff <hdiff@hdiff.luite.com>2013-05-16 15:38:19 (GMT)
commit654582551f641c8049648be5e1eccc2f3b389a54 (patch)
tree37acb04a9329b63f1e53c054d1f8f0cf945e369f
parent2f2fe44c293f499a5efdf6c08c3932e0dc995b0d (diff)
version 4.201305164.20130516
-rw-r--r--Annex.hs4
-rw-r--r--Annex/Branch.hs10
-rw-r--r--Annex/CatFile.hs29
-rw-r--r--Annex/Content.hs24
-rw-r--r--Annex/Content/Direct.hs4
-rw-r--r--Annex/Direct.hs39
-rw-r--r--Annex/Environment.hs27
-rw-r--r--Annex/Journal.hs32
-rw-r--r--Annex/Link.hs32
-rw-r--r--Annex/LockPool.hs9
-rw-r--r--Annex/Ssh.hs7
-rw-r--r--Annex/Version.hs6
-rw-r--r--Assistant.hs11
-rw-r--r--Assistant/DaemonStatus.hs2
-rw-r--r--Assistant/Install.hs7
-rw-r--r--Assistant/Install/AutoStart.obin5088 -> 3364 bytes
-rw-r--r--Assistant/Install/Menu.obin0 -> 3216 bytes
-rw-r--r--Assistant/Ssh.hs6
-rw-r--r--Assistant/Threads/WebApp.hs4
-rw-r--r--Assistant/WebApp/Configurators/Delete.hs1
-rw-r--r--Assistant/WebApp/Configurators/Local.hs25
-rw-r--r--Assistant/WebApp/Configurators/Ssh.hs20
-rw-r--r--Assistant/WebApp/Configurators/WebDAV.hs2
-rw-r--r--Assistant/WebApp/routes3
-rw-r--r--Assistant/XMPP/Git.hs18
-rw-r--r--Backend/SHA.hs30
-rw-r--r--Build/BundledPrograms.hs46
-rw-r--r--Build/Configure.hs36
-rw-r--r--Build/Configure.obin87376 -> 52208 bytes
-rw-r--r--Build/DesktopFile.hs6
-rw-r--r--Build/DesktopFile.obin0 -> 13604 bytes
-rw-r--r--Build/EvilSplicer.hs5
-rw-r--r--Build/EvilSplicer.obin0 -> 160444 bytes
-rw-r--r--Build/InstallDesktopFile.obin29552 -> 2536 bytes
-rw-r--r--Build/NullSoftInstaller.hs114
-rw-r--r--Build/Standalone.hs30
-rw-r--r--Build/Standalone.obin0 -> 13632 bytes
-rw-r--r--Build/SysConfig.obin0 -> 4860 bytes
-rw-r--r--Build/TestConfig.hs9
-rw-r--r--Build/TestConfig.obin55184 -> 33088 bytes
-rw-r--r--CHANGELOG29
-rw-r--r--CmdLine.hs6
-rw-r--r--Command/Add.hs2
-rw-r--r--Command/Assistant.hs3
-rw-r--r--Command/Fix.hs2
-rw-r--r--Command/FromKey.hs2
-rw-r--r--Command/Fsck.hs18
-rw-r--r--Command/Import.hs2
-rw-r--r--Command/Indirect.hs2
-rw-r--r--Command/Migrate.hs19
-rw-r--r--Command/ReKey.hs2
-rw-r--r--Command/RecvKey.hs16
-rw-r--r--Command/Status.hs1
-rw-r--r--Command/Unannex.hs6
-rw-r--r--Command/WebApp.hs7
-rw-r--r--Common.hs7
-rw-r--r--Common.obin906 -> 622 bytes
-rw-r--r--Config/Files.hs2
-rw-r--r--Config/Files.obin0 -> 13072 bytes
-rw-r--r--Creds.hs18
-rw-r--r--Git.hs8
-rw-r--r--Git/CatFile.hs19
-rw-r--r--Git/CheckAttr.hs7
-rw-r--r--Git/Construct.hs25
-rw-r--r--Git/CurrentRepo.hs14
-rw-r--r--Git/FilePath.hs26
-rw-r--r--Git/HashObject.hs11
-rw-r--r--Git/Index.hs2
-rw-r--r--Git/UpdateIndex.hs11
-rw-r--r--GitAnnex.hs8
-rw-r--r--GitAnnexShell.hs6
-rw-r--r--INSTALL12
-rw-r--r--Init.hs32
-rw-r--r--Limit.hs13
-rw-r--r--Locations.hs2
-rw-r--r--Locations/UserConfig.obin21632 -> 0 bytes
-rw-r--r--Logs/Transfer.hs20
-rw-r--r--Logs/Unused.hs2
-rw-r--r--Makefile8
-rw-r--r--Remote/Directory.hs13
-rw-r--r--Remote/Git.hs26
-rw-r--r--Remote/Helper/Hooks.hs6
-rw-r--r--Remote/Rsync.hs60
-rw-r--r--Seek.hs2
-rw-r--r--Setup.obin16360 -> 10440 bytes
-rw-r--r--Test.hs707
-rw-r--r--Upgrade.hs9
-rw-r--r--Upgrade/V1.hs2
-rw-r--r--Upgrade/V2.hs2
-rw-r--r--Utility/Applicative.obin1936 -> 1308 bytes
-rw-r--r--Utility/CoProcess.hs17
-rw-r--r--Utility/Daemon.hs25
-rw-r--r--Utility/Directory.hs4
-rw-r--r--Utility/Directory.obin24992 -> 15224 bytes
-rw-r--r--Utility/Env.hs63
-rw-r--r--Utility/Env.obin0 -> 3664 bytes
-rw-r--r--Utility/Exception.obin11576 -> 7228 bytes
-rw-r--r--Utility/ExternalSHA.hs67
-rw-r--r--Utility/ExternalSHA.obin0 -> 11768 bytes
-rw-r--r--Utility/FileMode.hs35
-rw-r--r--Utility/FileSystemEncoding.obin9128 -> 5672 bytes
-rw-r--r--Utility/FreeDesktop.obin35136 -> 21064 bytes
-rw-r--r--Utility/Gpg.hs17
-rw-r--r--Utility/InodeCache.hs2
-rw-r--r--Utility/LogFile.hs16
-rw-r--r--Utility/Lsof.hs4
-rw-r--r--Utility/Misc.hs9
-rw-r--r--Utility/Misc.obin32432 -> 19232 bytes
-rw-r--r--Utility/Monad.obin11728 -> 7376 bytes
-rw-r--r--Utility/Mounts.hsc30
-rw-r--r--Utility/OSX.obin14632 -> 8808 bytes
-rw-r--r--Utility/PartialPrelude.obin8648 -> 5448 bytes
-rw-r--r--Utility/Path.hs66
-rw-r--r--Utility/Path.obin40080 -> 24540 bytes
-rw-r--r--Utility/Process.hs9
-rw-r--r--Utility/Process.obin70544 -> 42568 bytes
-rw-r--r--Utility/Rsync.hs18
-rw-r--r--Utility/SafeCommand.obin47136 -> 28136 bytes
-rw-r--r--Utility/Shell.hs16
-rw-r--r--Utility/TempFile.hs58
-rw-r--r--Utility/TempFile.obin18352 -> 0 bytes
-rw-r--r--Utility/Tmp.hs71
-rw-r--r--Utility/Tmp.obin0 -> 12272 bytes
-rw-r--r--Utility/UserInfo.hs21
-rw-r--r--Utility/UserInfo.obin10312 -> 6304 bytes
-rw-r--r--Utility/WebApp.hs2
-rw-r--r--Utility/libmounts.h2
-rw-r--r--debian/changelog29
-rw-r--r--debian/control5
-rw-r--r--debian/files1
-rw-r--r--debian/git-annex.debhelper.log47
-rw-r--r--debian/git-annex.substvars2
-rw-r--r--debian/git-annex/DEBIAN/control24
-rw-r--r--debian/git-annex/DEBIAN/md5sums228
-rwxr-xr-xdebian/git-annex/usr/bin/git-annexbin44805440 -> 0 bytes
-rwxr-xr-xdebian/git-annex/usr/bin/git-annex-shellbin44805440 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc-base/git-annex9
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/NEWS.Debian.gzbin681 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/changelog.gzbin28780 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/copyright783
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/assistant.html211
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/assistant/addsshserver.pngbin31740 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/assistant/buddylist.pngbin4347 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/assistant/cloudnudge.pngbin7332 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/assistant/combinerepos.pngbin10677 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/assistant/controlmenu.pngbin8863 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/assistant/crashrecovery.pngbin6594 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/assistant/dashboard.pngbin41061 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/assistant/example.pngbin110994 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/assistant/logs.pngbin33631 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/assistant/makerepo.pngbin32061 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/assistant/menu.pngbin22921 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/assistant/osx-app.pngbin2604 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/assistant/preferences.pngbin22815 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/assistant/quickstart.html158
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/assistant/release_notes.html553
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/assistant/repogroup.pngbin10986 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/assistant/repogroups.pngbin18490 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/assistant/repositories.pngbin63405 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/assistant/rsync.net.pngbin61465 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/assistant/running.pngbin24664 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/assistant/thanks.html379
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/assistant/thumbnail.pngbin3491 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/assistant/xmpp.pngbin27753 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/assistant/xmppnudge.pngbin6156 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/assistant/xmpppairingend.pngbin34379 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/backends.html285
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/bare_repositories.html223
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/coding_style.html225
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/comments.html554
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/contact.html137
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/copies.html178
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/design.html132
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/design/assistant.html756
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/design/assistant/OSX.html196
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/design/assistant/cloud.html324
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/design/assistant/deltas.html176
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/design/assistant/polls.html333
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/design/assistant/webapp.html344
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/design/assistant/xmpp.html345
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/design/encryption.html524
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/direct_mode.html355
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/download.html246
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/encryption.html240
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/favicon.icobin405 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/feeds.html133
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/footer/column_a.html131
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/footer/column_b.html149
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/future_proofing.html165
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/git-annex-shell.html248
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/git-annex.html1144
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/git-union-merge.html165
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/how_it_works.html167
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/ikiwiki/ikiwiki.js54
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/ikiwiki/relativedate.js75
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/ikiwiki/toggle.js29
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/index.html306
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/install.html221
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/install/Android.html172
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/install/ArchLinux.html184
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/install/Debian.html349
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/install/Fedora.html169
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/install/FreeBSD.html130
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/install/Gentoo.html131
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/install/NixOS.html135
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/install/OSX.html851
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/install/Ubuntu.html143
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/install/cabal.html149
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/install/fromscratch.html212
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/install/openSUSE.html131
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/internals.html264
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/internals/hashing.html159
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/internals/key_format.html155
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/license.html140
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/license/AGPL.gzbin11769 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/license/GPL.gzbin12130 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/license/LGPL.gzbin9357 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/links/key_concepts.html130
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/links/other_stuff.html129
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/links/the_details.html131
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/location_tracking.html174
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/logo-bw.svg60
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/logo.pngbin9092 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/logo.svg77
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/logo_small.pngbin4713 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/meta.html151
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/news.html127
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/not.html507
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/preferred_content.html607
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/related_software.html140
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/repomap.pngbin67316 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/scalability.html171
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/sidebar.html133
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/sitemap.html427
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/special_remotes.html573
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/special_remotes/S3.html451
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/special_remotes/bup.html461
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/special_remotes/glacier.html179
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/special_remotes/hook.html266
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/special_remotes/rsync.html291
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/special_remotes/web.html141
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/special_remotes/webdav.html465
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/special_remotes/xmpp.html191
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/summary.html129
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/sync.html302
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/templates/bare.tmpl1
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/templates/bugtemplate.html127
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/templates/walkthrough.tmpl2
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/testimonials.html163
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/tips.html390
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/tips/assume-unstaged.html188
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/tips/emacs_integration.html140
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/tips/using_Amazon_S3.html239
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/transferring_data.html148
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/trust.html198
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/upgrades.html227
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/upgrades/SHA_size.html189
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/use_case/Alice.html144
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/use_case/Bob.html153
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/users.html148
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/users/chrysn.html128
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/users/fmarier.html129
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/users/gebi.html121
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/users/joey.html122
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/videos.html275
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/videos/FOSDEM2012.html123
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/videos/LCA2013.html125
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/walkthrough.html605
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/walkthrough/backups.html148
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/walkthrough/more.html123
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/walkthrough/syncing.html146
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/walkthrough/unused_data.html205
-rw-r--r--debian/git-annex/usr/share/doc/git-annex/html/walkthrough/using_bup.html164
-rw-r--r--debian/git-annex/usr/share/man/man1/git-annex-shell.1.gzbin1383 -> 0 bytes
-rw-r--r--debian/git-annex/usr/share/man/man1/git-annex.1.gzbin12278 -> 0 bytes
-rw-r--r--debian/menu2
-rwxr-xr-xdebian/rules2
-rw-r--r--doc/Android.mdwn60
-rw-r--r--doc/android/DCIM.pngbin0 -> 95786 bytes
-rw-r--r--doc/android/appinstalled.png (renamed from doc/assistant/android/appinstalled.png)bin16805 -> 16805 bytes
-rw-r--r--doc/android/apps.pngbin0 -> 53971 bytes
-rw-r--r--doc/android/install.png (renamed from doc/assistant/android/install.png)bin55106 -> 55106 bytes
-rw-r--r--doc/android/newwindow.pngbin0 -> 1009 bytes
-rw-r--r--doc/android/terminal.png (renamed from doc/assistant/android/terminal.png)bin20565 -> 20565 bytes
-rw-r--r--doc/android/webapp.png (renamed from doc/assistant/android/webapp.png)bin64097 -> 64097 bytes
-rw-r--r--doc/assistant.mdwn3
-rw-r--r--doc/bugs/3.20121113_build_error___39__not_in_scope_getAddBoxComR__39__.mdwn33
-rw-r--r--doc/bugs/Adding_box.com_remote_on_Android_fails_for_me.mdwn17
-rw-r--r--doc/bugs/Android_app_permission_denial_on_startup.mdwn16
-rw-r--r--doc/bugs/Huge_annex_out_of_memory_on_switch_to_indirect_mode_and_status.mdwn61
-rw-r--r--doc/bugs/Is_there_any_way_to_rate_limit_uploads_to_an_S3_backend__63__.mdwn19
-rw-r--r--doc/bugs/Local_files_not_found.mdwn50
-rw-r--r--doc/bugs/Lost_S3_Remote/comment_1_6e80e6db6671581d471fc9a54181c04c._comment10
-rw-r--r--doc/bugs/Lost_S3_Remote/comment_2_c99c65882a3924f4890e500f9492b442._comment8
-rw-r--r--doc/bugs/Lost_S3_Remote/comment_3_1e434d5a20a692cd9dc7f6f8f20f30dd._comment8
-rw-r--r--doc/bugs/More_sync__39__ing_weirdness_with_the_assistant_branch_on_OSX.mdwn15
-rw-r--r--doc/bugs/OSX_app_issues/comment_10_54d8f3e429df9a9958370635c890abf0._comment11
-rw-r--r--doc/bugs/OSX_app_issues/comment_10_6d23232fbb15d0ee3ab532a4884f81ed._comment10
-rw-r--r--doc/bugs/OSX_app_issues/comment_11_5db2baa771fd01a284eac8a16c1c8c67._comment8
-rw-r--r--doc/bugs/OSX_app_issues/comment_11_bb2ceb95a844449795addee6986d0763._comment26
-rw-r--r--doc/bugs/OSX_app_issues/comment_12_62170597c7f441d84d48986857998858._comment10
-rw-r--r--doc/bugs/OSX_app_issues/comment_12_f3bc5a4e4895ac9351786f0bdd8005ba._comment11
-rw-r--r--doc/bugs/OSX_app_issues/comment_2_fd560811c57df5cbc3976639642b8b19._comment8
-rw-r--r--doc/bugs/OSX_app_issues/comment_7_93e0bb53ac2d7daef53426fbdc5f92d9._comment15
-rw-r--r--doc/bugs/OSX_app_issues/comment_8_141eac2f3fb25fe18b4268786f00ad6a._comment8
-rw-r--r--doc/bugs/OSX_app_issues/comment_8_f4d5b2645d7f29b80925159efb94a998._comment8
-rw-r--r--doc/bugs/OSX_app_issues/comment_9_2e6dfca0fd8df04066769653724eae28._comment17
-rw-r--r--doc/bugs/OSX_app_issues/comment_9_e1bbe83a1b9a7385ed6d443d0cc22bc7._comment18
-rw-r--r--doc/bugs/Rsync_encrypted_remote_asks_for_ssh_key_password_for_each_file.mdwn30
-rw-r--r--doc/bugs/Small_archive_behaving_like_archive.mdwn2
-rw-r--r--doc/bugs/Stress_test/comment_10_1694e990eab6592159309c231c6dcc16._comment12
-rw-r--r--doc/bugs/Stress_test/comment_11_ab4cb6eefd279e6c1f229e089f703581._comment25
-rw-r--r--doc/bugs/Stress_test/comment_8_a01995bdca7ade7dde9842b53fbc4e0c._comment57
-rw-r--r--doc/bugs/Stress_test/comment_9_9f7efe81b7e40aaa04a865394c53e20f._comment52
-rw-r--r--doc/bugs/Switching_from_indirect_mode_to_direct_mode_breaks_duplicates.mdwn30
-rw-r--r--doc/bugs/Unable_to_switch_back_to_direct_mode.mdwn1
-rw-r--r--doc/bugs/android_4.2.1__44___galaxy_nexus_java.lang.SecurityException.mdwn41
-rw-r--r--doc/bugs/creating_a_plain_directory_where_a_mountpoint_should_have_been.mdwn27
-rw-r--r--doc/bugs/git-annex_has_issues_with_git_when_staging__47__commiting_logs.mdwn34
-rw-r--r--doc/bugs/git-annex_on_crippled_filesystem_can_still_failed_due_to_case_.mdwn32
-rw-r--r--doc/bugs/git_annex_gets_confused_about_remotes_with_dots_in_their_names.mdwn34
-rw-r--r--doc/bugs/git_defunct_processes___40__child_of_git-annex_assistant__41__.mdwn34
-rw-r--r--doc/bugs/wishlist:_more_descriptive_commit_messages_in_git-annex_branch.mdwn39
-rw-r--r--doc/design/assistant.mdwn10
-rw-r--r--doc/design/assistant/OSX/comment_1_9290f6e6f265e906b08631224392b7bf._comment14
-rw-r--r--doc/design/assistant/android.mdwn53
-rw-r--r--doc/design/assistant/blog/day_195__real_android_app.mdwn4
-rw-r--r--doc/design/assistant/blog/day_253__OMG.mdwn2
-rw-r--r--doc/design/assistant/blog/day_254__Android_app_polishing.mdwn35
-rw-r--r--doc/design/assistant/blog/day_255__Debian_release_day.mdwn26
-rw-r--r--doc/design/assistant/blog/day_256__8bit.mdwn27
-rw-r--r--doc/design/assistant/blog/day_257__rainy_day.mdwn6
-rw-r--r--doc/design/assistant/blog/day_258__beginning_of_the_end.mdwn24
-rw-r--r--doc/design/assistant/blog/day_259__Android_dominos_toppling.mdwn15
-rw-r--r--doc/design/assistant/blog/day_260__Windows_dev_environment.mdwn46
-rw-r--r--doc/design/assistant/blog/day_261__Windows_first_stage_complete.mdwn29
-rw-r--r--doc/design/assistant/blog/day_262__DOS_path_separators.mdwn14
-rw-r--r--doc/design/assistant/blog/day_263_catching_up.mdwn11
-rw-r--r--doc/design/assistant/blog/day_264__Windows_second_stage_complete.mdwn21
-rw-r--r--doc/design/assistant/blog/day_265__correctness.mdwn23
-rw-r--r--doc/design/assistant/blog/day_81__enabling_pre-existing_special_remotes.mdwn34
-rw-r--r--doc/design/assistant/partial_content.mdwn22
-rw-r--r--doc/design/assistant/polls/Android_default_directory.mdwn2
-rw-r--r--doc/design/assistant/windows.mdwn5
-rw-r--r--doc/direct_mode.mdwn1
-rw-r--r--doc/forum/Accessing_files_in_bare_repository.mdwn5
-rw-r--r--doc/forum/Cleaning_up_after_aborted_sync_in_direct_mode.mdwn19
-rw-r--r--doc/forum/Does_migrate_ensure_data_integrity__63__.mdwn7
-rw-r--r--doc/forum/How_do_I_dropunused_with_an_rsync_remote__63__.mdwn3
-rw-r--r--doc/forum/How_to_prevent_the_assistant_from_downloading_all_data__63__.mdwn9
-rw-r--r--doc/forum/Problems_syncing_with_box.com.mdwn26
-rw-r--r--doc/forum/Syncronisation_of_syncronisation_between_3_repositories__63__.mdwn11
-rw-r--r--doc/forum/Ubuntu_PPA/comment_4_3a8bbd0a7450a7f5323cd13144824aea._comment12
-rw-r--r--doc/forum/Ubuntu_PPA/comment_5_2e1beaeebda0201c635db8b276cedf20._comment12
-rw-r--r--doc/forum/annexed_file_key_for_web_remote_with_SHA256E_backend.mdwn12
-rw-r--r--doc/forum/first-time_setup_git-annex.mdwn7
-rw-r--r--doc/forum/mistakenly_checked___42__files__42___into_an_annex.__bummer..mdwn3
-rw-r--r--doc/forum/nntp__47__usenet_special_remote.mdwn18
-rw-r--r--doc/forum/switching_to__47__from_direct_mode_while_assistant_is_running.mdwn2
-rw-r--r--doc/git-annex.mdwn4
-rw-r--r--doc/install.mdwn12
-rw-r--r--doc/install/Android.mdwn25
-rw-r--r--doc/install/Windows.mdwn26
-rw-r--r--doc/install/Windows/comment_1_77e6b1023fee32277f1890def86b0106._comment14
-rw-r--r--doc/install/Windows/comment_2_1b4eaffa46dfff0a5e20f7f2016bdf9a._comment52
-rw-r--r--doc/install/Windows/comment_3_b0c4c6e77246b1b4a81f6940e11b67d3._comment10
-rw-r--r--doc/install/cabal.mdwn5
-rw-r--r--doc/install/cabal/comment_1_f04df6bcd50d1d01eb34868bb00ac35c._comment18
-rw-r--r--doc/install/fromscratch.mdwn3
-rw-r--r--doc/news/version_4.20130314.mdwn68
-rw-r--r--doc/news/version_4.20130516.mdwn29
-rw-r--r--doc/special_remotes/bup/comment_10_f78c1ed97d2e4c6ebffaa7482cfe0c9b._comment23
-rw-r--r--doc/special_remotes/bup/comment_11_b53bceb0058acf4d1ab12ea4853ee443._comment24
-rw-r--r--doc/special_remotes/bup/comment_12_65d923226cf6120349d807c5c60f640c._comment8
-rw-r--r--doc/special_remotes/bup/comment_1_96179a003da4444f6fc08867872cda0a._comment43
-rw-r--r--doc/special_remotes/bup/comment_2_612b038c15206f9f3c2e23c7104ca627._comment12
-rw-r--r--doc/special_remotes/bup/comment_3_1186def82741ddab1ade256fb2e59e6f._comment17
-rw-r--r--doc/special_remotes/bup/comment_4_7d22a805dd2914971e7ca628ceea69be._comment10
-rw-r--r--doc/special_remotes/bup/comment_5_61b32f9ee00e6016443a1cf10273959c._comment10
-rw-r--r--doc/special_remotes/bup/comment_6_5942333cde09fd98e26c4f1d389cb76f._comment10
-rw-r--r--doc/special_remotes/bup/comment_7_cb1a0d3076e9d06e7a24204478f6fa98._comment10
-rw-r--r--doc/special_remotes/bup/comment_8_4cbc67e5911748d13cee3c483d7ece8a._comment12
-rw-r--r--doc/special_remotes/bup/comment_9_ca7096a759961af375e6bd49663b45b3._comment10
-rw-r--r--doc/special_remotes/hook/comment_1_6a74a25891974a28a8cb42b87cb53c26._comment32
-rw-r--r--doc/special_remotes/rsync.mdwn22
-rw-r--r--doc/special_remotes/xmpp/comment_1_568247938929a2934e8198fca80b7184._comment11
-rw-r--r--doc/special_remotes/xmpp/comment_2_9fc3f512020b7eb2591d6b7b2e8de2d7._comment10
-rw-r--r--doc/tips/assume-unstaged/comment_1_44abd811ef79a85e557418e17a3927be._comment10
-rw-r--r--doc/tips/using_Amazon_S3/comment_1_666a26f95024760c99c627eed37b1966._comment8
-rw-r--r--doc/tips/using_Amazon_S3/comment_2_f5a0883be7dbb421b584c6dc0165f1ef._comment8
-rw-r--r--doc/todo/Use_a_remote_as_a_sharing_site_for_files_with_obfuscated_URLs.mdwn7
-rw-r--r--doc/todo/cache_key_info/comment_1_578df1b3b2cbfdc4aa1805378f35dc48._comment11
-rw-r--r--doc/todo/union_mounting/comment_1_cb08435812dd7766de26199c73f38e8b._comment8
-rw-r--r--doc/todo/union_mounting/comment_2_240b1736f6bd4fbf87c372d3a46e661b._comment9
-rw-r--r--doc/todo/windows_support.mdwn74
-rw-r--r--doc/todo/windows_support/comment_1_3cc26ad8101a22e95a8c60cf0c4dedcc._comment10
-rw-r--r--doc/todo/windows_support/comment_2_8acae818ce468967499050bbe3c532ea._comment12
-rw-r--r--doc/todo/windows_support/comment_3_bd0a12f4c9b884ab8a06082842381a01._comment8
-rw-r--r--doc/todo/windows_support/comment_4_ad06b98b2ddac866ffee334e41fee6a8._comment8
-rw-r--r--doc/todo/windows_support/comment_5_444fc7251f57db241b6e80abae41851c._comment10
-rw-r--r--doc/todo/windows_support/comment_6_34f1f60b570c389bb1e741b990064a7e._comment8
-rw-r--r--doc/todo/wishlist:_git_annex_put_--_same_as_get__44___but_for_defaults.mdwn17
-rw-r--r--doc/todo/wishlist:_print_locations_for_files_in_rsync_remote.mdwn6
-rw-r--r--doc/todo/wishlist:_remove_files_and_symlinks_but_keep_in_remote.mdwn7
-rw-r--r--git-annex.14
-rw-r--r--git-annex.cabal21
-rw-r--r--git-annex.hs5
-rw-r--r--standalone/android/Makefile2
-rw-r--r--standalone/android/haskell-patches/DAV_0.3-0001-build-without-TH.patch (renamed from standalone/android/haskell-patches/DAV-0.3-0001-build-without-TH.patch)0
-rw-r--r--standalone/android/haskell-patches/aeson_0.6.1.0_0001-disable-TH.patch (renamed from standalone/android/haskell-patches/aeson-0.6.1.0_0001-disable-TH.patch)0
-rw-r--r--standalone/android/haskell-patches/gsasl_0.3.5-0001-link-with-libgsasl.patch25
-rw-r--r--standalone/android/haskell-patches/hS3_0.5.7_0001-fix-build.patch23
-rw-r--r--standalone/android/haskell-patches/hamlet_1.1.6.1_0001-remove-TH.patch (renamed from standalone/android/haskell-patches/hamlet-1.1.6.1_0001-remove-TH.patch)26
-rw-r--r--standalone/android/haskell-patches/lens_3.8.5-0001-build-without-TH.patch (renamed from standalone/android/haskell-patches/lens-3.8.5-0001-build-without-TH.patch)0
-rw-r--r--standalone/android/haskell-patches/persistent_1.1.5.1_0001-disable-TH.patch71
-rw-r--r--standalone/android/haskell-patches/shakespeare-js_1.1.2_0001-remove-TH.patch308
-rw-r--r--standalone/android/haskell-patches/shakespeare_1.0.3_0001-remove-TH.patch (renamed from standalone/android/haskell-patches/shakespeare-1.0.3_0001-remove-TH.patch)28
-rw-r--r--standalone/android/haskell-patches/socks_0.4.2_0001-remove-IPv6-stuff.patch107
-rw-r--r--standalone/android/haskell-patches/wai-app-static_1.3.1-remove-TH.patch (renamed from standalone/android/haskell-patches/wai-app-static-1.3.1-remove-TH.patch)0
-rw-r--r--standalone/android/haskell-patches/yesod-core_1.1.8_0001-remove-TH.patch (renamed from standalone/android/haskell-patches/yesod-core-1.1.8_0001-remove-TH.patch)0
-rw-r--r--standalone/android/haskell-patches/yesod-form_1.2.1.1-0002-expand-TH.patch (renamed from standalone/android/haskell-patches/yesod-form-1.2.1.1-0002-expand-TH.patch)0
-rw-r--r--standalone/android/haskell-patches/yesod-static_1.1.2-remove-TH.patch (renamed from standalone/android/haskell-patches/yesod-static-1.1.2-remove-TH.patch)13
-rw-r--r--standalone/android/icons/drawable-hdpi/ic_stat_service_notification_icon.pngbin0 -> 1071 bytes
-rw-r--r--standalone/android/icons/drawable-ldpi/ic_stat_service_notification_icon.pngbin0 -> 587 bytes
-rw-r--r--standalone/android/icons/drawable-mdpi/ic_stat_service_notification_icon.pngbin0 -> 712 bytes
-rwxr-xr-xstandalone/android/install-haskell-packages209
-rw-r--r--standalone/android/openssh.patch13
-rwxr-xr-xstandalone/android/runshell33
-rwxr-xr-xstandalone/android/startbin0 -> 6850 bytes
-rw-r--r--standalone/android/term.patch73
-rw-r--r--templates/configurators/addrepository/misc.hamlet12
-rw-r--r--templates/configurators/newrepository/first.hamlet12
-rw-r--r--templates/documentation/repogroup.hamlet2
-rw-r--r--templates/page.hamlet2
434 files changed, 4552 insertions, 26756 deletions
diff --git a/Annex.hs b/Annex.hs
index 3893f61..f9cbfef 100644
--- a/Annex.hs
+++ b/Annex.hs
@@ -103,7 +103,7 @@ data AnnexState = AnnexState
, auto :: Bool
, branchstate :: BranchState
, repoqueue :: Maybe Git.Queue.Queue
- , catfilehandle :: Maybe CatFileHandle
+ , catfilehandles :: M.Map FilePath CatFileHandle
, checkattrhandle :: Maybe CheckAttrHandle
, forcebackend :: Maybe String
, limit :: Matcher (FileInfo -> Annex Bool)
@@ -133,7 +133,7 @@ newState gitrepo = AnnexState
, auto = False
, branchstate = startBranchState
, repoqueue = Nothing
- , catfilehandle = Nothing
+ , catfilehandles = M.empty
, checkattrhandle = Nothing
, forcebackend = Nothing
, limit = Left []
diff --git a/Annex/Branch.hs b/Annex/Branch.hs
index 021cd39..9a89a65 100644
--- a/Annex/Branch.hs
+++ b/Annex/Branch.hs
@@ -24,7 +24,6 @@ module Annex.Branch (
) where
import qualified Data.ByteString.Lazy.Char8 as L
-import System.Posix.Env
import Common.Annex
import Annex.BranchState
@@ -41,6 +40,7 @@ import Git.FilePath
import Annex.CatFile
import Annex.Perms
import qualified Annex
+import Utility.Env
{- Name of the branch that is used to store git-annex's information. -}
name :: Git.Ref
@@ -288,12 +288,14 @@ withIndex' bootstrapping a = do
f <- fromRepo gitAnnexIndex
g <- gitRepo
#ifdef __ANDROID__
- {- Work around for weird getEnvironment breakage on Android. See
+ {- This should not be necessary on Android, but there is some
+ - weird getEnvironment breakage. See
- https://github.com/neurocyte/ghc-android/issues/7
- - Instead, use getEnv to get some key environment variables that
+ - 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
+ let getEnvPair k = maybe Nothing (\v -> Just (k, v)) <$>
+ catchMaybeIO (getEnv k)
e <- liftIO $ catMaybes <$> forM keyenv getEnvPair
#else
e <- liftIO getEnvironment
diff --git a/Annex/CatFile.hs b/Annex/CatFile.hs
index 292d624..71b8985 100644
--- a/Annex/CatFile.hs
+++ b/Annex/CatFile.hs
@@ -1,6 +1,6 @@
{- git cat-file interface, with handle automatically stored in the Annex monad
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2013 Joey Hess <joey@kitenet.net>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -15,12 +15,14 @@ module Annex.CatFile (
) where
import qualified Data.ByteString.Lazy as L
+import qualified Data.Map as M
import Common.Annex
import qualified Git
import qualified Git.CatFile
import qualified Annex
import Git.Types
+import Git.FilePath
catFile :: Git.Branch -> FilePath -> Annex L.ByteString
catFile branch file = do
@@ -37,18 +39,25 @@ 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 = maybe startup return =<< Annex.getState Annex.catfilehandle
- where
- startup = do
- h <- inRepo Git.CatFile.catFileStart
- Annex.changeState $ \s -> s { Annex.catfilehandle = Just h }
- return h
+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. -}
catKey :: Ref -> Annex (Maybe Key)
catKey ref = do
- l <- encodeW8 . L.unpack <$> catObject ref
+ l <- fromInternalGitPath . encodeW8 . L.unpack <$> catObject ref
return $ if isLinkToAnnex l
then fileKey $ takeFileName l
else Nothing
@@ -56,7 +65,7 @@ catKey ref = do
{- From a file in git back to the key.
-
- Prefixing the file with ./ makes this work even if in a subdirectory
- - of a repo. For some reason, HEAD is sometimes needed.
+ - of a repo.
-}
catKeyFile :: FilePath -> Annex (Maybe Key)
-catKeyFile f = catKey $ Ref $ "HEAD:./" ++ f
+catKeyFile f = catKey $ Ref $ ":./" ++ f
diff --git a/Annex/Content.hs b/Annex/Content.hs
index 6f2c969..5ec3c1b 100644
--- a/Annex/Content.hs
+++ b/Annex/Content.hs
@@ -5,6 +5,8 @@
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Annex.Content (
inAnnex,
inAnnexSafe,
@@ -31,6 +33,7 @@ module Annex.Content (
) where
import System.IO.Unsafe (unsafeInterleaveIO)
+import System.PosixCompat.Files
import Common.Annex
import Logs.Location
@@ -84,14 +87,22 @@ inAnnexSafe = inAnnex' (fromMaybe False) (Just False) go
where
go f = liftIO $ openforlock f >>= check
openforlock f = catchMaybeIO $
+#ifndef __WINDOWS__
openFd f ReadOnly Nothing defaultFileFlags
+#else
+ return ()
+#endif
check Nothing = return is_missing
check (Just h) = do
+#ifndef __WINDOWS__
v <- getLock h (ReadLock, AbsoluteSeek, 0, 0)
closeFd h
return $ case v of
Just _ -> is_locked
Nothing -> is_unlocked
+#else
+ return is_unlocked
+#endif
is_locked = Nothing
is_unlocked = Just True
is_missing = Just False
@@ -100,6 +111,9 @@ inAnnexSafe = inAnnex' (fromMaybe False) (Just False) go
- it. (If the content is not present, no locking is done.) -}
lockContent :: Key -> Annex a -> Annex a
lockContent key a = do
+#ifdef __WINDOWS__
+ a
+#else
file <- calcRepo $ gitAnnexLocation key
bracketIO (openforlock file >>= lock) unlock a
where
@@ -121,6 +135,7 @@ lockContent key a = do
Right _ -> return $ Just fd
unlock Nothing = noop
unlock (Just l) = closeFd l
+#endif
{- Runs an action, passing it a temporary filename to get,
- and if the action succeeds, moves the temp file into
@@ -470,9 +485,8 @@ preseedTmp key file = go =<< inAnnex key
liftIO $ copyFileExternal s file
)
-{- Blocks writing to an annexed file. The file is made unwritable
- - to avoid accidental edits. core.sharedRepository may change
- - who can read it. -}
+{- 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
@@ -483,7 +497,9 @@ freezeContent file = unlessM crippledFileSystem $
go AllShared = modifyFileMode file $
removeModes writeModes .
addModes readModes
- go _ = preventWrite file
+ go _ = modifyFileMode file $
+ removeModes writeModes .
+ addModes [ownerReadMode]
{- Allows writing to an annexed file that freezeContent was called on
- before. -}
diff --git a/Annex/Content/Direct.hs b/Annex/Content/Direct.hs
index 54befdf..b885b5e 100644
--- a/Annex/Content/Direct.hs
+++ b/Annex/Content/Direct.hs
@@ -29,7 +29,7 @@ import Common.Annex
import qualified Annex
import Annex.Perms
import qualified Git
-import Utility.TempFile
+import Utility.Tmp
import Logs.Location
import Utility.InodeCache
@@ -110,7 +110,7 @@ goodContent key file = sameInodeCache file =<< recordedInodeCache key
recordedInodeCache :: Key -> Annex [InodeCache]
recordedInodeCache key = withInodeCacheFile key $ \f ->
liftIO $ catchDefaultIO [] $
- mapMaybe readInodeCache . lines <$> readFile f
+ mapMaybe readInodeCache . lines <$> readFileStrict f
{- Caches an inode for a file.
-
diff --git a/Annex/Direct.hs b/Annex/Direct.hs
index f8bdaeb..67822f2 100644
--- a/Annex/Direct.hs
+++ b/Annex/Direct.hs
@@ -182,25 +182,28 @@ toDirect k f = fromMaybe noop =<< toDirectGen k f
toDirectGen :: Key -> FilePath -> Annex (Maybe (Annex ()))
toDirectGen k f = do
loc <- calcRepo $ gitAnnexLocation k
- absf <- liftIO $ absPath f
- locs <- filter (/= absf) <$> addAssociatedFile k f
- case locs of
- [] -> ifM (liftIO $ doesFileExist loc)
- ( return $ Just $ do
- {- Move content from annex to direct file. -}
- thawContentDir loc
- updateInodeCache k loc
- thawContent loc
- replaceFile f $ liftIO . moveFile loc
- , return Nothing
- )
- (loc':_) -> ifM (isNothing <$> getAnnexLinkTarget loc')
- {- Another direct file has the content; copy it. -}
- ( return $ Just $
+ ifM (liftIO $ doesFileExist loc)
+ ( fromindirect loc
+ , fromdirect
+ )
+ where
+ fromindirect loc = return $ Just $ do
+ {- Move content from annex to direct file. -}
+ thawContentDir loc
+ updateInodeCache k loc
+ addAssociatedFile k f
+ thawContent loc
+ replaceFile f $ liftIO . moveFile loc
+ fromdirect = do
+ {- Copy content from another direct file. -}
+ absf <- liftIO $ absPath f
+ locs <- filterM (\loc -> isNothing <$> getAnnexLinkTarget loc) =<<
+ (filter (/= absf) <$> addAssociatedFile k f)
+ case locs of
+ (loc:_) -> return $ Just $
replaceFile f $
- liftIO . void . copyFileExternal loc'
- , return Nothing
- )
+ liftIO . void . copyFileExternal loc
+ _ -> return Nothing
{- Removes a direct mode file, while retaining its content. -}
removeDirect :: Key -> FilePath -> Annex ()
diff --git a/Annex/Environment.hs b/Annex/Environment.hs
index 357ad69..3356938 100644
--- a/Annex/Environment.hs
+++ b/Annex/Environment.hs
@@ -1,18 +1,19 @@
{- git-annex environment
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012, 2013 Joey Hess <joey@kitenet.net>
-
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Annex.Environment where
import Common.Annex
+import Utility.Env
import Utility.UserInfo
import qualified Git.Config
-import System.Posix.Env
-
{- Checks that the system's environment allows git to function.
- Git requires a GECOS username, or suitable git configuration, or
- environment variables. -}
@@ -23,9 +24,21 @@ checkEnvironment = do
liftIO checkEnvironmentIO
checkEnvironmentIO :: IO ()
-checkEnvironmentIO = do
+checkEnvironmentIO =
+#ifdef __WINDOWS__
+ noop
+#else
whenM (null <$> myUserGecos) $ do
username <- myUserName
- -- existing environment is not overwritten
- setEnv "GIT_AUTHOR_NAME" username False
- setEnv "GIT_COMMITTER_NAME" username False
+ 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
diff --git a/Annex/Journal.hs b/Annex/Journal.hs
index 2df5294..e68591c 100644
--- a/Annex/Journal.hs
+++ b/Annex/Journal.hs
@@ -9,6 +9,8 @@
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Annex.Journal where
import System.IO.Binary
@@ -64,26 +66,38 @@ journalDirty = not . null <$> getJournalFiles
journalFile :: FilePath -> Git.Repo -> FilePath
journalFile file repo = gitAnnexJournalDir repo </> concatMap mangle file
where
- mangle '/' = "_"
- mangle '_' = "__"
- mangle c = [c]
+ 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 "//" "_" . replace "_" "/"
+fileJournal = replace [pathSeparator, pathSeparator] "_" .
+ replace "_" [pathSeparator]
{- Runs an action that modifies the journal, using locking to avoid
- contention with other git-annex processes. -}
lockJournal :: Annex a -> Annex a
lockJournal a = do
- file <- fromRepo gitAnnexJournalLock
- createAnnexDirectory $ takeDirectory file
+ lockfile <- fromRepo gitAnnexJournalLock
+ createAnnexDirectory $ takeDirectory lockfile
mode <- annexFileMode
- bracketIO (lock file mode) unlock a
+ bracketIO (lock lockfile mode) unlock a
where
- lock file mode = do
- l <- noUmask mode $ createFile file mode
+ lock lockfile mode = do
+#ifndef __WINDOWS__
+ l <- noUmask mode $ createFile lockfile mode
waitToSetLock l (WriteLock, AbsoluteSeek, 0, 0)
return l
+#else
+ writeFile lockfile ""
+ return lockfile
+#endif
+#ifndef __WINDOWS__
unlock = closeFd
+#else
+ unlock = removeFile
+#endif
+
diff --git a/Annex/Link.hs b/Annex/Link.hs
index 931836d..b41e6d1 100644
--- a/Annex/Link.hs
+++ b/Annex/Link.hs
@@ -18,6 +18,7 @@ import qualified Git.HashObject
import qualified Git.UpdateIndex
import qualified Annex.Queue
import Git.Types
+import Git.FilePath
type LinkTarget = String
@@ -27,25 +28,27 @@ isAnnexLink file = maybe Nothing (fileKey . takeFileName) <$> getAnnexLinkTarget
{- Gets the link target of a symlink.
-
- - On a filesystem that does not support symlinks, get the link
- - target by looking inside the file. (Only return at first 8k of the file,
- - more than enough for any symlink target.)
+ - On a filesystem that does not support symlinks, fall back to getting the
+ - link target by looking inside the file. (Only return at first 8k of the
+ - file, more than enough for any symlink target.)
-
- Returns Nothing if the file is not a symlink, or not a link to annex
- content.
-}
getAnnexLinkTarget :: FilePath -> Annex (Maybe LinkTarget)
-getAnnexLinkTarget file = do
- v <- ifM (coreSymlinks <$> Annex.getGitConfig)
- ( liftIO $ catchMaybeIO $ readSymbolicLink file
- , liftIO $ catchMaybeIO $ readfilestart file
- )
- case v of
- Nothing -> return Nothing
- Just l
- | isLinkToAnnex l -> return v
- | otherwise -> return Nothing
+getAnnexLinkTarget file =
+ check readSymbolicLink $
+ check readfilestart $
+ 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
+
readfilestart f = do
h <- openFile f ReadMode
fileEncoding h
@@ -74,7 +77,8 @@ addAnnexLink linktarget file = do
{- Injects a symlink target into git, returning its Sha. -}
hashSymlink :: LinkTarget -> Annex Sha
-hashSymlink linktarget = inRepo $ Git.HashObject.hashObject BlobObject linktarget
+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 ()
diff --git a/Annex/LockPool.hs b/Annex/LockPool.hs
index 45fc55b..d8bc084 100644
--- a/Annex/LockPool.hs
+++ b/Annex/LockPool.hs
@@ -5,6 +5,8 @@
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Annex.LockPool where
import qualified Data.Map as M
@@ -20,17 +22,24 @@ lockFile file = go =<< fromPool file
where
go (Just _) = noop -- already locked
go Nothing = do
+#ifndef __WINDOWS__
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 __WINDOWS__
liftIO $ closeFd fd
+#endif
changePool $ M.delete file
getPool :: Annex (M.Map FilePath Fd)
diff --git a/Annex/Ssh.hs b/Annex/Ssh.hs
index cf92bd2..940cbb5 100644
--- a/Annex/Ssh.hs
+++ b/Annex/Ssh.hs
@@ -10,11 +10,11 @@
module Annex.Ssh (
sshCachingOptions,
sshCleanup,
+ sshCacheDir,
sshReadPort,
) where
import qualified Data.Map as M
-import System.Posix.Env
import Common.Annex
import Annex.LockPool
@@ -22,6 +22,7 @@ import Annex.Perms
import qualified Build.SysConfig as SysConfig
import qualified Annex
import Config
+import Utility.Env
{- Generates parameters to ssh to a given host (or user@host) on a given
- port, with connection caching. -}
@@ -95,6 +96,7 @@ sshCleanup = go =<< sshCacheDir
liftIO (catchDefaultIO [] $ dirContents dir)
forM_ sockets cleanup
cleanup socketfile = do
+#ifndef __WINDOWS__
-- 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
@@ -110,6 +112,9 @@ sshCleanup = go =<< sshCacheDir
Left _ -> noop
Right _ -> stopssh socketfile
liftIO $ closeFd fd
+#else
+ stopssh socketfile
+#endif
stopssh socketfile = do
let (host, port) = socket2hostport socketfile
(_, params) <- sshInfo (host, port)
diff --git a/Annex/Version.hs b/Annex/Version.hs
index 31c6501..7859707 100644
--- a/Annex/Version.hs
+++ b/Annex/Version.hs
@@ -5,6 +5,8 @@
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Annex.Version where
import Common.Annex
@@ -23,7 +25,11 @@ supportedVersions :: [Version]
supportedVersions = [defaultVersion, directModeVersion]
upgradableVersions :: [Version]
+#ifndef __WINDOWS__
upgradableVersions = ["0", "1", "2"]
+#else
+upgradableVersions = ["2"]
+#endif
versionField :: ConfigKey
versionField = annexConfig "version"
diff --git a/Assistant.hs b/Assistant.hs
index e246145..b5e902d 100644
--- a/Assistant.hs
+++ b/Assistant.hs
@@ -177,15 +177,16 @@ startDaemon assistant foreground listenhost startbrowser = do
logfd <- liftIO $ openLog logfile
if foreground
then do
- liftIO $ debugM desc $ "logging to " ++ logfile
- liftIO $ Utility.Daemon.lockPidFile pidfile
origout <- liftIO $ catchMaybeIO $
fdToHandle =<< dup stdOutput
origerr <- liftIO $ catchMaybeIO $
fdToHandle =<< dup stdError
- liftIO $ Utility.LogFile.redirLog logfd
- showStart "." desc
- start id $
+ 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
diff --git a/Assistant/DaemonStatus.hs b/Assistant/DaemonStatus.hs
index f945211..af072d8 100644
--- a/Assistant/DaemonStatus.hs
+++ b/Assistant/DaemonStatus.hs
@@ -9,7 +9,7 @@ module Assistant.DaemonStatus where
import Assistant.Common
import Assistant.Alert.Utility
-import Utility.TempFile
+import Utility.Tmp
import Assistant.Types.NetMessager
import Utility.NotificationBroadcaster
import Logs.Transfer
diff --git a/Assistant/Install.hs b/Assistant/Install.hs
index ac1af01..3c7d096 100644
--- a/Assistant/Install.hs
+++ b/Assistant/Install.hs
@@ -16,7 +16,8 @@ import Assistant.Ssh
import Config.Files
import Utility.FileMode
import Utility.Shell
-import Utility.TempFile
+import Utility.Tmp
+import Utility.Env
#ifdef darwin_HOST_OS
import Utility.OSX
@@ -24,8 +25,6 @@ import Utility.OSX
import Utility.FreeDesktop
#endif
-import System.Posix.Env
-
standaloneAppBase :: IO (Maybe FilePath)
standaloneAppBase = getEnv "GIT_ANNEX_APP_BASE"
@@ -63,7 +62,7 @@ ensureInstalled = go =<< standaloneAppBase
let runshell var = "exec " ++ base </> "runshell" ++
" git-annex-shell -c \"" ++ var ++ "\""
let content = unlines
- [ shebang
+ [ shebang_local
, "set -e"
, "if [ \"x$SSH_ORIGINAL_COMMAND\" != \"x\" ]; then"
, runshell "$SSH_ORIGINAL_COMMAND"
diff --git a/Assistant/Install/AutoStart.o b/Assistant/Install/AutoStart.o
index 64a1a91..0241a15 100644
--- a/Assistant/Install/AutoStart.o
+++ b/Assistant/Install/AutoStart.o
Binary files differ
diff --git a/Assistant/Install/Menu.o b/Assistant/Install/Menu.o
new file mode 100644
index 0000000..daada79
--- /dev/null
+++ b/Assistant/Install/Menu.o
Binary files differ
diff --git a/Assistant/Ssh.hs b/Assistant/Ssh.hs
index c7543d3..7875c4c 100644
--- a/Assistant/Ssh.hs
+++ b/Assistant/Ssh.hs
@@ -8,7 +8,7 @@
module Assistant.Ssh where
import Common.Annex
-import Utility.TempFile
+import Utility.Tmp
import Utility.UserInfo
import Utility.Shell
import Git.Remote
@@ -125,7 +125,7 @@ addAuthorizedKeysCommand rsynconly dir pubkey = intercalate "&&"
echoval v = "echo " ++ shellEscape v
wrapper = "~/.ssh/git-annex-shell"
script =
- [ shebang
+ [ shebang_portable
, "set -e"
, "if [ \"x$SSH_ORIGINAL_COMMAND\" != \"x\" ]; then"
, runshell "$SSH_ORIGINAL_COMMAND"
@@ -146,7 +146,7 @@ authorizedKeysLine rsynconly dir pubkey
{- Generates a ssh key pair. -}
genSshKeyPair :: IO SshKeyPair
-genSshKeyPair = withTempDir "git-annex-keygen" $ \dir -> do
+genSshKeyPair = withTmpDir "git-annex-keygen" $ \dir -> do
ok <- boolSystem "ssh-keygen"
[ Param "-P", Param "" -- no password
, Param "-f", File $ dir </> "key"
diff --git a/Assistant/Threads/WebApp.hs b/Assistant/Threads/WebApp.hs
index 19300cf..3c1e617 100644
--- a/Assistant/Threads/WebApp.hs
+++ b/Assistant/Threads/WebApp.hs
@@ -33,7 +33,7 @@ import Assistant.WebApp.Control
import Assistant.WebApp.OtherRepos
import Assistant.Types.ThreadedMonad
import Utility.WebApp
-import Utility.TempFile
+import Utility.Tmp
import Utility.FileMode
import Git
@@ -74,7 +74,7 @@ webAppThread assistantdata urlrenderer noannex listenhost postfirstrun onstartup
, return app
)
runWebApp listenhost app' $ \addr -> if noannex
- then withTempFile "webapp.html" $ \tmpfile _ ->
+ then withTmpFile "webapp.html" $ \tmpfile _ ->
go addr webapp tmpfile Nothing
else do
let st = threadState assistantdata
diff --git a/Assistant/WebApp/Configurators/Delete.hs b/Assistant/WebApp/Configurators/Delete.hs
index fffbacf..c7fa5f3 100644
--- a/Assistant/WebApp/Configurators/Delete.hs
+++ b/Assistant/WebApp/Configurators/Delete.hs
@@ -26,6 +26,7 @@ import Types.StandardGroups
import System.IO.HVFS (SystemFS(..))
import qualified Data.Text as T
import qualified Data.Map as M
+import System.Path
notCurrentRepo :: UUID -> Handler RepHtml -> Handler RepHtml
notCurrentRepo uuid a = go =<< liftAnnex (Remote.remoteFromUUID uuid)
diff --git a/Assistant/WebApp/Configurators/Local.hs b/Assistant/WebApp/Configurators/Local.hs
index 41de69a..e7d20a4 100644
--- a/Assistant/WebApp/Configurators/Local.hs
+++ b/Assistant/WebApp/Configurators/Local.hs
@@ -38,7 +38,6 @@ import Config
import qualified Data.Text as T
import qualified Data.Map as M
import Data.Char
-import System.Posix.Directory
data RepositoryPath = RepositoryPath Text
deriving Show
@@ -138,13 +137,22 @@ getFirstRepositoryR :: Handler RepHtml
getFirstRepositoryR = postFirstRepositoryR
postFirstRepositoryR :: Handler RepHtml
postFirstRepositoryR = page "Getting started" (Just Configuration) $ do
+#ifdef __ANDROID__
+ androidspecial <- liftIO $ doesDirectoryExist "/sdcard/DCIM"
+ let path = "/sdcard/annex"
+#else
+ let androidspecial = False
path <- liftIO . defaultRepositoryPath =<< lift inFirstRun
+#endif
((res, form), enctype) <- lift $ runFormPost $ newRepositoryForm path
case res of
FormSuccess (RepositoryPath p) -> lift $
- startFullAssistant $ T.unpack p
+ startFullAssistant (T.unpack p) ClientGroup
_ -> $(widgetFile "configurators/newrepository/first")
+getAndroidCameraRepositoryR :: Handler ()
+getAndroidCameraRepositoryR = startFullAssistant "/sdcard/DCIM" SourceGroup
+
{- Adding a new local repository, which may be entirely separate, or may
- be connected to the current repository. -}
getNewRepositoryR :: Handler RepHtml
@@ -291,6 +299,10 @@ driveList = mapM (gen . mnt_dir) =<< filter sane <$> getMounts
| dir == "/tmp" = False
| dir == "/run/shm" = False
| dir == "/run/lock" = False
+#ifdef __ANDROID__
+ | dir == "/mnt/sdcard" = False
+ | dir == "/sdcard" = False
+#endif
| otherwise = True
#else
driveList = return []
@@ -299,16 +311,15 @@ driveList = return []
{- Bootstraps from first run mode to a fully running assistant in a
- repository, by running the postFirstRun callback, which returns the
- url to the new webapp. -}
-startFullAssistant :: FilePath -> Handler ()
-startFullAssistant path = do
+startFullAssistant :: FilePath -> StandardGroup -> Handler ()
+startFullAssistant path repogroup = do
webapp <- getYesod
url <- liftIO $ do
isnew <- makeRepo path False
u <- initRepo isnew True path Nothing
- inDir path $
- setStandardGroup u ClientGroup
+ inDir path $ setStandardGroup u repogroup
addAutoStartFile path
- changeWorkingDirectory path
+ setCurrentDirectory path
fromJust $ postFirstRun webapp
redirect $ T.pack url
diff --git a/Assistant/WebApp/Configurators/Ssh.hs b/Assistant/WebApp/Configurators/Ssh.hs
index 6f6fded..49d8946 100644
--- a/Assistant/WebApp/Configurators/Ssh.hs
+++ b/Assistant/WebApp/Configurators/Ssh.hs
@@ -6,6 +6,7 @@
-}
{-# LANGUAGE TypeFamilies, QuasiQuotes, MultiParamTypeClasses, TemplateHaskell, OverloadedStrings, RankNTypes #-}
+{-# LANGUAGE CPP #-}
module Assistant.WebApp.Configurators.Ssh where
@@ -64,9 +65,17 @@ sshInputAForm hostnamefield def = SshInput
<*> aopt textField "Directory" (Just $ Just $ fromMaybe (T.pack gitAnnexAssistantDefaultDir) $ inputDirectory def)
<*> areq intField "Port" (Just $ inputPort def)
where
+ check_username = checkBool (all (`notElem` "/:@ \t") . T.unpack)
+ bad_username textField
+
+ bad_username = "bad user name" :: Text
+#ifndef __ANDROID__
+ bad_hostname = "cannot resolve host name" :: Text
+
check_hostname = checkM (liftIO . checkdns) hostnamefield
checkdns t = do
let h = T.unpack t
+ let canonname = Just $ defaultHints { addrFlags = [AI_CANONNAME] }
r <- catchMaybeIO $ getAddrInfo canonname (Just h) Nothing
return $ case catMaybes . map addrCanonName <$> r of
-- canonicalize input hostname if it had no dot
@@ -75,13 +84,10 @@ sshInputAForm hostnamefield def = SshInput
| otherwise -> Right $ T.pack fullname
Just [] -> Right t
Nothing -> Left bad_hostname
- canonname = Just $ defaultHints { addrFlags = [AI_CANONNAME] }
-
- check_username = checkBool (all (`notElem` "/:@ \t") . T.unpack)
- bad_username textField
-
- bad_hostname = "cannot resolve host name" :: Text
- bad_username = "bad user name" :: Text
+#else
+ -- getAddrInfo currently broken on Android
+ check_hostname = hostnamefield -- unchecked
+#endif
data ServerStatus
= UntestedServer
diff --git a/Assistant/WebApp/Configurators/WebDAV.hs b/Assistant/WebApp/Configurators/WebDAV.hs
index d3bd6a6..a14359e 100644
--- a/Assistant/WebApp/Configurators/WebDAV.hs
+++ b/Assistant/WebApp/Configurators/WebDAV.hs
@@ -135,7 +135,6 @@ makeWebDavRemote name creds setup config = do
setup r
liftAssistant $ syncRemote r
redirect $ EditNewCloudRepositoryR $ Remote.uuid r
-#endif
{- Only returns creds previously used for the same hostname. -}
previouslyUsedWebDAVCreds :: String -> Annex (Maybe CredPair)
@@ -145,6 +144,7 @@ previouslyUsedWebDAVCreds hostname =
samehost url = case urlHost =<< WebDAV.configUrl url of
Nothing -> False
Just h -> h == hostname
+#endif
urlHost :: String -> Maybe String
urlHost url = uriRegName <$> (uriAuthority =<< parseURI url)
diff --git a/Assistant/WebApp/routes b/Assistant/WebApp/routes
index bae6607..831d879 100644
--- a/Assistant/WebApp/routes
+++ b/Assistant/WebApp/routes
@@ -21,8 +21,9 @@
/config/xmpp/needcloudrepo/#UUID NeedCloudRepoR GET
/config/addrepository AddRepositoryR GET
-/config/repository/new/first FirstRepositoryR GET POST
/config/repository/new NewRepositoryR GET POST
+/config/repository/new/first FirstRepositoryR GET POST
+/config/repository/new/androidcamera AndroidCameraRepositoryR GET
/config/repository/switcher RepositorySwitcherR GET
/config/repository/switchto/#FilePath SwitchToRepositoryR GET
/config/repository/combine/#FilePathAndUUID CombineRepositoryR GET
diff --git a/Assistant/XMPP/Git.hs b/Assistant/XMPP/Git.hs
index c1605be..f087f6d 100644
--- a/Assistant/XMPP/Git.hs
+++ b/Assistant/XMPP/Git.hs
@@ -32,10 +32,10 @@ import qualified Remote as Remote
import Remote.List
import Utility.FileMode
import Utility.Shell
+import Utility.Env
import Network.Protocol.XMPP
import qualified Data.Text as T
-import System.Posix.Env
import System.Posix.Types
import System.Process (std_in, std_out, std_err)
import Control.Concurrent
@@ -92,8 +92,7 @@ xmppPush cid gitpush handledeferred = runPush SendPack cid handledeferred $ do
(readpush, Fd outf) <- liftIO createPipe
(Fd controlf, writecontrol) <- liftIO createPipe
- tmp <- liftAnnex $ fromRepo gitAnnexTmpDir
- let tmpdir = tmp </> "xmppgit"
+ tmpdir <- gettmpdir
installwrapper tmpdir
env <- liftIO getEnvironment
@@ -156,10 +155,21 @@ xmppPush cid gitpush handledeferred = runPush SendPack cid handledeferred $ do
let wrapper = tmpdir </> "git-remote-xmpp"
program <- readProgramFile
writeFile wrapper $ unlines
- [ shebang
+ [ shebang_local
, "exec " ++ program ++ " xmppgit"
]
modifyFileMode wrapper $ addModes executeModes
+ {- Use GIT_ANNEX_TMP_DIR if set, since that may be a better temp
+ - dir (ie, not on a crippled filesystem where we can't make
+ - the wrapper executable). -}
+ gettmpdir = do
+ v <- liftIO $ getEnv "GIT_ANNEX_TMP_DIR"
+ case v of
+ Nothing -> do
+ tmp <- liftAnnex $ fromRepo gitAnnexTmpDir
+ return $ tmp </> "xmppgit"
+ Just d -> return $ d </> "xmppgit"
+
type EnvVar = String
diff --git a/Backend/SHA.hs b/Backend/SHA.hs
index 77bd2c1..a735ce1 100644
--- a/Backend/SHA.hs
+++ b/Backend/SHA.hs
@@ -12,11 +12,11 @@ import qualified Annex
import Types.Backend
import Types.Key
import Types.KeySource
+import Utility.ExternalSHA
import qualified Build.SysConfig as SysConfig
import Data.Digest.Pure.SHA
import qualified Data.ByteString.Lazy as L
-import System.Process
import Data.Char
type SHASize = Int
@@ -55,29 +55,11 @@ shaNameE size = shaName size ++ "E"
shaN :: SHASize -> FilePath -> Integer -> Annex String
shaN shasize file filesize = do
showAction "checksum"
- case shaCommand shasize filesize of
- Left sha -> liftIO $ sha <$> L.readFile file
- Right command -> liftIO $ parse command . lines <$>
- readsha command (toCommand [File file])
- where
- parse command [] = bad command
- parse command (l:_)
- | null sha = bad command
- -- sha is prefixed with \ when filename contains certian chars
- | "\\" `isPrefixOf` sha = drop 1 sha
- | otherwise = sha
- where
- sha = fst $ separate (== ' ') l
- bad command = error $ command ++ " parse error"
- {- sha commands output the filename, so need to set fileEncoding -}
- readsha command args =
- withHandle StdoutHandle createProcessSuccess p $ \h -> do
- fileEncoding h
- output <- hGetContentsStrict h
- hClose h
- return output
- where
- p = (proc command args) { std_out = CreatePipe }
+ liftIO $ case shaCommand shasize filesize of
+ Left sha -> sha <$> L.readFile file
+ Right command ->
+ either error return
+ =<< externalSHA command shasize file
shaCommand :: SHASize -> Integer -> Either (L.ByteString -> String) String
shaCommand shasize filesize
diff --git a/Build/BundledPrograms.hs b/Build/BundledPrograms.hs
new file mode 100644
index 0000000..570af4a
--- /dev/null
+++ b/Build/BundledPrograms.hs
@@ -0,0 +1,46 @@
+{- Bundled programs
+ -
+ - Copyright 2013 Joey Hess <joey@kitenet.net>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+{-# LANGUAGE CPP #-}
+
+module Build.BundledPrograms where
+
+import Data.Maybe
+
+import Build.SysConfig as SysConfig
+
+{- Programs that git-annex uses, to include in the bundle.
+ -
+ - These may be just the command name, or the full path to it. -}
+bundledPrograms :: [FilePath]
+bundledPrograms = catMaybes
+ [ Nothing
+#ifndef mingw32_HOST_OS
+ -- git is not included in the windows bundle
+ , Just "git"
+#endif
+ , Just "cp"
+ , Just "xargs"
+ , Just "rsync"
+ , Just "ssh"
+#ifndef mingw32_HOST_OS
+ , Just "sh"
+#endif
+ , ifset SysConfig.gpg "gpg"
+ , ifset SysConfig.curl "curl"
+ , ifset SysConfig.wget "wget"
+ , ifset SysConfig.bup "bup"
+ , SysConfig.lsof
+ , SysConfig.sha1
+ , SysConfig.sha256
+ , SysConfig.sha512
+ , SysConfig.sha224
+ , SysConfig.sha384
+ ]
+ where
+ ifset True s = Just s
+ ifset False _ = Nothing
diff --git a/Build/Configure.hs b/Build/Configure.hs
index ae51e2f..e57b792 100644
--- a/Build/Configure.hs
+++ b/Build/Configure.hs
@@ -9,11 +9,13 @@ import Control.Applicative
import System.FilePath
import System.Environment
import Data.Maybe
+import Control.Monad.IfElse
import Build.TestConfig
import Utility.SafeCommand
import Utility.Monad
import Utility.Exception
+import Utility.ExternalSHA
tests :: [TestCase]
tests =
@@ -45,17 +47,24 @@ tests =
- On some systems, shaN is used instead, but on other
- systems, it might be "hashalot", which does not produce
- usable checksums. Only accept programs that produce
- - known-good hashes. -}
+ - known-good hashes when run on files. -}
shaTestCases :: [(Int, String)] -> [TestCase]
shaTestCases l = map make l
where
- make (n, knowngood) = TestCase key $ maybeSelectCmd key $
- zip (shacmds n) (repeat check)
+ make (n, knowngood) = TestCase key $
+ Config key . MaybeStringConfig <$> search (shacmds n)
where
key = "sha" ++ show n
- check = "</dev/null 2>/dev/null | grep -q '" ++ knowngood ++ "'"
+ search [] = return Nothing
+ search (c:cmds) = do
+ sha <- externalSHA c n "/dev/null"
+ if sha == Right knowngood
+ then return $ Just c
+ else search cmds
+
shacmds n = concatMap (\x -> [x, 'g':x, osxpath </> x]) $
map (\x -> "sha" ++ show n ++ x) ["sum", ""]
+
{- Max OSX sometimes puts GNU tools outside PATH, so look in
- the location it uses, and remember where to run them
- from. -}
@@ -73,19 +82,19 @@ testCp k option = TestCase cmd $ testCmd k cmdline
cmd = "cp " ++ option
cmdline = cmd ++ " " ++ testFile ++ " " ++ testFile ++ ".new"
+isReleaseBuild :: IO Bool
+isReleaseBuild = isJust <$> catchMaybeIO (getEnv "RELEASE_BUILD")
+
{- Version is usually based on the major version from the changelog,
- plus the date of the last commit, plus the git rev of that commit.
- This works for autobuilds, ad-hoc builds, etc.
-
- - For official builds, VERSION_FROM_CHANGELOG makes it use just the most
- - recent version from the changelog.
- -
- If git or a git repo is not available, or something goes wrong,
- - just use the version from the changelog. -}
+ - or this is a release build, just use the version from the changelog. -}
getVersion :: Test
getVersion = do
changelogversion <- getChangelogVersion
- version <- ifM (isJust <$> catchMaybeIO (getEnv "VERSION_FROM_CHANGELOG"))
+ version <- ifM (isReleaseBuild)
( return changelogversion
, catchDefaultIO changelogversion $ do
let major = takeWhile (/= '.') changelogversion
@@ -101,8 +110,8 @@ getVersion = do
getChangelogVersion :: IO String
getChangelogVersion = do
- changelog <- readFile "CHANGELOG"
- let verline = head $ lines changelog
+ changelog <- readFile "debian/changelog"
+ let verline = takeWhile (/= '\n') changelog
return $ middle (words verline !! 1)
where
middle = drop 1 . init
@@ -120,7 +129,7 @@ getSshConnectionCaching = Config "sshconnectioncaching" . BoolConfig <$>
{- Set up cabal file with version. -}
cabalSetup :: IO ()
cabalSetup = do
- version <- getChangelogVersion
+ version <- takeWhile (/= '~') <$> getChangelogVersion
cabal <- readFile cabalfile
writeFile tmpcabalfile $ unlines $
map (setfield "Version" version) $
@@ -152,7 +161,8 @@ run ts = do
then writeSysConfig $ androidConfig config
else writeSysConfig config
cleanup
- cabalSetup
+ whenM (isReleaseBuild) $
+ cabalSetup
{- Hard codes some settings to cross-compile for Android. -}
androidConfig :: [Config] -> [Config]
diff --git a/Build/Configure.o b/Build/Configure.o
index edccc08..65f1e72 100644
--- a/Build/Configure.o
+++ b/Build/Configure.o
Binary files differ
diff --git a/Build/DesktopFile.hs b/Build/DesktopFile.hs
index cde33f5..3c6816e 100644
--- a/Build/DesktopFile.hs
+++ b/Build/DesktopFile.hs
@@ -22,18 +22,24 @@ import Assistant.Install.Menu
import Control.Applicative
import System.Directory
import System.Environment
+#ifndef mingw32_HOST_OS
import System.Posix.User
import System.Posix.Files
+#endif
import System.FilePath
import Data.Maybe
systemwideInstall :: IO Bool
+#ifndef mingw32_HOST_OS
systemwideInstall = isroot <||> destdirset
where
isroot = do
uid <- fromIntegral <$> getRealUserID
return $ uid == (0 :: Int)
destdirset = isJust <$> catchMaybeIO (getEnv "DESTDIR")
+#else
+systemwideInstall = return False
+#endif
inDestDir :: FilePath -> IO FilePath
inDestDir f = do
diff --git a/Build/DesktopFile.o b/Build/DesktopFile.o
new file mode 100644
index 0000000..650d5cd
--- /dev/null
+++ b/Build/DesktopFile.o
Binary files differ
diff --git a/Build/EvilSplicer.hs b/Build/EvilSplicer.hs
index 642e2a0..8f20343 100644
--- a/Build/EvilSplicer.hs
+++ b/Build/EvilSplicer.hs
@@ -299,6 +299,7 @@ mangleCode = flip_colon
. case_layout
. case_layout_multiline
. yesod_url_render_hack
+ . text_builder_hack
. nested_instances
. collapse_multiline_strings
. remove_package_version
@@ -515,6 +516,10 @@ yesod_url_render_hack = parsecAndReplace $ do
token :: Parser String
token = many1 $ satisfy isAlphaNum <|> oneOf "_"
+{- Use exported symbol. -}
+text_builder_hack :: String -> String
+text_builder_hack = replace "Data.Text.Lazy.Builder.Internal.fromText" "Data.Text.Lazy.Builder.fromText"
+
{- Given a Parser that finds strings it wants to modify,
- and returns the modified string, does a mass
- find and replace throughout the input string.
diff --git a/Build/EvilSplicer.o b/Build/EvilSplicer.o
new file mode 100644
index 0000000..a642fcd
--- /dev/null
+++ b/Build/EvilSplicer.o
Binary files differ
diff --git a/Build/InstallDesktopFile.o b/Build/InstallDesktopFile.o
index e7c6d4c..bace08c 100644
--- a/Build/InstallDesktopFile.o
+++ b/Build/InstallDesktopFile.o
Binary files differ
diff --git a/Build/NullSoftInstaller.hs b/Build/NullSoftInstaller.hs
new file mode 100644
index 0000000..b9e11fc
--- /dev/null
+++ b/Build/NullSoftInstaller.hs
@@ -0,0 +1,114 @@
+{- Generates a NullSoft installer program for git-annex on Windows.
+ -
+ - To build the installer, git-annex should already be built by cabal,
+ - and ssh and rsync, as well as cygwin libraries, already installed.
+ -
+ - This uses the Haskell nsis package (cabal install nsis)
+ - to generate a .nsi file, which is then used to produce
+ - git-annex-installer.exe
+ -
+ - The installer includes git-annex, and utilities it uses, with the
+ - exception of git. The user needs to install git separately,
+ - and the installer checks for that.
+ -
+ - Copyright 2013 Joey Hess <joey@kitenet.net>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+{-# LANGUAGE OverloadedStrings #-}
+
+import Development.NSIS
+import System.FilePath
+import Control.Monad
+import System.Directory
+import Data.String
+
+import Utility.Tmp
+import Utility.CopyFile
+import Utility.SafeCommand
+import Build.BundledPrograms
+
+main = do
+ withTmpDir "nsis-build" $ \tmpdir -> do
+ let gitannex = tmpdir </> "git-annex.exe"
+ mustSucceed "ln" [File "dist/build/git-annex/git-annex.exe", File gitannex]
+ writeFile nsifile $ makeInstaller gitannex
+ mustSucceed "C:\\Program Files\\NSIS\\makensis" [File nsifile]
+ removeFile nsifile -- left behind if makensis fails
+ where
+ nsifile = "git-annex.nsi"
+ mustSucceed cmd params = do
+ r <- boolSystem cmd params
+ case r of
+ True -> return ()
+ False -> error $ cmd ++ "failed"
+
+installer :: FilePath
+installer = "git-annex-installer.exe"
+
+gitInstallDir :: Exp FilePath
+gitInstallDir = fromString "$PROGRAMFILES\\Git\\cmd"
+
+needGit :: Exp String
+needGit = strConcat
+ [ fromString "You need git installed to use git-annex. Looking at "
+ , gitInstallDir
+ , fromString " , it seems to not be installed, "
+ , fromString "or may be installed in another location. "
+ , fromString "You can install git from http:////git-scm.com//"
+ ]
+
+makeInstaller :: FilePath -> String
+makeInstaller gitannex = nsis $ do
+ name "git-annex"
+ outFile $ str installer
+ {- Installing into the same directory as git avoids needing to modify
+ - path myself, since the git installer already does it. -}
+ installDir gitInstallDir
+ requestExecutionLevel User
+
+ iff (fileExists gitInstallDir)
+ (return ())
+ (alert needGit)
+
+ -- Pages to display
+ page Directory -- Pick where to install
+ page InstFiles -- Give a progress bar while installing
+ -- Groups of files to install
+ section "programs" [] $ do
+ setOutPath "$INSTDIR"
+ addfile gitannex
+ mapM_ addcygfile cygwinPrograms
+ section "DLLS" [] $ do
+ setOutPath "$INSTDIR"
+ mapM_ addcygfile cygwinDlls
+ where
+ addfile f = file [] (str f)
+ addcygfile f = addfile $ "C:\\cygwin\\bin" </> f
+
+cygwinPrograms :: [FilePath]
+cygwinPrograms = map (\p -> p ++ ".exe") bundledPrograms
+
+-- These are the dlls needed by Cygwin's rsync, ssh, etc.
+cygwinDlls :: [FilePath]
+cygwinDlls =
+ [ "cygwin1.dll"
+ , "cygasn1-8.dll"
+ , "cygheimbase-1.dll"
+ , "cygroken-18.dll"
+ , "cygcom_err-2.dll"
+ , "cygheimntlm-0.dll"
+ , "cygsqlite3-0.dll"
+ , "cygcrypt-0.dll"
+ , "cyghx509-5.dll"
+ , "cygssp-0.dll"
+ , "cygcrypto-1.0.0.dll"
+ , "cygiconv-2.dll"
+ , "cyggcc_s-1.dll"
+ , "cygintl-8.dll"
+ , "cygwind-0.dll"
+ , "cyggssapi-3.dll"
+ , "cygkrb5-26.dll"
+ , "cygz.dll"
+ ]
diff --git a/Build/Standalone.hs b/Build/Standalone.hs
index aa45217..343daf9 100644
--- a/Build/Standalone.hs
+++ b/Build/Standalone.hs
@@ -18,7 +18,7 @@ import System.Directory
import System.IO
import Control.Monad
import Data.List
-import Build.SysConfig as SysConfig
+import Build.BundledPrograms
import Utility.PartialPrelude
import Utility.Directory
@@ -27,32 +27,6 @@ import Utility.Monad
import Utility.SafeCommand
import Utility.Path
-{- Programs that git-annex uses, to include in the bundle.
- -
- - These may be just the command name, or the full path to it. -}
-thirdpartyProgs :: [FilePath]
-thirdpartyProgs = catMaybes
- [ Just "git"
- , Just "cp"
- , Just "xargs"
- , Just "gpg"
- , Just "rsync"
- , Just "ssh"
- , Just "sh"
- , ifset SysConfig.curl "curl"
- , ifset SysConfig.wget "wget"
- , ifset SysConfig.bup "bup"
- , SysConfig.lsof
- , SysConfig.sha1
- , SysConfig.sha256
- , SysConfig.sha512
- , SysConfig.sha224
- , SysConfig.sha384
- ]
- where
- ifset True s = Just s
- ifset False _ = Nothing
-
progDir :: FilePath -> FilePath
#ifdef darwin_HOST_OS
progDir topdir = topdir
@@ -76,5 +50,5 @@ main = getArgs >>= go
go (topdir:_) = do
let dir = progDir topdir
createDirectoryIfMissing True dir
- installed <- forM thirdpartyProgs $ installProg dir
+ installed <- forM bundledPrograms $ installProg dir
writeFile "tmp/standalone-installed" (show installed)
diff --git a/Build/Standalone.o b/Build/Standalone.o
new file mode 100644
index 0000000..4a59cb0
--- /dev/null
+++ b/Build/Standalone.o
Binary files differ
diff --git a/Build/SysConfig.o b/Build/SysConfig.o
new file mode 100644
index 0000000..962578c
--- /dev/null
+++ b/Build/SysConfig.o
Binary files differ
diff --git a/Build/TestConfig.hs b/Build/TestConfig.hs
index 9937f79..8628ebe 100644
--- a/Build/TestConfig.hs
+++ b/Build/TestConfig.hs
@@ -4,6 +4,7 @@ module Build.TestConfig where
import Utility.Path
import Utility.Monad
+import Utility.SafeCommand
import System.IO
import System.Cmd
@@ -75,8 +76,8 @@ requireCmd k cmdline = do
{- Checks if a command is available by running a command line. -}
testCmd :: ConfigKey -> String -> Test
testCmd k cmdline = do
- ret <- system $ quiet cmdline
- return $ Config k (BoolConfig $ ret == ExitSuccess)
+ ok <- boolSystem "sh" [ Param "-c", Param $ quiet cmdline ]
+ return $ Config k (BoolConfig ok)
{- Ensures that one of a set of commands is available by running each in
- turn. The Config is set to the first one found. -}
@@ -98,8 +99,8 @@ searchCmd success failure cmdsparams = search cmdsparams
where
search [] = failure $ fst $ unzip cmdsparams
search ((c, params):cs) = do
- ret <- system $ quiet $ c ++ " " ++ params
- if ret == ExitSuccess
+ ok <- boolSystem "sh" [ Param "-c", Param $ quiet $ c ++ " " ++ params ]
+ if ok
then success c
else search cs
diff --git a/Build/TestConfig.o b/Build/TestConfig.o
index f7fa1fc..951aef2 100644
--- a/Build/TestConfig.o
+++ b/Build/TestConfig.o
Binary files differ
diff --git a/CHANGELOG b/CHANGELOG
index d5152ae..0eb8eef 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,11 +1,34 @@
-git-annex (4.20130502) UNRELEASED; urgency=low
+git-annex (4.20130516) unstable; urgency=low
* Android: The webapp is ported and working.
+ * Windows: There is a very rough Windows port. Do not trust it with
+ important data.
+ * git-annex-shell: Ensure that received files can be read. Files
+ transferred from some Android devices may have very broken permissions
+ as received.
+ * direct mode: Direct mode commands now work on files staged in the index,
+ they do not need to be committed to git.
* Temporarily add an upper bound to the version of yesod that can be built
with, since yesod 1.2 has a great many changes that will require extensive
work on the webapp.
-
- -- Joey Hess <joeyh@debian.org> Thu, 02 May 2013 20:39:19 -0400
+ * Disable building with the haskell threaded runtime when the assistant
+ is not built. This may fix builds on s390x and sparc, which are failing
+ to link -lHSrts_thr
+ * Avoid depending on regex-tdfa on mips, mipsel, and s390, where it fails
+ to build.
+ * direct: Fix a bug that could cause some files to be left in indirect mode.
+ * When initializing a directory special remote with a relative path,
+ the path is made absolute.
+ * SHA: Add a runtime sanity check that sha commands output something
+ that appears to be a real sha.
+ * configure: Better checking that sha commands output in the desired format.
+ * rsync special remotes: When sending from a crippled filesystem, use
+ the destination's default file permissions, as the local ones can
+ be arbitrarily broken. (Ie, ----rwxr-x for files on Android)
+ * migrate: Detect if a file gets corrupted while it's being migrated.
+ * Debian: Add a menu file.
+
+ -- Joey Hess <joeyh@debian.org> Thu, 16 May 2013 11:03:35 -0400
git-annex (4.20130501) unstable; urgency=low
diff --git a/CmdLine.hs b/CmdLine.hs
index 050f119..8f4c992 100644
--- a/CmdLine.hs
+++ b/CmdLine.hs
@@ -5,6 +5,8 @@
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module CmdLine (
dispatch,
usage,
@@ -15,7 +17,9 @@ import qualified Control.Exception as E
import qualified Data.Map as M
import Control.Exception (throw)
import System.Console.GetOpt
+#ifndef __WINDOWS__
import System.Posix.Signals
+#endif
import Common.Annex
import qualified Annex
@@ -114,7 +118,9 @@ tryRun' errnum state cmd (a:as) = do
{- Actions to perform each time ran. -}
startup :: Annex Bool
startup = liftIO $ do
+#ifndef __WINDOWS__
void $ installHandler sigINT Default Nothing
+#endif
return True
{- Cleanup actions. -}
diff --git a/Command/Add.hs b/Command/Add.hs
index 68a894d..95af72a 100644
--- a/Command/Add.hs
+++ b/Command/Add.hs
@@ -9,6 +9,8 @@
module Command.Add where
+import System.PosixCompat.Files
+
import Common.Annex
import Annex.Exception
import Command
diff --git a/Command/Assistant.hs b/Command/Assistant.hs
index 32c9c7a..c40c9e5 100644
--- a/Command/Assistant.hs
+++ b/Command/Assistant.hs
@@ -15,7 +15,6 @@ import Init
import Config.Files
import System.Environment
-import System.Posix.Directory
def :: [Command]
def = [noRepo checkAutoStart $ dontCheck repoExists $
@@ -64,5 +63,5 @@ autoStart = do
)
where
go program dir = do
- changeWorkingDirectory dir
+ setCurrentDirectory dir
boolSystem program [Param "assistant"]
diff --git a/Command/Fix.hs b/Command/Fix.hs
index 6aedbad..c6b4df2 100644
--- a/Command/Fix.hs
+++ b/Command/Fix.hs
@@ -7,6 +7,8 @@
module Command.Fix where
+import System.PosixCompat.Files
+
import Common.Annex
import Command
import qualified Annex.Queue
diff --git a/Command/FromKey.hs b/Command/FromKey.hs
index 30b4914..c3d2daa 100644
--- a/Command/FromKey.hs
+++ b/Command/FromKey.hs
@@ -7,6 +7,8 @@
module Command.FromKey where
+import System.PosixCompat.Files
+
import Common.Annex
import Command
import qualified Annex.Queue
diff --git a/Command/Fsck.hs b/Command/Fsck.hs
index 1c9af0d..fe1d351 100644
--- a/Command/Fsck.hs
+++ b/Command/Fsck.hs
@@ -5,8 +5,12 @@
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Command.Fsck where
+import System.PosixCompat.Files
+
import Common.Annex
import Command
import qualified Annex
@@ -28,7 +32,11 @@ import qualified Option
import Types.Key
import Utility.HumanTime
+#ifndef __WINDOWS__
import System.Posix.Process (getProcessID)
+#else
+import System.Random (getStdRandom, random)
+#endif
import Data.Time.Clock.POSIX
import Data.Time
import System.Posix.Types (EpochTime)
@@ -138,10 +146,14 @@ performRemote key file backend numcopies remote =
, checkKeyNumCopies key file numcopies
]
withtmp a = do
- pid <- liftIO getProcessID
+#ifndef __WINDOWS__
+ v <- liftIO getProcessID
+#else
+ v <- liftIO (getStdRandom random :: IO Int)
+#endif
t <- fromRepo gitAnnexTmpDir
createAnnexDirectory t
- let tmp = t </> "fsck" ++ show pid ++ "." ++ keyFile key
+ let tmp = t </> "fsck" ++ show v ++ "." ++ keyFile key
let cleanup = liftIO $ catchIO (removeFile tmp) (const noop)
cleanup
cleanup `after` a tmp
@@ -449,7 +461,9 @@ recordFsckTime key = do
parent <- parentDir <$> calcRepo (gitAnnexLocation key)
liftIO $ void $ tryIO $ do
touchFile parent
+#ifndef __WINDOWS__
setSticky parent
+#endif
getFsckTime :: Key -> Annex (Maybe EpochTime)
getFsckTime key = do
diff --git a/Command/Import.hs b/Command/Import.hs
index d86b44b..cadf8fa 100644
--- a/Command/Import.hs
+++ b/Command/Import.hs
@@ -7,6 +7,8 @@
module Command.Import where
+import System.PosixCompat.Files
+
import Common.Annex
import Command
import qualified Annex
diff --git a/Command/Indirect.hs b/Command/Indirect.hs
index 668bebe..bf15099 100644
--- a/Command/Indirect.hs
+++ b/Command/Indirect.hs
@@ -7,6 +7,8 @@
module Command.Indirect where
+import System.PosixCompat.Files
+
import Common.Annex
import Command
import qualified Git
diff --git a/Command/Migrate.hs b/Command/Migrate.hs
index d8bfd74..0fdf0e8 100644
--- a/Command/Migrate.hs
+++ b/Command/Migrate.hs
@@ -52,15 +52,20 @@ upgradableKey backend key = isNothing (Types.Key.keySize key) || backendupgradab
{- Store the old backend's key in the new backend
- The old backend's key is not dropped from it, because there may
- - be other files still pointing at that key. -}
+ - be other files still pointing at that key.
+ -
+ - To ensure that the data we have for the old key is valid, it's
+ - fscked here. First we generate the new key. This ensures that the
+ - data cannot get corrupted after the fsck but before the new key is
+ - generated.
+ -}
perform :: FilePath -> Key -> Backend -> Backend -> CommandPerform
-perform file oldkey oldbackend newbackend = do
- ifM (Command.Fsck.checkBackend oldbackend oldkey (Just file))
- ( maybe stop go =<< genkey
- , stop
- )
+perform file oldkey oldbackend newbackend = go =<< genkey
where
- go newkey = stopUnless (Command.ReKey.linkKey oldkey newkey) $
+ go Nothing = stop
+ go (Just newkey) = stopUnless checkcontent $ finish newkey
+ checkcontent = Command.Fsck.checkBackend oldbackend oldkey $ Just file
+ finish newkey = stopUnless (Command.ReKey.linkKey oldkey newkey) $
next $ Command.ReKey.cleanup file oldkey newkey
genkey = do
content <- calcRepo $ gitAnnexLocation oldkey
diff --git a/Command/ReKey.hs b/Command/ReKey.hs
index bc4a9fa..05fd73f 100644
--- a/Command/ReKey.hs
+++ b/Command/ReKey.hs
@@ -7,6 +7,8 @@
module Command.ReKey where
+import System.PosixCompat.Files
+
import Common.Annex
import Command
import qualified Annex
diff --git a/Command/RecvKey.hs b/Command/RecvKey.hs
index 041e104..c316e2c 100644
--- a/Command/RecvKey.hs
+++ b/Command/RecvKey.hs
@@ -7,6 +7,8 @@
module Command.RecvKey where
+import System.PosixCompat.Files
+
import Common.Annex
import Command
import CmdLine
@@ -44,13 +46,19 @@ start key = ifM (inAnnex key)
go tmp = do
opts <- filterRsyncSafeOptions . maybe [] words
<$> getField "RsyncOptions"
- ifM (liftIO $ rsyncServerReceive (map Param opts) tmp)
- ( ifM (isJust <$> Fields.getField Fields.direct)
+ ok <- liftIO $ rsyncServerReceive (map Param opts) tmp
+
+ -- The file could have been received with permissions that
+ -- do not allow reading it, so this is done before the
+ -- directcheck.
+ freezeContent tmp
+
+ if ok
+ then ifM (isJust <$> Fields.getField Fields.direct)
( directcheck tmp
, return True
)
- , return False
- )
+ else return False
{- If the sending repository uses direct mode, the file
- it sends could be modified as it's sending it. So check
- that the right size file was received, and that the key/value
diff --git a/Command/Status.hs b/Command/Status.hs
index 0009ff0..6a50c1a 100644
--- a/Command/Status.hs
+++ b/Command/Status.hs
@@ -13,6 +13,7 @@ import "mtl" Control.Monad.State.Strict
import qualified Data.Map as M
import Text.JSON
import Data.Tuple
+import System.PosixCompat.Files
import Common.Annex
import qualified Types.Backend as B
diff --git a/Command/Unannex.hs b/Command/Unannex.hs
index 53b593f..6674b37 100644
--- a/Command/Unannex.hs
+++ b/Command/Unannex.hs
@@ -5,6 +5,8 @@
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Command.Unannex where
import Common.Annex
@@ -58,6 +60,9 @@ cleanup file key = do
return True
where
+#ifdef __WINDOWS__
+ goFast = go
+#else
goFast = do
-- fast mode: hard link to content in annex
src <- calcRepo $ gitAnnexLocation key
@@ -66,6 +71,7 @@ cleanup file key = do
( thawContent file
, go
)
+#endif
go = do
fromAnnex key file
logStatus key InfoMissing
diff --git a/Command/WebApp.hs b/Command/WebApp.hs
index b4307a2..d153190 100644
--- a/Command/WebApp.hs
+++ b/Command/WebApp.hs
@@ -28,7 +28,6 @@ import qualified Annex
import Config.Files
import qualified Option
-import System.Posix.Directory
import Control.Concurrent
import Control.Concurrent.STM
import System.Process (env, std_out, std_err)
@@ -97,7 +96,7 @@ startNoRepo = do
case dirs of
[] -> firstRun listenhost
(d:_) -> do
- changeWorkingDirectory d
+ setCurrentDirectory d
state <- Annex.new =<< Git.CurrentRepo.get
void $ Annex.eval state $ doCommand $
start' False listenhost
@@ -158,7 +157,11 @@ firstRun listenhost = do
sendurlback v _origout _origerr url _htmlshim = putMVar v url
openBrowser :: Maybe FilePath -> FilePath -> String -> Maybe Handle -> Maybe Handle -> IO ()
+#ifdef __ANDROID__
openBrowser mcmd htmlshim realurl outh errh = do
+#else
+openBrowser mcmd htmlshim _realurl outh errh = do
+#endif
hPutStrLn (fromMaybe stdout outh) $ "Launching web browser on " ++ url
hFlush stdout
environ <- cleanEnvironment
diff --git a/Common.hs b/Common.hs
index 5c355a6..5dc3cfb 100644
--- a/Common.hs
+++ b/Common.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE PackageImports #-}
+{-# LANGUAGE PackageImports, CPP #-}
module Common (module X) where
@@ -12,12 +12,13 @@ import Data.Maybe as X
import Data.List as X hiding (head, tail, init, last)
import Data.String.Utils as X hiding (join)
-import "MissingH" System.Path as X
import System.FilePath as X
import System.Directory as X
import System.IO as X hiding (FilePath)
-import System.Posix.Files as X
+import System.PosixCompat.Files as X
+#ifndef mingw32_HOST_OS
import System.Posix.IO as X
+#endif
import System.Exit as X
import Utility.Misc as X
diff --git a/Common.o b/Common.o
index bf18dcc..45969e7 100644
--- a/Common.o
+++ b/Common.o
Binary files differ
diff --git a/Config/Files.hs b/Config/Files.hs
index 45f478e..6504d1f 100644
--- a/Config/Files.hs
+++ b/Config/Files.hs
@@ -8,7 +8,7 @@
module Config.Files where
import Common
-import Utility.TempFile
+import Utility.Tmp
import Utility.FreeDesktop
{- ~/.config/git-annex/file -}
diff --git a/Config/Files.o b/Config/Files.o
new file mode 100644
index 0000000..fe966ed
--- /dev/null
+++ b/Config/Files.o
Binary files differ
diff --git a/Creds.hs b/Creds.hs
index 4c68966..1b62c93 100644
--- a/Creds.hs
+++ b/Creds.hs
@@ -5,6 +5,8 @@
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Creds where
import Common.Annex
@@ -13,9 +15,9 @@ import Utility.FileMode
import Crypto
import Types.Remote (RemoteConfig, RemoteConfigKey)
import Remote.Helper.Encryptable (remoteCipher, embedCreds)
+import Utility.Env (setEnv)
import System.Environment
-import System.Posix.Env (setEnv)
import qualified Data.ByteString.Lazy.Char8 as L
import qualified Data.Map as M
import Utility.Base64
@@ -105,12 +107,16 @@ getEnvCredPair storage = liftM2 (,)
{- Stores a CredPair in the environment. -}
setEnvCredPair :: CredPair -> CredPairStorage -> IO ()
+#ifndef __WINDOWS__
setEnvCredPair (l, p) storage = do
set uenv l
set penv p
where
(uenv, penv) = credPairEnvironment storage
- set var val = setEnv var val True
+ set var val = void $ setEnv var val True
+#else
+setEnvCredPair _ _ = error "setEnvCredPair TODO"
+#endif
writeCacheCredPair :: CredPair -> CredPairStorage -> Annex ()
writeCacheCredPair credpair storage =
@@ -122,13 +128,7 @@ writeCacheCreds :: Creds -> FilePath -> Annex ()
writeCacheCreds creds file = do
d <- fromRepo gitAnnexCredsDir
createAnnexDirectory d
- liftIO $ do
- let f = d </> file
- h <- openFile f WriteMode
- modifyFileMode f $ removeModes
- [groupReadMode, otherReadMode]
- hPutStr h creds
- hClose h
+ liftIO $ writeFileProtected (d </> file) creds
readCacheCredPair :: CredPairStorage -> Annex (Maybe CredPair)
readCacheCredPair storage = maybe Nothing decodeCredPair
diff --git a/Git.hs b/Git.hs
index 46f995e..e14f4ec 100644
--- a/Git.hs
+++ b/Git.hs
@@ -8,6 +8,8 @@
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Git (
Repo(..),
Ref(..),
@@ -30,7 +32,9 @@ module Git (
) where
import Network.URI (uriPath, uriScheme, unEscapeString)
+#ifndef __WINDOWS__
import System.Posix.Files
+#endif
import Common
import Git.Types
@@ -127,4 +131,8 @@ hookPath script repo = do
ifM (catchBoolIO $ isexecutable hook)
( return $ Just hook , return Nothing )
where
+#if __WINDOWS__
+ isexecutable f = doesFileExist f
+#else
isexecutable f = isExecutable . fileMode <$> getFileStatus f
+#endif
diff --git a/Git/CatFile.hs b/Git/CatFile.hs
index 7047242..5ab10b1 100644
--- a/Git/CatFile.hs
+++ b/Git/CatFile.hs
@@ -23,12 +23,13 @@ import Git
import Git.Sha
import Git.Command
import Git.Types
+import Git.FilePath
import qualified Utility.CoProcess as CoProcess
type CatFileHandle = CoProcess.CoProcessHandle
catFileStart :: Repo -> IO CatFileHandle
-catFileStart = gitCoProcessStart
+catFileStart = CoProcess.rawMode <=< gitCoProcessStart
[ Param "cat-file"
, Param "--batch"
]
@@ -38,7 +39,8 @@ catFileStop = CoProcess.stop
{- Reads a file from a specified branch. -}
catFile :: CatFileHandle -> Branch -> FilePath -> IO L.ByteString
-catFile h branch file = catObject h $ Ref $ show branch ++ ":" ++ file
+catFile h branch file = catObject h $ Ref $
+ show branch ++ ":" ++ toInternalGitPath file
{- Uses a running git cat-file read the content of an object.
- Objects that do not exist will have "" returned. -}
@@ -49,11 +51,8 @@ catObject h object = maybe L.empty fst <$> catObjectDetails h object
catObjectDetails :: CatFileHandle -> Ref -> IO (Maybe (L.ByteString, Sha))
catObjectDetails h object = CoProcess.query h send receive
where
- send to = do
- fileEncoding to
- hPutStrLn to $ show object
+ send to = hPutStrLn to $ show object
receive from = do
- fileEncoding from
header <- hGetLine from
case words header of
[sha, objtype, size]
@@ -68,8 +67,10 @@ catObjectDetails h object = CoProcess.query h send receive
| otherwise -> error $ "unknown response from git cat-file " ++ show (header, object)
readcontent bytes from sha = do
content <- S.hGet from bytes
- c <- hGetChar from
- when (c /= '\n') $
- error "missing newline from git cat-file"
+ eatchar '\n' from
return $ Just (L.fromChunks [content], Ref sha)
dne = return Nothing
+ eatchar expected from = do
+ c <- hGetChar from
+ when (c /= expected) $
+ error $ "missing " ++ (show expected) ++ " from git cat-file"
diff --git a/Git/CheckAttr.hs b/Git/CheckAttr.hs
index f9279d4..b3055fd 100644
--- a/Git/CheckAttr.hs
+++ b/Git/CheckAttr.hs
@@ -22,7 +22,7 @@ type Attr = String
checkAttrStart :: [Attr] -> Repo -> IO CheckAttrHandle
checkAttrStart attrs repo = do
cwd <- getCurrentDirectory
- h <- gitCoProcessStart params repo
+ h <- CoProcess.rawMode =<< gitCoProcessStart params repo
return (h, attrs, cwd)
where
params =
@@ -43,11 +43,8 @@ checkAttr (h, attrs, cwd) want file = do
[v] -> return v
_ -> error $ "unable to determine " ++ want ++ " attribute of " ++ file
where
- send to = do
- fileEncoding to
- hPutStr to $ file' ++ "\0"
+ send to = hPutStr to $ file' ++ "\0"
receive from = forM attrs $ \attr -> do
- fileEncoding from
l <- hGetLine from
return (attr, attrvalue attr l)
{- Before git 1.7.7, git check-attr worked best with
diff --git a/Git/Construct.hs b/Git/Construct.hs
index 633e50b..54eb84e 100644
--- a/Git/Construct.hs
+++ b/Git/Construct.hs
@@ -5,6 +5,8 @@
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Git.Construct (
fromCwd,
fromAbsPath,
@@ -21,13 +23,18 @@ module Git.Construct (
checkForRepo,
) where
+{-# LANGUAGE CPP #-}
+
+#ifndef __WINDOWS__
import System.Posix.User
+#endif
import qualified Data.Map as M hiding (map, split)
import Network.URI
import Common
import Git.Types
import Git
+import Git.FilePath
import qualified Git.Url as Url
import Utility.UserInfo
@@ -52,8 +59,7 @@ fromPath dir = fromAbsPath =<< absPath dir
- specified. -}
fromAbsPath :: FilePath -> IO Repo
fromAbsPath dir
- | "/" `isPrefixOf` dir =
- ifM (doesDirectoryExist dir') ( ret dir' , hunt )
+ | isAbsolute dir = ifM (doesDirectoryExist dir') ( ret dir' , hunt )
| otherwise =
error $ "internal error, " ++ dir ++ " is not absolute"
where
@@ -65,7 +71,7 @@ fromAbsPath dir
{- When dir == "foo/.git", git looks for "foo/.git/.git",
- and failing that, uses "foo" as the repository. -}
hunt
- | "/.git" `isSuffixOf` canondir =
+ | (pathSeparator:".git") `isSuffixOf` canondir =
ifM (doesDirectoryExist $ dir </> ".git")
( ret dir
, ret $ takeDirectory canondir
@@ -139,6 +145,9 @@ fromRemoteLocation :: String -> Repo -> IO Repo
fromRemoteLocation s repo = gen $ calcloc s
where
gen v
+#ifdef __WINDOWS__
+ | dosstyle v = fromRemotePath (dospath v) repo
+#endif
| scpstyle v = fromUrl $ scptourl v
| urlstyle v = fromUrl v
| otherwise = fromRemotePath v repo
@@ -172,6 +181,12 @@ fromRemoteLocation s repo = gen $ calcloc s
| "/" `isPrefixOf` d = d
| "~" `isPrefixOf` d = '/':d
| otherwise = "/~/" ++ d
+#ifdef __WINDOWS__
+ -- git on Windows will write a path to .git/config with "drive:",
+ -- which is not to be confused with a "host:"
+ dosstyle = hasDrive
+ dospath = fromInternalGitPath
+#endif
{- Constructs a Repo from the path specified in the git remotes of
- another Repo. -}
@@ -192,6 +207,9 @@ repoAbsPath d = do
return $ h </> d'
expandTilde :: FilePath -> IO FilePath
+#ifdef __WINDOWS__
+expandTilde = return
+#else
expandTilde = expandt True
where
expandt _ [] = return ""
@@ -212,6 +230,7 @@ expandTilde = expandt True
findname n (c:cs)
| c == '/' = (n, cs)
| otherwise = findname (n++[c]) cs
+#endif
{- Checks if a git repository exists in a directory. Does not find
- git repositories in parent directories. -}
diff --git a/Git/CurrentRepo.hs b/Git/CurrentRepo.hs
index 4828739..2a88074 100644
--- a/Git/CurrentRepo.hs
+++ b/Git/CurrentRepo.hs
@@ -5,15 +5,15 @@
- Licensed under the GNU GPL version 3 or higher.
-}
-module Git.CurrentRepo where
+{-# LANGUAGE CPP #-}
-import System.Posix.Directory (changeWorkingDirectory)
-import System.Posix.Env (getEnv, unsetEnv)
+module Git.CurrentRepo where
import Common
import Git.Types
import Git.Construct
import qualified Git.Config
+import Utility.Env
{- Gets the current git repository.
-
@@ -37,16 +37,20 @@ get = do
Just d -> do
cwd <- getCurrentDirectory
unless (d `dirContains` cwd) $
- changeWorkingDirectory d
+ setCurrentDirectory d
return $ addworktree wt r
where
pathenv s = do
+#ifndef __WINDOWS__
v <- getEnv s
case v of
Just d -> do
- unsetEnv s
+ void $ unsetEnv s
Just <$> absPath d
Nothing -> return Nothing
+#else
+ return Nothing
+#endif
configure Nothing (Just r) = Git.Config.read r
configure (Just d) _ = do
diff --git a/Git/FilePath.hs b/Git/FilePath.hs
index 6344353..c3813fe 100644
--- a/Git/FilePath.hs
+++ b/Git/FilePath.hs
@@ -5,16 +5,21 @@
- top of the repository even when run in a subdirectory. Adding some
- types helps keep that straight.
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2013 Joey Hess <joey@kitenet.net>
-
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Git.FilePath (
TopFilePath,
getTopFilePath,
toTopFilePath,
asTopFilePath,
+ InternalGitPath,
+ toInternalGitPath,
+ fromInternalGitPath
) where
import Common
@@ -32,3 +37,22 @@ toTopFilePath file repo = TopFilePath <$>
- repository -}
asTopFilePath :: FilePath -> TopFilePath
asTopFilePath file = TopFilePath file
+
+{- Git may use a different representation of a path when storing
+ - it internally. For example, on Windows, git uses '/' to separate paths
+ - stored in the repository, despite Windows using '\' -}
+type InternalGitPath = String
+
+toInternalGitPath :: FilePath -> InternalGitPath
+#ifndef __WINDOWS__
+toInternalGitPath = id
+#else
+toInternalGitPath = replace "\\" "/"
+#endif
+
+fromInternalGitPath :: InternalGitPath -> FilePath
+#ifndef __WINDOWS__
+fromInternalGitPath = id
+#else
+fromInternalGitPath = replace "/" "\\"
+#endif
diff --git a/Git/HashObject.hs b/Git/HashObject.hs
index b4a32ef..bf3ca7f 100644
--- a/Git/HashObject.hs
+++ b/Git/HashObject.hs
@@ -17,7 +17,7 @@ import qualified Utility.CoProcess as CoProcess
type HashObjectHandle = CoProcess.CoProcessHandle
hashObjectStart :: Repo -> IO HashObjectHandle
-hashObjectStart = gitCoProcessStart
+hashObjectStart = CoProcess.rawMode <=< gitCoProcessStart
[ Param "hash-object"
, Param "-w"
, Param "--stdin-paths"
@@ -30,16 +30,13 @@ hashObjectStop = CoProcess.stop
hashFile :: HashObjectHandle -> FilePath -> IO Sha
hashFile h file = CoProcess.query h send receive
where
- send to = do
- fileEncoding to
- hPutStrLn to file
+ send to = hPutStrLn to file
receive from = getSha "hash-object" $ hGetLine from
{- Injects some content into git, returning its Sha. -}
hashObject :: ObjectType -> String -> Repo -> IO Sha
-hashObject objtype content repo = getSha subcmd $ do
- s <- pipeWriteRead (map Param params) content repo
- return s
+hashObject objtype content repo = getSha subcmd $
+ pipeWriteRead (map Param params) content repo
where
subcmd = "hash-object"
params = [subcmd, "-t", show objtype, "-w", "--stdin"]
diff --git a/Git/Index.hs b/Git/Index.hs
index 80196ef..5b660bb 100644
--- a/Git/Index.hs
+++ b/Git/Index.hs
@@ -7,7 +7,7 @@
module Git.Index where
-import System.Posix.Env (setEnv, unsetEnv, getEnv)
+import Utility.Env
{- Forces git to use the specified index file.
-
diff --git a/Git/UpdateIndex.hs b/Git/UpdateIndex.hs
index aa65b44..5d07e20 100644
--- a/Git/UpdateIndex.hs
+++ b/Git/UpdateIndex.hs
@@ -1,11 +1,11 @@
{- git-update-index library
-
- - Copyright 2011, 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2013 Joey Hess <joey@kitenet.net>
-
- Licensed under the GNU GPL version 3 or higher.
-}
-{-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE BangPatterns, CPP #-}
module Git.UpdateIndex (
Streamer,
@@ -59,13 +59,13 @@ lsTree (Ref x) repo streamer = do
- a given file with a given sha. -}
updateIndexLine :: Sha -> BlobType -> TopFilePath -> String
updateIndexLine sha filetype file =
- show filetype ++ " blob " ++ show sha ++ "\t" ++ getTopFilePath file
+ show filetype ++ " blob " ++ show sha ++ "\t" ++ indexPath file
{- A streamer that removes a file from the index. -}
unstageFile :: FilePath -> Repo -> IO Streamer
unstageFile file repo = do
p <- toTopFilePath file repo
- return $ pureStreamer $ "0 " ++ show nullSha ++ "\t" ++ getTopFilePath p
+ return $ pureStreamer $ "0 " ++ show nullSha ++ "\t" ++ indexPath p
{- A streamer that adds a symlink to the index. -}
stageSymlink :: FilePath -> Sha -> Repo -> IO Streamer
@@ -75,3 +75,6 @@ stageSymlink file sha repo = do
<*> pure SymlinkBlob
<*> toTopFilePath file repo
return $ pureStreamer line
+
+indexPath :: TopFilePath -> InternalGitPath
+indexPath = toInternalGitPath . getTopFilePath
diff --git a/GitAnnex.hs b/GitAnnex.hs
index 211d79e..ef6e030 100644
--- a/GitAnnex.hs
+++ b/GitAnnex.hs
@@ -23,7 +23,9 @@ import qualified Command.Get
import qualified Command.FromKey
import qualified Command.DropKey
import qualified Command.TransferKey
+#ifndef __WINDOWS__
import qualified Command.TransferKeys
+#endif
import qualified Command.ReKey
import qualified Command.Reinject
import qualified Command.Fix
@@ -73,8 +75,10 @@ import qualified Command.XMPPGit
#endif
#endif
#ifdef WITH_TESTSUITE
+#ifndef __WINDOWS__
import qualified Command.Test
#endif
+#endif
cmds :: [Command]
cmds = concat
@@ -107,7 +111,9 @@ cmds = concat
, Command.FromKey.def
, Command.DropKey.def
, Command.TransferKey.def
+#ifndef __WINDOWS__
, Command.TransferKeys.def
+#endif
, Command.ReKey.def
, Command.Fix.def
, Command.Fsck.def
@@ -137,8 +143,10 @@ cmds = concat
#endif
#endif
#ifdef WITH_TESTSUITE
+#ifndef __WINDOWS__
, Command.Test.def
#endif
+#endif
]
header :: String
diff --git a/GitAnnexShell.hs b/GitAnnexShell.hs
index 31912eb..6f03ac7 100644
--- a/GitAnnexShell.hs
+++ b/GitAnnexShell.hs
@@ -7,7 +7,7 @@
module GitAnnexShell where
-import System.Posix.Env
+import System.Environment
import System.Console.GetOpt
import Common.Annex
@@ -145,7 +145,7 @@ checkNotReadOnly cmd
checkDirectory :: Maybe FilePath -> IO ()
checkDirectory mdir = do
- v <- getEnv "GIT_ANNEX_SHELL_DIRECTORY"
+ v <- catchMaybeIO $ getEnv "GIT_ANNEX_SHELL_DIRECTORY"
case (v, mdir) of
(Nothing, _) -> noop
(Just d, Nothing) -> req d Nothing
@@ -175,7 +175,7 @@ checkDirectory mdir = do
checkEnv :: String -> IO ()
checkEnv var = do
- v <- getEnv var
+ v <- catchMaybeIO $ getEnv var
case v of
Nothing -> noop
Just "" -> noop
diff --git a/INSTALL b/INSTALL
index 6c90d2c..03e92a6 100644
--- a/INSTALL
+++ b/INSTALL
@@ -14,19 +14,13 @@ detailed instructions | quick install
[[Gentoo]] | `emerge git-annex`
[[ScientificLinux5]] | (and other RHEL5 clones like CentOS5)
[[openSUSE]] |
-Windows | [[sorry, Windows not supported yet|todo/windows_support]]
+[[Windows]] | **alpha**
"""]]
## Using cabal
-As a haskell package, git-annex can be installed using cabal.
-Start by installing the [Haskell Platform](http://hackage.haskell.org/platform/),
-and then:
-
- cabal install git-annex --bindir=$HOME/bin
-
-That installs the latest release. Alternatively, you can [[download]]
-git-annex yourself and [[manually_build_with_cabal|install/cabal]].
+As a haskell package, git-annex can be installed from source pretty easily
+[[using cabal|cabal]].
## Installation from scratch
diff --git a/Init.hs b/Init.hs
index 62b1228..b669274 100644
--- a/Init.hs
+++ b/Init.hs
@@ -5,6 +5,8 @@
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Init (
ensureInitialized,
isInitialized,
@@ -14,8 +16,9 @@ module Init (
) where
import Common.Annex
-import Utility.TempFile
+import Utility.Tmp
import Utility.Network
+import qualified Annex
import qualified Git
import qualified Git.LsFiles
import qualified Git.Config
@@ -34,11 +37,15 @@ import Backend
genDescription :: Maybe String -> Annex String
genDescription (Just d) = return d
genDescription Nothing = do
+ reldir <- liftIO . relHome =<< fromRepo Git.repoPath
hostname <- fromMaybe "" <$> liftIO getHostname
+#ifndef __WINDOWS__
let at = if null hostname then "" else "@"
username <- liftIO myUserName
- reldir <- liftIO . relHome =<< fromRepo Git.repoPath
return $ concat [username, at, hostname, ":", reldir]
+#else
+ return $ concat [hostname, ":", reldir]
+#endif
initialize :: Maybe String -> Annex ()
initialize mdescription = do
@@ -106,13 +113,18 @@ preCommitHook = (</>) <$> fromRepo Git.localGitDir <*> pure "hooks/pre-commit"
preCommitScript :: String
preCommitScript = unlines
- [ shebang
+ [ shebang_local
, "# automatically configured by git-annex"
, "git annex pre-commit ."
]
+{- A crippled filesystem is one that does not allow making symlinks,
+ - or removing write access from files. -}
probeCrippledFileSystem :: Annex Bool
probeCrippledFileSystem = do
+#ifdef __WINDOWS__
+ return True
+#else
tmp <- fromRepo gitAnnexTmpDir
let f = tmp </> "gaprobe"
liftIO $ do
@@ -132,11 +144,21 @@ probeCrippledFileSystem = do
preventWrite f
allowWrite f
return True
+#endif
checkCrippledFileSystem :: Annex ()
checkCrippledFileSystem = whenM probeCrippledFileSystem $ do
warning "Detected a crippled filesystem."
setCrippledFileSystem True
+
+ {- Normally git disables core.symlinks itself when the filesystem does
+ - not support them, but in Cygwin, git does support symlinks, while
+ - git-annex, not linking with Cygwin, does not. -}
+ whenM (coreSymlinks <$> Annex.getGitConfig) $ do
+ warning "Disabling core.symlinks."
+ setConfig (ConfigKey "core.symlinks")
+ (Git.Config.boolConfig False)
+
unlessM isDirect $ do
warning "Enabling direct mode."
top <- fromRepo Git.repoPath
@@ -149,6 +171,9 @@ checkCrippledFileSystem = whenM probeCrippledFileSystem $ do
probeFifoSupport :: Annex Bool
probeFifoSupport = do
+#ifdef __WINDOWS__
+ return False
+#else
tmp <- fromRepo gitAnnexTmpDir
let f = tmp </> "gaprobe"
liftIO $ do
@@ -159,6 +184,7 @@ probeFifoSupport = do
getFileStatus f
nukeFile f
return $ either (const False) isNamedPipe ms
+#endif
checkFifoSupport :: Annex ()
checkFifoSupport = unlessM probeFifoSupport $ do
diff --git a/Limit.hs b/Limit.hs
index 679ebc1..1da282c 100644
--- a/Limit.hs
+++ b/Limit.hs
@@ -13,8 +13,13 @@ import Data.Time.Clock.POSIX
import qualified Data.Set as S
import qualified Data.Map as M
import System.Path.WildMatch
+#ifdef WITH_TDFA
import Text.Regex.TDFA
import Text.Regex.TDFA.String
+#else
+import System.Path.WildMatch
+#endif
+import System.PosixCompat.Files
import Common.Annex
import qualified Annex
@@ -85,10 +90,11 @@ limitExclude :: MkLimit
limitExclude glob = Right $ const $ return . not . matchglob glob
{- Could just use wildCheckCase, but this way the regex is only compiled
- - once. Also, we use regex-TDFA because it's less buggy in its support
- - of non-unicode characters. -}
+ - once. Also, we use regex-TDFA when available, because it's less buggy
+ - in its support of non-unicode characters. -}
matchglob :: String -> Annex.FileInfo -> Bool
matchglob glob fi =
+#ifdef WITH_TDFA
case cregex of
Right r -> case execute r (Annex.matchFile fi) of
Right (Just _) -> True
@@ -97,6 +103,9 @@ matchglob glob fi =
where
cregex = compile defaultCompOpt defaultExecOpt regex
regex = '^':wildToRegex glob
+#else
+ wildCheckCase glob (Annex.matchFile fi)
+#endif
{- Adds a limit to skip files not believed to be present
- in a specfied repository. -}
diff --git a/Locations.hs b/Locations.hs
index cb98b84..ba1e741 100644
--- a/Locations.hs
+++ b/Locations.hs
@@ -259,7 +259,7 @@ gitAnnexAssistantDefaultDir = "annex"
- than .git to be used.
-}
isLinkToAnnex :: FilePath -> Bool
-isLinkToAnnex s = ('/':objectDir) `isInfixOf` s
+isLinkToAnnex s = (pathSeparator:objectDir) `isInfixOf` s
{- Converts a key into a filename fragment without any directory.
-
diff --git a/Locations/UserConfig.o b/Locations/UserConfig.o
deleted file mode 100644
index c0b11b6..0000000
--- a/Locations/UserConfig.o
+++ /dev/null
Binary files differ
diff --git a/Logs/Transfer.hs b/Logs/Transfer.hs
index cfe9e49..6f28ef1 100644
--- a/Logs/Transfer.hs
+++ b/Logs/Transfer.hs
@@ -5,6 +5,8 @@
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Logs.Transfer where
import Common.Annex
@@ -122,6 +124,7 @@ runTransfer t file shouldretry a = do
return ok
where
prep tfile mode info = do
+#ifndef __WINDOWS__
mfd <- catchMaybeIO $
openFd (transferLockFile tfile) ReadWrite (Just mode)
defaultFileFlags { trunc = True }
@@ -134,11 +137,18 @@ runTransfer t file shouldretry a = do
error "transfer already in progress"
void $ tryIO $ writeTransferInfoFile info tfile
return mfd
+#else
+ catchMaybeIO $ do
+ writeFile (transferLockFile tfile) ""
+ writeTransferInfoFile info tfile
+#endif
cleanup _ Nothing = noop
cleanup tfile (Just fd) = do
void $ tryIO $ removeFile tfile
void $ tryIO $ removeFile $ transferLockFile tfile
+#ifndef __WINDOWS__
closeFd fd
+#endif
retry oldinfo metervar run = do
v <- tryAnnex run
case v of
@@ -195,8 +205,9 @@ startTransferInfo file = TransferInfo
{- If a transfer is still running, returns its TransferInfo. -}
checkTransfer :: Transfer -> Annex (Maybe TransferInfo)
checkTransfer t = do
- mode <- annexFileMode
tfile <- fromRepo $ transferFile t
+#ifndef __WINDOWS__
+ mode <- annexFileMode
mfd <- liftIO $ catchMaybeIO $
openFd (transferLockFile tfile) ReadOnly (Just mode) defaultFileFlags
case mfd of
@@ -209,6 +220,13 @@ checkTransfer t = do
Nothing -> return Nothing
Just (pid, _) -> liftIO $ catchDefaultIO Nothing $
readTransferInfoFile (Just pid) tfile
+#else
+ ifM (liftIO $ doesFileExist $ transferLockFile tfile)
+ ( liftIO $ catchDefaultIO Nothing $
+ readTransferInfoFile Nothing tfile
+ , return Nothing
+ )
+#endif
{- Gets all currently running transfers. -}
getTransfers :: Annex [(Transfer, TransferInfo)]
diff --git a/Logs/Unused.hs b/Logs/Unused.hs
index 437b01f..342d88a 100644
--- a/Logs/Unused.hs
+++ b/Logs/Unused.hs
@@ -19,7 +19,7 @@ import qualified Data.Map as M
import Common.Annex
import Command
import Types.Key
-import Utility.TempFile
+import Utility.Tmp
writeUnusedLog :: FilePath -> [(Int, Key)] -> Annex ()
writeUnusedLog prefix l = do
diff --git a/Makefile b/Makefile
index 4e4523d..852dc7a 100644
--- a/Makefile
+++ b/Makefile
@@ -158,7 +158,7 @@ osxapp: Build/Standalone Build/OSXMkLibs
rm -f tmp/git-annex.dmg.bz2
bzip2 --fast tmp/git-annex.dmg
-ANDROID_FLAGS=
+ANDROID_FLAGS?=
# Cross compile for Android.
# Uses https://github.com/neurocyte/ghc-android
android: Build/EvilSplicer
@@ -181,11 +181,9 @@ android: Build/EvilSplicer
# Cabal cannot cross compile with custom build type, so workaround.
sed -i 's/Build-type: Custom/Build-type: Simple/' tmp/androidtree/git-annex.cabal
if [ ! -e tmp/androidtree/dist/setup/setup ]; then \
- cd tmp/androidtree; \
- cabal configure; \
- $$HOME/.ghc/android-14/arm-linux-androideabi-4.7/arm-linux-androideabi/bin/cabal configure -f"Android $(ANDROID_FLAGS)"; \
+ cd tmp/androidtree && $$HOME/.ghc/android-14/arm-linux-androideabi-4.7/arm-linux-androideabi/bin/cabal configure -f"Android $(ANDROID_FLAGS)"; \
fi
- $(MAKE) -C tmp/androidtree git-annex
+ cd tmp/androidtree && $(CABAL) build
adb:
ANDROID_FLAGS="-Production" $(MAKE) android
diff --git a/Remote/Directory.hs b/Remote/Directory.hs
index 1c81377..c960bb1 100644
--- a/Remote/Directory.hs
+++ b/Remote/Directory.hs
@@ -5,6 +5,8 @@
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Remote.Directory (remote) where
import qualified Data.ByteString.Lazy as L
@@ -68,13 +70,14 @@ directorySetup u c = do
-- verify configuration is sane
let dir = fromMaybe (error "Specify directory=") $
M.lookup "directory" c
- liftIO $ unlessM (doesDirectoryExist dir) $
- error $ "Directory does not exist: " ++ dir
+ absdir <- liftIO $ absPath dir
+ liftIO $ unlessM (doesDirectoryExist absdir) $
+ error $ "Directory does not exist: " ++ absdir
c' <- encryptionSetup c
-- The directory is stored in git config, not in this remote's
-- persistant state, so it can vary between hosts.
- gitConfigSpecialRemote u c' "directory" dir
+ gitConfigSpecialRemote u c' "directory" absdir
return $ M.delete "directory" c'
{- Locations to try to access a given Key in the Directory.
@@ -216,10 +219,14 @@ retrieveEncrypted d chunksize (cipher, enck) k f p = metered (Just p) k $ \meter
retrieveCheap :: FilePath -> ChunkSize -> Key -> FilePath -> Annex Bool
retrieveCheap _ (Just _) _ _ = return False -- no cheap retrieval for chunks
+#ifndef __WINDOWS__
retrieveCheap d _ k f = liftIO $ withStoredFiles Nothing d k go
where
go [file] = catchBoolIO $ createSymbolicLink file f >> return True
go _files = return False
+#else
+retrieveCheap _ _ _ _ = return False
+#endif
remove :: FilePath -> Key -> Annex Bool
remove d k = liftIO $ do
diff --git a/Remote/Git.hs b/Remote/Git.hs
index 752d70d..215cd59 100644
--- a/Remote/Git.hs
+++ b/Remote/Git.hs
@@ -5,6 +5,8 @@
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Remote.Git (
remote,
configRead,
@@ -18,6 +20,7 @@ import Common.Annex
import Utility.CopyFile
import Utility.Rsync
import Remote.Helper.Ssh
+import Annex.Ssh
import Types.Remote
import Types.GitConfig
import qualified Git
@@ -33,7 +36,7 @@ import qualified Annex.Content
import qualified Annex.BranchState
import qualified Annex.Branch
import qualified Utility.Url as Url
-import Utility.TempFile
+import Utility.Tmp
import Config
import Config.Cost
import Init
@@ -177,7 +180,7 @@ tryGitConfigRead r
geturlconfig headers = do
s <- Url.get (Git.repoLocation r ++ "/config") headers
- withTempFile "git-annex.tmp" $ \tmpfile h -> do
+ withTmpFile "git-annex.tmp" $ \tmpfile h -> do
hPutStr h s
hClose h
safely $ pipedconfig "git" [Param "config", Param "--null", Param "--list", Param "--file", File tmpfile]
@@ -306,6 +309,8 @@ copyFromRemote' r key file dest
- git-annex-shell transferinfo at the same time
- git-annex-shell sendkey is running.
-
+ - To avoid extra password prompts, this is only done when ssh
+ - connection caching is supported.
- Note that it actually waits for rsync to indicate
- progress before starting transferinfo, in order
- to ensure ssh connection caching works and reuses
@@ -314,7 +319,11 @@ copyFromRemote' r key file dest
- Also note that older git-annex-shell does not support
- transferinfo, so stderr is dropped and failure ignored.
-}
- feedprogressback a = do
+ feedprogressback a = ifM (isJust <$> sshCacheDir)
+ ( feedprogressback' a
+ , bracketIO noop (const noop) (a $ const noop)
+ )
+ feedprogressback' a = do
u <- getUUID
let fields = (Fields.remoteUUID, fromUUID u)
: maybe [] (\f -> [(Fields.associatedFile, f)]) file
@@ -341,6 +350,7 @@ copyFromRemote' r key file dest
copyFromRemoteCheap :: Remote -> Key -> FilePath -> Annex Bool
copyFromRemoteCheap r key file
+#ifndef __WINDOWS__
| not $ Git.repoIsUrl (repo r) = guardUsable (repo r) False $ do
loc <- liftIO $ gitAnnexLocation key (repo r) $
fromJust $ remoteGitConfig $ gitconfig r
@@ -350,6 +360,7 @@ copyFromRemoteCheap r key file
( copyFromRemote' r key Nothing file
, return False
)
+#endif
| otherwise = return False
{- Tries to copy a key's content to a remote's annex. -}
@@ -396,12 +407,14 @@ rsyncHelper callback params = do
- filesystem. Then cp could be faster. -}
rsyncOrCopyFile :: [CommandParam] -> FilePath -> FilePath -> MeterUpdate -> Annex Bool
rsyncOrCopyFile rsyncparams src dest p =
+#ifdef __WINDOWS__
+ dorsync
+ where
+#else
ifM (sameDeviceIds src dest) (docopy, dorsync)
where
sameDeviceIds a b = (==) <$> (getDeviceId a) <*> (getDeviceId b)
getDeviceId f = deviceID <$> liftIO (getFileStatus $ parentDir f)
- dorsync = rsyncHelper (Just p) $
- rsyncparams ++ [Param src, Param dest]
docopy = liftIO $ bracket
(forkIO $ watchfilesize zeroBytesProcessed)
(void . tryIO . killThread)
@@ -417,6 +430,9 @@ rsyncOrCopyFile rsyncparams src dest p =
p sz
watchfilesize sz
_ -> watchfilesize oldsz
+#endif
+ dorsync = rsyncHelper (Just p) $
+ rsyncparams ++ [File src, File dest]
{- Generates rsync parameters that ssh to the remote and asks it
- to either receive or send the key's content. -}
diff --git a/Remote/Helper/Hooks.hs b/Remote/Helper/Hooks.hs
index 1aeb6cd..dfc543d 100644
--- a/Remote/Helper/Hooks.hs
+++ b/Remote/Helper/Hooks.hs
@@ -5,6 +5,8 @@
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Remote.Helper.Hooks (addHooks) where
import qualified Data.Map as M
@@ -70,6 +72,7 @@ runHooks r starthook stophook a = do
Annex.addCleanup (remoteid ++ "-stop-command") $ runstop lck
runstop lck = do
+#ifndef __WINDOWS__
-- Drop any shared lock we have, and take an
-- exclusive lock, without blocking. If the lock
-- succeeds, we're the only process using this remote,
@@ -84,3 +87,6 @@ runHooks r starthook stophook a = do
Left _ -> noop
Right _ -> run stophook
liftIO $ closeFd fd
+#else
+ run stophook
+#endif
diff --git a/Remote/Rsync.hs b/Remote/Rsync.hs
index 88540a3..f7abbbf 100644
--- a/Remote/Rsync.hs
+++ b/Remote/Rsync.hs
@@ -5,11 +5,17 @@
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Remote.Rsync (remote) where
import qualified Data.ByteString.Lazy as L
import qualified Data.Map as M
+#ifndef __WINDOWS__
import System.Posix.Process (getProcessID)
+#else
+import System.Random (getStdRandom, random)
+#endif
import Common.Annex
import Types.Remote
@@ -155,18 +161,20 @@ retrieveEncrypted o (cipher, enck) _ f p = withTmp enck $ \tmp ->
)
remove :: RsyncOpts -> Key -> Annex Bool
-remove o k = withRsyncScratchDir $ \tmp -> liftIO $ do
- {- Send an empty directory to rysnc to make it delete. -}
- let dummy = tmp </> keyFile k
- createDirectoryIfMissing True dummy
- rsync $ rsyncOptions o ++
- map (\s -> Param $ "--include=" ++ s) includes ++
- [ Param "--exclude=*" -- exclude everything else
- , Params "--quiet --delete --recursive"
- , partialParams
- , Param $ addTrailingPathSeparator dummy
- , Param $ rsyncUrl o
- ]
+remove o k = do
+ ps <- sendParams
+ withRsyncScratchDir $ \tmp -> liftIO $ do
+ {- Send an empty directory to rysnc to make it delete. -}
+ let dummy = tmp </> keyFile k
+ createDirectoryIfMissing True dummy
+ rsync $ rsyncOptions o ++ ps ++
+ map (\s -> Param $ "--include=" ++ s) includes ++
+ [ Param "--exclude=*" -- exclude everything else
+ , Params "--quiet --delete --recursive"
+ , partialParams
+ , Param $ addTrailingPathSeparator dummy
+ , Param $ rsyncUrl o
+ ]
where
{- Specify include rules to match the directories where the
- content could be. Note that the parent directories have
@@ -200,14 +208,27 @@ checkPresent r o k = do
partialParams :: CommandParam
partialParams = Params "--partial --partial-dir=.rsync-partial"
+{- When sending files from crippled filesystems, the permissions can be all
+ - messed up, and it's better to use the default permissions on the
+ - destination. -}
+sendParams :: Annex [CommandParam]
+sendParams = ifM crippledFileSystem
+ ( return [rsyncUseDestinationPermissions]
+ , return []
+ )
+
{- Runs an action in an empty scratch directory that can be used to build
- up trees for rsync. -}
withRsyncScratchDir :: (FilePath -> Annex Bool) -> Annex Bool
withRsyncScratchDir a = do
- pid <- liftIO getProcessID
+#ifndef __WINDOWS__
+ v <- liftIO getProcessID
+#else
+ v <- liftIO (getStdRandom random :: IO Int)
+#endif
t <- fromRepo gitAnnexTmpDir
createAnnexDirectory t
- let tmp = t </> "rsynctmp" </> show pid
+ let tmp = t </> "rsynctmp" </> show v
nuke tmp
liftIO $ createDirectoryIfMissing True tmp
nuke tmp `after` a tmp
@@ -221,7 +242,7 @@ rsyncRetrieve o k dest callback =
-- use inplace when retrieving to support resuming
[ Param "--inplace"
, Param u
- , Param dest
+ , File dest
]
rsyncRemote :: RsyncOpts -> (Maybe MeterUpdate) -> [CommandParam] -> Annex Bool
@@ -258,15 +279,20 @@ rsyncSend o callback k canrename src = withRsyncScratchDir $ \tmp -> do
else ifM crippledFileSystem
( liftIO $ copyFileExternal src dest
, do
+#ifndef __WINDOWS__
liftIO $ createLink src dest
return True
+#else
+ liftIO $ copyFileExternal src dest
+#endif
)
+ ps <- sendParams
if ok
- then rsyncRemote o (Just callback)
+ then rsyncRemote o (Just callback) $ ps ++
[ Param "--recursive"
, partialParams
-- tmp/ to send contents of tmp dir
- , Param $ addTrailingPathSeparator tmp
+ , File $ addTrailingPathSeparator tmp
, Param $ rsyncUrl o
]
else return False
diff --git a/Seek.hs b/Seek.hs
index 70f5a90..ab8b58e 100644
--- a/Seek.hs
+++ b/Seek.hs
@@ -11,6 +11,8 @@
module Seek where
+import System.PosixCompat.Files
+
import Common.Annex
import Types.Command
import Types.Key
diff --git a/Setup.o b/Setup.o
index 703c3b9..1f3d545 100644
--- a/Setup.o
+++ b/Setup.o
Binary files differ
diff --git a/Test.hs b/Test.hs
index 0acb136..df21e18 100644
--- a/Test.hs
+++ b/Test.hs
@@ -11,13 +11,12 @@ import Test.HUnit
import Test.QuickCheck
import Test.QuickCheck.Test
-import System.Posix.Directory (changeWorkingDirectory)
import System.Posix.Files
-import System.Posix.Env
import Control.Exception.Extensible
import qualified Data.Map as M
import System.IO.HVFS (SystemFS(..))
import qualified Text.JSON
+import System.Path
import Common
@@ -42,6 +41,7 @@ import qualified Logs.Presence
import qualified Remote
import qualified Types.Key
import qualified Types.Messages
+import qualified Config
import qualified Config.Cost
import qualified Crypto
import qualified Utility.Path
@@ -53,6 +53,9 @@ import qualified Utility.Verifiable
import qualified Utility.Process
import qualified Utility.Misc
import qualified Utility.InodeCache
+import qualified Utility.Env
+
+type TestEnv = M.Map String String
main :: IO ()
main = do
@@ -64,10 +67,10 @@ main = do
putStrLn "Now, some broader checks ..."
putStrLn " (Do not be alarmed by odd output here; it's normal."
putStrLn " wait for the last line to see how it went.)"
- prepare
+ env <- prepare
rs <- forM hunit $ \t -> do
divider
- t
+ t env
cleanup tmpdir
divider
propigate rs qcok
@@ -119,7 +122,7 @@ quickcheck =
putStrLn desc
quickCheckResult prop
-hunit :: [IO Counts]
+hunit :: [TestEnv -> IO Counts]
hunit =
-- test order matters, later tests may rely on state from earlier
[ check "init" test_init
@@ -155,241 +158,237 @@ hunit =
, check "crypto" test_crypto
]
where
- check desc t = do
+ check desc t env = do
putStrLn desc
- runTestTT t
+ runTestTT (t env)
-test_init :: Test
-test_init = "git-annex init" ~: TestCase $ innewrepo $ do
- git_annex "init" [reponame] @? "init failed"
+test_init :: TestEnv -> Test
+test_init env = "git-annex init" ~: TestCase $ innewrepo env $ do
+ git_annex env "init" [reponame] @? "init failed"
where
reponame = "test repo"
-test_add :: Test
-test_add = "git-annex add" ~: TestList [basic, sha1dup, subdirs]
+test_add :: TestEnv -> Test
+test_add env = "git-annex add" ~: TestList [basic, sha1dup, subdirs]
where
-- this test case runs in the main repo, to set up a basic
-- annexed file that later tests will use
- basic = TestCase $ inmainrepo $ do
+ basic = TestCase $ inmainrepo env $ do
writeFile annexedfile $ content annexedfile
- git_annex "add" [annexedfile] @? "add failed"
+ git_annex env "add" [annexedfile] @? "add failed"
annexed_present annexedfile
writeFile sha1annexedfile $ content sha1annexedfile
- git_annex "add" [sha1annexedfile, "--backend=SHA1"] @? "add with SHA1 failed"
+ git_annex env "add" [sha1annexedfile, "--backend=SHA1"] @? "add with SHA1 failed"
annexed_present sha1annexedfile
checkbackend sha1annexedfile backendSHA1
writeFile wormannexedfile $ content wormannexedfile
- git_annex "add" [wormannexedfile, "--backend=WORM"] @? "add with WORM failed"
+ git_annex env "add" [wormannexedfile, "--backend=WORM"] @? "add with WORM failed"
annexed_present wormannexedfile
checkbackend wormannexedfile backendWORM
boolSystem "git" [Params "rm --force -q", File wormannexedfile] @? "git rm failed"
writeFile ingitfile $ content ingitfile
boolSystem "git" [Param "add", File ingitfile] @? "git add failed"
- boolSystem "git" [Params "commit -q -a -m commit"] @? "git commit failed"
- git_annex "add" [ingitfile] @? "add ingitfile should be no-op"
+ boolSystem "git" [Params "commit -q -m commit"] @? "git commit failed"
+ git_annex env "add" [ingitfile] @? "add ingitfile should be no-op"
unannexed ingitfile
- sha1dup = TestCase $ intmpclonerepo $ do
+ sha1dup = TestCase $ intmpclonerepo env $ do
writeFile sha1annexedfiledup $ content sha1annexedfiledup
- git_annex "add" [sha1annexedfiledup, "--backend=SHA1"] @? "add of second file with same SHA1 failed"
+ git_annex env "add" [sha1annexedfiledup, "--backend=SHA1"] @? "add of second file with same SHA1 failed"
annexed_present sha1annexedfiledup
annexed_present sha1annexedfile
- subdirs = TestCase $ intmpclonerepo $ do
+ subdirs = TestCase $ intmpclonerepo env $ do
createDirectory "dir"
writeFile "dir/foo" $ content annexedfile
- git_annex "add" ["dir"] @? "add of subdir failed"
+ git_annex env "add" ["dir"] @? "add of subdir failed"
createDirectory "dir2"
writeFile "dir2/foo" $ content annexedfile
- changeWorkingDirectory "dir"
- git_annex "add" ["../dir2"] @? "add of ../subdir failed"
+ setCurrentDirectory "dir"
+ git_annex env "add" ["../dir2"] @? "add of ../subdir failed"
-test_reinject :: Test
-test_reinject = "git-annex reinject/fromkey" ~: TestCase $ intmpclonerepo $ do
- git_annex "drop" ["--force", sha1annexedfile] @? "drop failed"
+test_reinject :: TestEnv -> Test
+test_reinject env = "git-annex reinject/fromkey" ~: TestCase $ intmpclonerepo env $ do
+ git_annex env "drop" ["--force", sha1annexedfile] @? "drop failed"
writeFile tmp $ content sha1annexedfile
r <- annexeval $ Types.Backend.getKey backendSHA1 $
Types.KeySource.KeySource { Types.KeySource.keyFilename = tmp, Types.KeySource.contentLocation = tmp, Types.KeySource.inodeCache = Nothing }
let key = Types.Key.key2file $ fromJust r
- git_annex "reinject" [tmp, sha1annexedfile] @? "reinject failed"
- git_annex "fromkey" [key, sha1annexedfiledup] @? "fromkey failed"
+ git_annex env "reinject" [tmp, sha1annexedfile] @? "reinject failed"
+ git_annex env "fromkey" [key, sha1annexedfiledup] @? "fromkey failed for dup"
annexed_present sha1annexedfiledup
where
tmp = "tmpfile"
-test_unannex :: Test
-test_unannex = "git-annex unannex" ~: TestList [nocopy, withcopy]
+test_unannex :: TestEnv -> Test
+test_unannex env = "git-annex unannex" ~: TestList [nocopy, withcopy]
where
- nocopy = "no content" ~: intmpclonerepo $ do
+ nocopy = "no content" ~: intmpclonerepo env $ do
annexed_notpresent annexedfile
- git_annex "unannex" [annexedfile] @? "unannex failed with no copy"
+ git_annex env "unannex" [annexedfile] @? "unannex failed with no copy"
annexed_notpresent annexedfile
- withcopy = "with content" ~: intmpclonerepo $ do
- git_annex "get" [annexedfile] @? "get failed"
+ withcopy = "with content" ~: intmpclonerepo env $ do
+ git_annex env "get" [annexedfile] @? "get failed"
annexed_present annexedfile
- git_annex "unannex" [annexedfile, sha1annexedfile] @? "unannex failed"
+ git_annex env "unannex" [annexedfile, sha1annexedfile] @? "unannex failed"
unannexed annexedfile
- git_annex "unannex" [annexedfile] @? "unannex failed on non-annexed file"
+ git_annex env "unannex" [annexedfile] @? "unannex failed on non-annexed file"
unannexed annexedfile
- git_annex "unannex" [ingitfile] @? "unannex ingitfile should be no-op"
+ git_annex env "unannex" [ingitfile] @? "unannex ingitfile should be no-op"
unannexed ingitfile
-test_drop :: Test
-test_drop = "git-annex drop" ~: TestList [noremote, withremote, untrustedremote]
+test_drop :: TestEnv -> Test
+test_drop env = "git-annex drop" ~: TestList [noremote, withremote, untrustedremote]
where
- noremote = "no remotes" ~: TestCase $ intmpclonerepo $ do
- git_annex "get" [annexedfile] @? "get failed"
+ noremote = "no remotes" ~: TestCase $ intmpclonerepo env $ do
+ git_annex env "get" [annexedfile] @? "get failed"
boolSystem "git" [Params "remote rm origin"]
@? "git remote rm origin failed"
- not <$> git_annex "drop" [annexedfile] @? "drop wrongly succeeded with no known copy of file"
+ not <$> git_annex env "drop" [annexedfile] @? "drop wrongly succeeded with no known copy of file"
annexed_present annexedfile
- git_annex "drop" ["--force", annexedfile] @? "drop --force failed"
+ git_annex env "drop" ["--force", annexedfile] @? "drop --force failed"
annexed_notpresent annexedfile
- git_annex "drop" [annexedfile] @? "drop of dropped file failed"
- git_annex "drop" [ingitfile] @? "drop ingitfile should be no-op"
+ git_annex env "drop" [annexedfile] @? "drop of dropped file failed"
+ git_annex env "drop" [ingitfile] @? "drop ingitfile should be no-op"
unannexed ingitfile
- withremote = "with remote" ~: TestCase $ intmpclonerepo $ do
- git_annex "get" [annexedfile] @? "get failed"
+ withremote = "with remote" ~: TestCase $ intmpclonerepo env $ do
+ git_annex env "get" [annexedfile] @? "get failed"
annexed_present annexedfile
- git_annex "drop" [annexedfile] @? "drop failed though origin has copy"
+ git_annex env "drop" [annexedfile] @? "drop failed though origin has copy"
annexed_notpresent annexedfile
- inmainrepo $ annexed_present annexedfile
- untrustedremote = "untrusted remote" ~: TestCase $ intmpclonerepo $ do
- git_annex "untrust" ["origin"] @? "untrust of origin failed"
- git_annex "get" [annexedfile] @? "get failed"
+ inmainrepo env $ annexed_present annexedfile
+ untrustedremote = "untrusted remote" ~: TestCase $ intmpclonerepo env $ do
+ git_annex env "untrust" ["origin"] @? "untrust of origin failed"
+ git_annex env "get" [annexedfile] @? "get failed"
annexed_present annexedfile
- not <$> git_annex "drop" [annexedfile] @? "drop wrongly suceeded with only an untrusted copy of the file"
+ not <$> git_annex env "drop" [annexedfile] @? "drop wrongly suceeded with only an untrusted copy of the file"
annexed_present annexedfile
- inmainrepo $ annexed_present annexedfile
+ inmainrepo env $ annexed_present annexedfile
-test_get :: Test
-test_get = "git-annex get" ~: TestCase $ intmpclonerepo $ do
- inmainrepo $ annexed_present annexedfile
+test_get :: TestEnv -> Test
+test_get env = "git-annex get" ~: TestCase $ intmpclonerepo env $ do
+ inmainrepo env $ annexed_present annexedfile
annexed_notpresent annexedfile
- git_annex "get" [annexedfile] @? "get of file failed"
- inmainrepo $ annexed_present annexedfile
+ git_annex env "get" [annexedfile] @? "get of file failed"
+ inmainrepo env $ annexed_present annexedfile
annexed_present annexedfile
- git_annex "get" [annexedfile] @? "get of file already here failed"
- inmainrepo $ annexed_present annexedfile
+ git_annex env "get" [annexedfile] @? "get of file already here failed"
+ inmainrepo env $ annexed_present annexedfile
annexed_present annexedfile
- inmainrepo $ unannexed ingitfile
+ inmainrepo env $ unannexed ingitfile
unannexed ingitfile
- git_annex "get" [ingitfile] @? "get ingitfile should be no-op"
- inmainrepo $ unannexed ingitfile
+ git_annex env "get" [ingitfile] @? "get ingitfile should be no-op"
+ inmainrepo env $ unannexed ingitfile
unannexed ingitfile
-test_move :: Test
-test_move = "git-annex move" ~: TestCase $ intmpclonerepo $ do
+test_move :: TestEnv -> Test
+test_move env = "git-annex move" ~: TestCase $ intmpclonerepo env $ do
annexed_notpresent annexedfile
- inmainrepo $ annexed_present annexedfile
- git_annex "move" ["--from", "origin", annexedfile] @? "move --from of file failed"
+ inmainrepo env $ annexed_present annexedfile
+ git_annex env "move" ["--from", "origin", annexedfile] @? "move --from of file failed"
annexed_present annexedfile
- inmainrepo $ annexed_notpresent annexedfile
- git_annex "move" ["--from", "origin", annexedfile] @? "move --from of file already here failed"
+ inmainrepo env $ annexed_notpresent annexedfile
+ git_annex env "move" ["--from", "origin", annexedfile] @? "move --from of file already here failed"
annexed_present annexedfile
- inmainrepo $ annexed_notpresent annexedfile
- git_annex "move" ["--to", "origin", annexedfile] @? "move --to of file failed"
- inmainrepo $ annexed_present annexedfile
+ inmainrepo env $ annexed_notpresent annexedfile
+ git_annex env "move" ["--to", "origin", annexedfile] @? "move --to of file failed"
+ inmainrepo env $ annexed_present annexedfile
annexed_notpresent annexedfile
- git_annex "move" ["--to", "origin", annexedfile] @? "move --to of file already there failed"
- inmainrepo $ annexed_present annexedfile
+ git_annex env "move" ["--to", "origin", annexedfile] @? "move --to of file already there failed"
+ inmainrepo env $ annexed_present annexedfile
annexed_notpresent annexedfile
unannexed ingitfile
- inmainrepo $ unannexed ingitfile
- git_annex "move" ["--to", "origin", ingitfile] @? "move of ingitfile should be no-op"
+ inmainrepo env $ unannexed ingitfile
+ git_annex env "move" ["--to", "origin", ingitfile] @? "move of ingitfile should be no-op"
unannexed ingitfile
- inmainrepo $ unannexed ingitfile
- git_annex "move" ["--from", "origin", ingitfile] @? "move of ingitfile should be no-op"
+ inmainrepo env $ unannexed ingitfile
+ git_annex env "move" ["--from", "origin", ingitfile] @? "move of ingitfile should be no-op"
unannexed ingitfile
- inmainrepo $ unannexed ingitfile
+ inmainrepo env $ unannexed ingitfile
-test_copy :: Test
-test_copy = "git-annex copy" ~: TestCase $ intmpclonerepo $ do
+test_copy :: TestEnv -> Test
+test_copy env = "git-annex copy" ~: TestCase $ intmpclonerepo env $ do
annexed_notpresent annexedfile
- inmainrepo $ annexed_present annexedfile
- git_annex "copy" ["--from", "origin", annexedfile] @? "copy --from of file failed"
+ inmainrepo env $ annexed_present annexedfile
+ git_annex env "copy" ["--from", "origin", annexedfile] @? "copy --from of file failed"
annexed_present annexedfile
- inmainrepo $ annexed_present annexedfile
- git_annex "copy" ["--from", "origin", annexedfile] @? "copy --from of file already here failed"
+ inmainrepo env $ annexed_present annexedfile
+ git_annex env "copy" ["--from", "origin", annexedfile] @? "copy --from of file already here failed"
annexed_present annexedfile
- inmainrepo $ annexed_present annexedfile
- git_annex "copy" ["--to", "origin", annexedfile] @? "copy --to of file already there failed"
+ inmainrepo env $ annexed_present annexedfile
+ git_annex env "copy" ["--to", "origin", annexedfile] @? "copy --to of file already there failed"
annexed_present annexedfile
- inmainrepo $ annexed_present annexedfile
- git_annex "move" ["--to", "origin", annexedfile] @? "move --to of file already there failed"
+ inmainrepo env $ annexed_present annexedfile
+ git_annex env "move" ["--to", "origin", annexedfile] @? "move --to of file already there failed"
annexed_notpresent annexedfile
- inmainrepo $ annexed_present annexedfile
+ inmainrepo env $ annexed_present annexedfile
unannexed ingitfile
- inmainrepo $ unannexed ingitfile
- git_annex "copy" ["--to", "origin", ingitfile] @? "copy of ingitfile should be no-op"
+ inmainrepo env $ unannexed ingitfile
+ git_annex env "copy" ["--to", "origin", ingitfile] @? "copy of ingitfile should be no-op"
unannexed ingitfile
- inmainrepo $ unannexed ingitfile
- git_annex "copy" ["--from", "origin", ingitfile] @? "copy of ingitfile should be no-op"
+ inmainrepo env $ unannexed ingitfile
+ git_annex env "copy" ["--from", "origin", ingitfile] @? "copy of ingitfile should be no-op"
checkregularfile ingitfile
checkcontent ingitfile
-test_lock :: Test
-test_lock = "git-annex unlock/lock" ~: intmpclonerepo $ do
+test_lock :: TestEnv -> Test
+test_lock env = "git-annex unlock/lock" ~: intmpclonerepo env $ do
-- regression test: unlock of not present file should skip it
annexed_notpresent annexedfile
- not <$> git_annex "unlock" [annexedfile] @? "unlock failed to fail with not present file"
+ not <$> git_annex env "unlock" [annexedfile] @? "unlock failed to fail with not present file"
annexed_notpresent annexedfile
- git_annex "get" [annexedfile] @? "get of file failed"
+ git_annex env "get" [annexedfile] @? "get of file failed"
annexed_present annexedfile
- git_annex "unlock" [annexedfile] @? "unlock failed"
+ git_annex env "unlock" [annexedfile] @? "unlock failed"
unannexed annexedfile
-- write different content, to verify that lock
-- throws it away
changecontent annexedfile
writeFile annexedfile $ content annexedfile ++ "foo"
- git_annex "lock" [annexedfile] @? "lock failed"
+ git_annex env "lock" [annexedfile] @? "lock failed"
annexed_present annexedfile
- git_annex "unlock" [annexedfile] @? "unlock failed"
+ git_annex env "unlock" [annexedfile] @? "unlock failed"
unannexed annexedfile
changecontent annexedfile
- git_annex "add" [annexedfile] @? "add of modified file failed"
+ git_annex env "add" [annexedfile] @? "add of modified file failed"
runchecks [checklink, checkunwritable] annexedfile
c <- readFile annexedfile
assertEqual "content of modified file" c (changedcontent annexedfile)
- r' <- git_annex "drop" [annexedfile]
+ r' <- git_annex env "drop" [annexedfile]
not r' @? "drop wrongly succeeded with no known copy of modified file"
-test_edit :: Test
-test_edit = "git-annex edit/commit" ~: TestList [t False, t True]
- where t precommit = TestCase $ intmpclonerepo $ do
- git_annex "get" [annexedfile] @? "get of file failed"
+test_edit :: TestEnv -> Test
+test_edit env = "git-annex edit/commit" ~: TestList [t False, t True]
+ where t precommit = TestCase $ intmpclonerepo env $ do
+ git_annex env "get" [annexedfile] @? "get of file failed"
annexed_present annexedfile
- git_annex "edit" [annexedfile] @? "edit failed"
+ git_annex env "edit" [annexedfile] @? "edit failed"
unannexed annexedfile
changecontent annexedfile
+ boolSystem "git" [Param "add", File annexedfile]
+ @? "git add of edited file failed"
if precommit
- then do
- -- pre-commit depends on the file being
- -- staged, normally git commit does this
- boolSystem "git" [Param "add", File annexedfile]
- @? "git add of edited file failed"
- git_annex "pre-commit" []
- @? "pre-commit failed"
- else do
- boolSystem "git" [Params "commit -q -a -m contentchanged"]
- @? "git commit of edited file failed"
+ then git_annex env "pre-commit" []
+ @? "pre-commit failed"
+ else boolSystem "git" [Params "commit -q -m contentchanged"]
+ @? "git commit of edited file failed"
runchecks [checklink, checkunwritable] annexedfile
c <- readFile annexedfile
assertEqual "content of modified file" c (changedcontent annexedfile)
- not <$> git_annex "drop" [annexedfile] @? "drop wrongly succeeded with no known copy of modified file"
+ not <$> git_annex env "drop" [annexedfile] @? "drop wrongly succeeded with no known copy of modified file"
-test_fix :: Test
-test_fix = "git-annex fix" ~: intmpclonerepo $ do
+test_fix :: TestEnv -> Test
+test_fix env = "git-annex fix" ~: intmpclonerepo env $ do
annexed_notpresent annexedfile
- git_annex "fix" [annexedfile] @? "fix of not present failed"
+ git_annex env "fix" [annexedfile] @? "fix of not present failed"
annexed_notpresent annexedfile
- git_annex "get" [annexedfile] @? "get of file failed"
+ git_annex env "get" [annexedfile] @? "get of file failed"
annexed_present annexedfile
- git_annex "fix" [annexedfile] @? "fix of present file failed"
+ git_annex env "fix" [annexedfile] @? "fix of present file failed"
annexed_present annexedfile
createDirectory subdir
boolSystem "git" [Param "mv", File annexedfile, File subdir]
@? "git mv failed"
- git_annex "fix" [newfile] @? "fix of moved file failed"
+ git_annex env "fix" [newfile] @? "fix of moved file failed"
runchecks [checklink, checkunwritable] newfile
c <- readFile newfile
assertEqual "content of moved file" c (content annexedfile)
@@ -397,23 +396,23 @@ test_fix = "git-annex fix" ~: intmpclonerepo $ do
subdir = "s"
newfile = subdir ++ "/" ++ annexedfile
-test_trust :: Test
-test_trust = "git-annex trust/untrust/semitrust/dead" ~: intmpclonerepo $ do
- git_annex "trust" [repo] @? "trust failed"
+test_trust :: TestEnv -> Test
+test_trust env = "git-annex trust/untrust/semitrust/dead" ~: intmpclonerepo env $ do
+ git_annex env "trust" [repo] @? "trust failed"
trustcheck Logs.Trust.Trusted "trusted 1"
- git_annex "trust" [repo] @? "trust of trusted failed"
+ git_annex env "trust" [repo] @? "trust of trusted failed"
trustcheck Logs.Trust.Trusted "trusted 2"
- git_annex "untrust" [repo] @? "untrust failed"
+ git_annex env "untrust" [repo] @? "untrust failed"
trustcheck Logs.Trust.UnTrusted "untrusted 1"
- git_annex "untrust" [repo] @? "untrust of untrusted failed"
+ git_annex env "untrust" [repo] @? "untrust of untrusted failed"
trustcheck Logs.Trust.UnTrusted "untrusted 2"
- git_annex "dead" [repo] @? "dead failed"
+ git_annex env "dead" [repo] @? "dead failed"
trustcheck Logs.Trust.DeadTrusted "deadtrusted 1"
- git_annex "dead" [repo] @? "dead of dead failed"
+ git_annex env "dead" [repo] @? "dead of dead failed"
trustcheck Logs.Trust.DeadTrusted "deadtrusted 2"
- git_annex "semitrust" [repo] @? "semitrust failed"
+ git_annex env "semitrust" [repo] @? "semitrust failed"
trustcheck Logs.Trust.SemiTrusted "semitrusted 1"
- git_annex "semitrust" [repo] @? "semitrust of semitrusted failed"
+ git_annex env "semitrust" [repo] @? "semitrust of semitrusted failed"
trustcheck Logs.Trust.SemiTrusted "semitrusted 2"
where
repo = "origin"
@@ -424,64 +423,64 @@ test_trust = "git-annex trust/untrust/semitrust/dead" ~: intmpclonerepo $ do
return $ u `elem` l
assertBool msg present
-test_fsck :: Test
-test_fsck = "git-annex fsck" ~: TestList [basicfsck, barefsck, withlocaluntrusted, withremoteuntrusted]
+test_fsck :: TestEnv -> Test
+test_fsck env = "git-annex fsck" ~: TestList [basicfsck, barefsck, withlocaluntrusted, withremoteuntrusted]
where
- basicfsck = TestCase $ intmpclonerepo $ do
- git_annex "fsck" [] @? "fsck failed"
+ basicfsck = TestCase $ intmpclonerepo env $ do
+ git_annex env "fsck" [] @? "fsck failed"
boolSystem "git" [Params "config annex.numcopies 2"] @? "git config failed"
fsck_should_fail "numcopies unsatisfied"
boolSystem "git" [Params "config annex.numcopies 1"] @? "git config failed"
corrupt annexedfile
corrupt sha1annexedfile
- barefsck = TestCase $ intmpbareclonerepo $ do
- git_annex "fsck" [] @? "fsck failed"
- withlocaluntrusted = TestCase $ intmpclonerepo $ do
- git_annex "get" [annexedfile] @? "get failed"
- git_annex "untrust" ["origin"] @? "untrust of origin repo failed"
- git_annex "untrust" ["."] @? "untrust of current repo failed"
+ barefsck = TestCase $ intmpbareclonerepo env $ do
+ git_annex env "fsck" [] @? "fsck failed"
+ withlocaluntrusted = TestCase $ intmpclonerepo env $ do
+ git_annex env "get" [annexedfile] @? "get failed"
+ git_annex env "untrust" ["origin"] @? "untrust of origin repo failed"
+ git_annex env "untrust" ["."] @? "untrust of current repo failed"
fsck_should_fail "content only available in untrusted (current) repository"
- git_annex "trust" ["."] @? "trust of current repo failed"
- git_annex "fsck" [annexedfile] @? "fsck failed on file present in trusted repo"
- withremoteuntrusted = TestCase $ intmpclonerepo $ do
+ git_annex env "trust" ["."] @? "trust of current repo failed"
+ git_annex env "fsck" [annexedfile] @? "fsck failed on file present in trusted repo"
+ withremoteuntrusted = TestCase $ intmpclonerepo env $ do
boolSystem "git" [Params "config annex.numcopies 2"] @? "git config failed"
- git_annex "get" [annexedfile] @? "get failed"
- git_annex "get" [sha1annexedfile] @? "get failed"
- git_annex "fsck" [] @? "fsck failed with numcopies=2 and 2 copies"
- git_annex "untrust" ["origin"] @? "untrust of origin failed"
+ git_annex env "get" [annexedfile] @? "get failed"
+ git_annex env "get" [sha1annexedfile] @? "get failed"
+ git_annex env "fsck" [] @? "fsck failed with numcopies=2 and 2 copies"
+ git_annex env "untrust" ["origin"] @? "untrust of origin failed"
fsck_should_fail "content not replicated to enough non-untrusted repositories"
corrupt f = do
- git_annex "get" [f] @? "get of file failed"
+ git_annex env "get" [f] @? "get of file failed"
Utility.FileMode.allowWrite f
writeFile f (changedcontent f)
- not <$> git_annex "fsck" [] @? "fsck failed to fail with corrupted file content"
- git_annex "fsck" [] @? "fsck unexpectedly failed again; previous one did not fix problem with " ++ f
+ not <$> git_annex env "fsck" [] @? "fsck failed to fail with corrupted file content"
+ git_annex env "fsck" [] @? "fsck unexpectedly failed again; previous one did not fix problem with " ++ f
fsck_should_fail m = do
- not <$> git_annex "fsck" [] @? "fsck failed to fail with " ++ m
+ not <$> git_annex env "fsck" [] @? "fsck failed to fail with " ++ m
-test_migrate :: Test
-test_migrate = "git-annex migrate" ~: TestList [t False, t True]
- where t usegitattributes = TestCase $ intmpclonerepo $ do
+test_migrate :: TestEnv -> Test
+test_migrate env = "git-annex migrate" ~: TestList [t False, t True]
+ where t usegitattributes = TestCase $ intmpclonerepo env $ do
annexed_notpresent annexedfile
annexed_notpresent sha1annexedfile
- git_annex "migrate" [annexedfile] @? "migrate of not present failed"
- git_annex "migrate" [sha1annexedfile] @? "migrate of not present failed"
- git_annex "get" [annexedfile] @? "get of file failed"
- git_annex "get" [sha1annexedfile] @? "get of file failed"
+ git_annex env "migrate" [annexedfile] @? "migrate of not present failed"
+ git_annex env "migrate" [sha1annexedfile] @? "migrate of not present failed"
+ git_annex env "get" [annexedfile] @? "get of file failed"
+ git_annex env "get" [sha1annexedfile] @? "get of file failed"
annexed_present annexedfile
annexed_present sha1annexedfile
if usegitattributes
then do
writeFile ".gitattributes" $ "* annex.backend=SHA1"
- git_annex "migrate" [sha1annexedfile]
+ git_annex env "migrate" [sha1annexedfile]
@? "migrate sha1annexedfile failed"
- git_annex "migrate" [annexedfile]
+ git_annex env "migrate" [annexedfile]
@? "migrate annexedfile failed"
else do
- git_annex "migrate" [sha1annexedfile, "--backend", "SHA1"]
+ git_annex env "migrate" [sha1annexedfile, "--backend", "SHA1"]
@? "migrate sha1annexedfile failed"
- git_annex "migrate" [annexedfile, "--backend", "SHA1"]
+ git_annex env "migrate" [annexedfile, "--backend", "SHA1"]
@? "migrate annexedfile failed"
annexed_present annexedfile
annexed_present sha1annexedfile
@@ -490,22 +489,22 @@ test_migrate = "git-annex migrate" ~: TestList [t False, t True]
-- check that reversing a migration works
writeFile ".gitattributes" $ "* annex.backend=SHA256"
- git_annex "migrate" [sha1annexedfile]
+ git_annex env "migrate" [sha1annexedfile]
@? "migrate sha1annexedfile failed"
- git_annex "migrate" [annexedfile]
+ git_annex env "migrate" [annexedfile]
@? "migrate annexedfile failed"
annexed_present annexedfile
annexed_present sha1annexedfile
checkbackend annexedfile backendSHA256
checkbackend sha1annexedfile backendSHA256
-test_unused :: Test
-test_unused = "git-annex unused/dropunused" ~: intmpclonerepo $ do
+test_unused :: TestEnv -> Test
+test_unused env = "git-annex unused/dropunused" ~: intmpclonerepo env $ do
-- keys have to be looked up before files are removed
annexedfilekey <- annexeval $ findkey annexedfile
sha1annexedfilekey <- annexeval $ findkey sha1annexedfile
- git_annex "get" [annexedfile] @? "get of file failed"
- git_annex "get" [sha1annexedfile] @? "get of file failed"
+ git_annex env "get" [annexedfile] @? "get of file failed"
+ git_annex env "get" [sha1annexedfile] @? "get of file failed"
checkunused [] "after get"
boolSystem "git" [Params "rm -q", File annexedfile] @? "git rm failed"
checkunused [] "after rm"
@@ -519,17 +518,17 @@ test_unused = "git-annex unused/dropunused" ~: intmpclonerepo $ do
checkunused [annexedfilekey, sha1annexedfilekey] "after rm sha1annexedfile"
-- good opportunity to test dropkey also
- git_annex "dropkey" ["--force", Types.Key.key2file annexedfilekey]
+ git_annex env "dropkey" ["--force", Types.Key.key2file annexedfilekey]
@? "dropkey failed"
checkunused [sha1annexedfilekey] ("after dropkey --force " ++ Types.Key.key2file annexedfilekey)
- git_annex "dropunused" ["1", "2"] @? "dropunused failed"
+ git_annex env "dropunused" ["1", "2"] @? "dropunused failed"
checkunused [] "after dropunused"
- git_annex "dropunused" ["10", "501"] @? "dropunused failed on bogus numbers"
+ git_annex env "dropunused" ["10", "501"] @? "dropunused failed on bogus numbers"
where
checkunused expectedkeys desc = do
- git_annex "unused" [] @? "unused failed"
+ git_annex env "unused" [] @? "unused failed"
unusedmap <- annexeval $ Logs.Unused.readUnusedLog ""
let unusedkeys = M.elems unusedmap
assertEqual ("unused keys differ " ++ desc)
@@ -538,119 +537,119 @@ test_unused = "git-annex unused/dropunused" ~: intmpclonerepo $ do
r <- Backend.lookupFile f
return $ fst $ fromJust r
-test_describe :: Test
-test_describe = "git-annex describe" ~: intmpclonerepo $ do
- git_annex "describe" [".", "this repo"] @? "describe 1 failed"
- git_annex "describe" ["origin", "origin repo"] @? "describe 2 failed"
+test_describe :: TestEnv -> Test
+test_describe env = "git-annex describe" ~: intmpclonerepo env $ do
+ git_annex env "describe" [".", "this repo"] @? "describe 1 failed"
+ git_annex env "describe" ["origin", "origin repo"] @? "describe 2 failed"
-test_find :: Test
-test_find = "git-annex find" ~: intmpclonerepo $ do
+test_find :: TestEnv -> Test
+test_find env = "git-annex find" ~: intmpclonerepo env $ do
annexed_notpresent annexedfile
- git_annex_expectoutput "find" [] []
- git_annex "get" [annexedfile] @? "get failed"
+ git_annex_expectoutput env "find" [] []
+ git_annex env "get" [annexedfile] @? "get failed"
annexed_present annexedfile
annexed_notpresent sha1annexedfile
- git_annex_expectoutput "find" [] [annexedfile]
- git_annex_expectoutput "find" ["--exclude", annexedfile, "--and", "--exclude", sha1annexedfile] []
- git_annex_expectoutput "find" ["--include", annexedfile] [annexedfile]
- git_annex_expectoutput "find" ["--not", "--in", "origin"] []
- git_annex_expectoutput "find" ["--copies", "1", "--and", "--not", "--copies", "2"] [sha1annexedfile]
- git_annex_expectoutput "find" ["--inbackend", "SHA1"] [sha1annexedfile]
- git_annex_expectoutput "find" ["--inbackend", "WORM"] []
+ git_annex_expectoutput env "find" [] [annexedfile]
+ git_annex_expectoutput env "find" ["--exclude", annexedfile, "--and", "--exclude", sha1annexedfile] []
+ git_annex_expectoutput env "find" ["--include", annexedfile] [annexedfile]
+ git_annex_expectoutput env "find" ["--not", "--in", "origin"] []
+ git_annex_expectoutput env "find" ["--copies", "1", "--and", "--not", "--copies", "2"] [sha1annexedfile]
+ git_annex_expectoutput env "find" ["--inbackend", "SHA1"] [sha1annexedfile]
+ git_annex_expectoutput env "find" ["--inbackend", "WORM"] []
{- --include=* should match files in subdirectories too,
- and --exclude=* should exclude them. -}
createDirectory "dir"
writeFile "dir/subfile" "subfile"
- git_annex "add" ["dir"] @? "add of subdir failed"
- git_annex_expectoutput "find" ["--include", "*", "--exclude", annexedfile, "--exclude", sha1annexedfile] ["dir/subfile"]
- git_annex_expectoutput "find" ["--exclude", "*"] []
+ git_annex env "add" ["dir"] @? "add of subdir failed"
+ git_annex_expectoutput env "find" ["--include", "*", "--exclude", annexedfile, "--exclude", sha1annexedfile] ["dir/subfile"]
+ git_annex_expectoutput env "find" ["--exclude", "*"] []
-test_merge :: Test
-test_merge = "git-annex merge" ~: intmpclonerepo $ do
- git_annex "merge" [] @? "merge failed"
+test_merge :: TestEnv -> Test
+test_merge env = "git-annex merge" ~: intmpclonerepo env $ do
+ git_annex env "merge" [] @? "merge failed"
-test_status :: Test
-test_status = "git-annex status" ~: intmpclonerepo $ do
- json <- git_annex_output "status" ["--json"]
+test_status :: TestEnv -> Test
+test_status env = "git-annex status" ~: intmpclonerepo env $ do
+ json <- git_annex_output env "status" ["--json"]
case Text.JSON.decodeStrict json :: Text.JSON.Result (Text.JSON.JSObject Text.JSON.JSValue) of
Text.JSON.Ok _ -> return ()
Text.JSON.Error e -> assertFailure e
-test_version :: Test
-test_version = "git-annex version" ~: intmpclonerepo $ do
- git_annex "version" [] @? "version failed"
+test_version :: TestEnv -> Test
+test_version env = "git-annex version" ~: intmpclonerepo env $ do
+ git_annex env "version" [] @? "version failed"
-test_sync :: Test
-test_sync = "git-annex sync" ~: intmpclonerepo $ do
- git_annex "sync" [] @? "sync failed"
+test_sync :: TestEnv -> Test
+test_sync env = "git-annex sync" ~: intmpclonerepo env $ do
+ git_annex env "sync" [] @? "sync failed"
{- Regression test for sync merge bug fixed in
- 0214e0fb175a608a49b812d81b4632c081f63027 -}
-test_sync_regression :: Test
-test_sync_regression = "git-annex sync_regression" ~:
+test_sync_regression :: TestEnv -> Test
+test_sync_regression env = "git-annex sync_regression" ~:
{- We need 3 repos to see this bug. -}
- withtmpclonerepo False $ \r1 -> do
- withtmpclonerepo False $ \r2 -> do
- withtmpclonerepo False $ \r3 -> do
- forM_ [r1, r2, r3] $ \r -> indir r $ do
+ withtmpclonerepo env False $ \r1 -> do
+ withtmpclonerepo env False $ \r2 -> do
+ withtmpclonerepo env False $ \r3 -> do
+ forM_ [r1, r2, r3] $ \r -> indir env r $ do
when (r /= r1) $
boolSystem "git" [Params "remote add r1", File ("../../" ++ r1)] @? "remote add"
when (r /= r2) $
boolSystem "git" [Params "remote add r2", File ("../../" ++ r2)] @? "remote add"
when (r /= r3) $
boolSystem "git" [Params "remote add r3", File ("../../" ++ r3)] @? "remote add"
- git_annex "get" [annexedfile] @? "get failed"
+ git_annex env "get" [annexedfile] @? "get failed"
boolSystem "git" [Params "remote rm origin"] @? "remote rm"
- forM_ [r3, r2, r1] $ \r -> indir r $
- git_annex "sync" [] @? "sync failed"
- forM_ [r3, r2] $ \r -> indir r $
- git_annex "drop" ["--force", annexedfile] @? "drop failed"
- indir r1 $ do
- git_annex "sync" [] @? "sync failed in r1"
- git_annex_expectoutput "find" ["--in", "r3"] []
+ forM_ [r3, r2, r1] $ \r -> indir env r $
+ git_annex env "sync" [] @? "sync failed"
+ forM_ [r3, r2] $ \r -> indir env r $
+ git_annex env "drop" ["--force", annexedfile] @? "drop failed"
+ indir env r1 $ do
+ git_annex env "sync" [] @? "sync failed in r1"
+ git_annex_expectoutput env "find" ["--in", "r3"] []
{- This was the bug. The sync
- mangled location log data and it
- thought the file was still in r2 -}
- git_annex_expectoutput "find" ["--in", "r2"] []
+ git_annex_expectoutput env "find" ["--in", "r2"] []
-test_map :: Test
-test_map = "git-annex map" ~: intmpclonerepo $ do
+test_map :: TestEnv -> Test
+test_map env = "git-annex map" ~: intmpclonerepo env $ do
-- set descriptions, that will be looked for in the map
- git_annex "describe" [".", "this repo"] @? "describe 1 failed"
- git_annex "describe" ["origin", "origin repo"] @? "describe 2 failed"
+ git_annex env "describe" [".", "this repo"] @? "describe 1 failed"
+ git_annex env "describe" ["origin", "origin repo"] @? "describe 2 failed"
-- --fast avoids it running graphviz, not a build dependency
- git_annex "map" ["--fast"] @? "map failed"
+ git_annex env "map" ["--fast"] @? "map failed"
-test_uninit :: Test
-test_uninit = "git-annex uninit" ~: intmpclonerepo $ do
- git_annex "get" [] @? "get failed"
+test_uninit :: TestEnv -> Test
+test_uninit env = "git-annex uninit" ~: intmpclonerepo env $ do
+ git_annex env "get" [] @? "get failed"
annexed_present annexedfile
boolSystem "git" [Params "checkout git-annex"] @? "git checkout git-annex"
- not <$> git_annex "uninit" [] @? "uninit failed to fail when git-annex branch was checked out"
+ not <$> git_annex env "uninit" [] @? "uninit failed to fail when git-annex branch was checked out"
boolSystem "git" [Params "checkout master"] @? "git checkout master"
- _ <- git_annex "uninit" [] -- exit status not checked; does abnormal exit
+ _ <- git_annex env "uninit" [] -- exit status not checked; does abnormal exit
checkregularfile annexedfile
doesDirectoryExist ".git" @? ".git vanished in uninit"
not <$> doesDirectoryExist ".git/annex" @? ".git/annex still present after uninit"
-test_upgrade :: Test
-test_upgrade = "git-annex upgrade" ~: intmpclonerepo $ do
- git_annex "upgrade" [] @? "upgrade from same version failed"
+test_upgrade :: TestEnv -> Test
+test_upgrade env = "git-annex upgrade" ~: intmpclonerepo env $ do
+ git_annex env "upgrade" [] @? "upgrade from same version failed"
-test_whereis :: Test
-test_whereis = "git-annex whereis" ~: intmpclonerepo $ do
+test_whereis :: TestEnv -> Test
+test_whereis env = "git-annex whereis" ~: intmpclonerepo env $ do
annexed_notpresent annexedfile
- git_annex "whereis" [annexedfile] @? "whereis on non-present file failed"
- git_annex "untrust" ["origin"] @? "untrust failed"
- not <$> git_annex "whereis" [annexedfile] @? "whereis on non-present file only present in untrusted repo failed to fail"
- git_annex "get" [annexedfile] @? "get failed"
+ git_annex env "whereis" [annexedfile] @? "whereis on non-present file failed"
+ git_annex env "untrust" ["origin"] @? "untrust failed"
+ not <$> git_annex env "whereis" [annexedfile] @? "whereis on non-present file only present in untrusted repo failed to fail"
+ git_annex env "get" [annexedfile] @? "get failed"
annexed_present annexedfile
- git_annex "whereis" [annexedfile] @? "whereis on present file failed"
+ git_annex env "whereis" [annexedfile] @? "whereis on present file failed"
-test_hook_remote :: Test
-test_hook_remote = "git-annex hook remote" ~: intmpclonerepo $ do
- git_annex "initremote" (words "foo type=hook encryption=none hooktype=foo") @? "initremote failed"
+test_hook_remote :: TestEnv -> Test
+test_hook_remote env = "git-annex hook remote" ~: intmpclonerepo env $ do
+ git_annex env "initremote" (words "foo type=hook encryption=none hooktype=foo") @? "initremote failed"
createDirectory dir
git_config "annex.foo-store-hook" $
"cp $ANNEX_FILE " ++ loc
@@ -660,15 +659,15 @@ test_hook_remote = "git-annex hook remote" ~: intmpclonerepo $ do
"rm -f " ++ loc
git_config "annex.foo-checkpresent-hook" $
"if [ -e " ++ loc ++ " ]; then echo $ANNEX_KEY; fi"
- git_annex "get" [annexedfile] @? "get of file failed"
+ git_annex env "get" [annexedfile] @? "get of file failed"
annexed_present annexedfile
- git_annex "copy" [annexedfile, "--to", "foo"] @? "copy --to hook remote failed"
+ git_annex env "copy" [annexedfile, "--to", "foo"] @? "copy --to hook remote failed"
annexed_present annexedfile
- git_annex "drop" [annexedfile, "--numcopies=2"] @? "drop failed"
+ git_annex env "drop" [annexedfile, "--numcopies=2"] @? "drop failed"
annexed_notpresent annexedfile
- git_annex "move" [annexedfile, "--from", "foo"] @? "move --from hook remote failed"
+ git_annex env "move" [annexedfile, "--from", "foo"] @? "move --from hook remote failed"
annexed_present annexedfile
- not <$> git_annex "drop" [annexedfile, "--numcopies=2"] @? "drop failed to fail"
+ not <$> git_annex env "drop" [annexedfile, "--numcopies=2"] @? "drop failed to fail"
annexed_present annexedfile
where
dir = "dir"
@@ -676,61 +675,59 @@ test_hook_remote = "git-annex hook remote" ~: intmpclonerepo $ do
git_config k v = boolSystem "git" [Param "config", Param k, Param v]
@? "git config failed"
-test_directory_remote :: Test
-test_directory_remote = "git-annex directory remote" ~: intmpclonerepo $ do
+test_directory_remote :: TestEnv -> Test
+test_directory_remote env = "git-annex directory remote" ~: intmpclonerepo env $ do
createDirectory "dir"
- git_annex "initremote" (words $ "foo type=directory encryption=none directory=dir") @? "initremote failed"
- git_annex "get" [annexedfile] @? "get of file failed"
+ git_annex env "initremote" (words $ "foo type=directory encryption=none directory=dir") @? "initremote failed"
+ git_annex env "get" [annexedfile] @? "get of file failed"
annexed_present annexedfile
- git_annex "copy" [annexedfile, "--to", "foo"] @? "copy --to directory remote failed"
+ git_annex env "copy" [annexedfile, "--to", "foo"] @? "copy --to directory remote failed"
annexed_present annexedfile
- git_annex "drop" [annexedfile, "--numcopies=2"] @? "drop failed"
+ git_annex env "drop" [annexedfile, "--numcopies=2"] @? "drop failed"
annexed_notpresent annexedfile
- git_annex "move" [annexedfile, "--from", "foo"] @? "move --from directory remote failed"
+ git_annex env "move" [annexedfile, "--from", "foo"] @? "move --from directory remote failed"
annexed_present annexedfile
- not <$> git_annex "drop" [annexedfile, "--numcopies=2"] @? "drop failed to fail"
+ not <$> git_annex env "drop" [annexedfile, "--numcopies=2"] @? "drop failed to fail"
annexed_present annexedfile
-test_rsync_remote :: Test
-test_rsync_remote = "git-annex rsync remote" ~: intmpclonerepo $ do
+test_rsync_remote :: TestEnv -> Test
+test_rsync_remote env = "git-annex rsync remote" ~: intmpclonerepo env $ do
createDirectory "dir"
- git_annex "initremote" (words $ "foo type=rsync encryption=none rsyncurl=dir") @? "initremote failed"
- git_annex "get" [annexedfile] @? "get of file failed"
+ git_annex env "initremote" (words $ "foo type=rsync encryption=none rsyncurl=dir") @? "initremote failed"
+ git_annex env "get" [annexedfile] @? "get of file failed"
annexed_present annexedfile
- git_annex "copy" [annexedfile, "--to", "foo"] @? "copy --to rsync remote failed"
+ git_annex env "copy" [annexedfile, "--to", "foo"] @? "copy --to rsync remote failed"
annexed_present annexedfile
- git_annex "drop" [annexedfile, "--numcopies=2"] @? "drop failed"
+ git_annex env "drop" [annexedfile, "--numcopies=2"] @? "drop failed"
annexed_notpresent annexedfile
- git_annex "move" [annexedfile, "--from", "foo"] @? "move --from rsync remote failed"
+ git_annex env "move" [annexedfile, "--from", "foo"] @? "move --from rsync remote failed"
annexed_present annexedfile
- not <$> git_annex "drop" [annexedfile, "--numcopies=2"] @? "drop failed to fail"
+ not <$> git_annex env "drop" [annexedfile, "--numcopies=2"] @? "drop failed to fail"
annexed_present annexedfile
-test_bup_remote :: Test
-test_bup_remote = "git-annex bup remote" ~: intmpclonerepo $ when Build.SysConfig.bup $ do
+test_bup_remote :: TestEnv -> Test
+test_bup_remote env = "git-annex bup remote" ~: intmpclonerepo env $ when Build.SysConfig.bup $ do
dir <- absPath "dir" -- bup special remote needs an absolute path
createDirectory dir
- git_annex "initremote" (words $ "foo type=bup encryption=none buprepo="++dir) @? "initremote failed"
- git_annex "get" [annexedfile] @? "get of file failed"
+ git_annex env "initremote" (words $ "foo type=bup encryption=none buprepo="++dir) @? "initremote failed"
+ git_annex env "get" [annexedfile] @? "get of file failed"
annexed_present annexedfile
- git_annex "copy" [annexedfile, "--to", "foo"] @? "copy --to bup remote failed"
+ git_annex env "copy" [annexedfile, "--to", "foo"] @? "copy --to bup remote failed"
annexed_present annexedfile
- git_annex "drop" [annexedfile, "--numcopies=2"] @? "drop failed"
+ git_annex env "drop" [annexedfile, "--numcopies=2"] @? "drop failed"
annexed_notpresent annexedfile
- git_annex "copy" [annexedfile, "--from", "foo"] @? "copy --from bup remote failed"
+ git_annex env "copy" [annexedfile, "--from", "foo"] @? "copy --from bup remote failed"
annexed_present annexedfile
- not <$> git_annex "move" [annexedfile, "--from", "foo"] @? "move --from bup remote failed to fail"
+ not <$> git_annex env "move" [annexedfile, "--from", "foo"] @? "move --from bup remote failed to fail"
annexed_present annexedfile
-- gpg is not a build dependency, so only test when it's available
-test_crypto :: Test
-test_crypto = "git-annex crypto" ~: intmpclonerepo $ when Build.SysConfig.gpg $ do
- -- force gpg into batch mode for the tests
- setEnv "GPG_BATCH" "1" True
+test_crypto :: TestEnv -> Test
+test_crypto env = "git-annex crypto" ~: intmpclonerepo env $ when Build.SysConfig.gpg $ do
Utility.Gpg.testTestHarness @? "test harness self-test failed"
Utility.Gpg.testHarness $ do
createDirectory "dir"
- let a cmd = git_annex cmd
+ let a cmd = git_annex env cmd
[ "foo"
, "type=directory"
, "encryption=" ++ Utility.Gpg.testKeyId
@@ -741,21 +738,24 @@ test_crypto = "git-annex crypto" ~: intmpclonerepo $ when Build.SysConfig.gpg $
not <$> a "initremote" @? "initremote failed to fail when run twice in a row"
a "enableremote" @? "enableremote failed"
a "enableremote" @? "enableremote failed when run twice in a row"
- git_annex "get" [annexedfile] @? "get of file failed"
+ git_annex env "get" [annexedfile] @? "get of file failed"
annexed_present annexedfile
- git_annex "copy" [annexedfile, "--to", "foo"] @? "copy --to encrypted remote failed"
+ git_annex env "copy" [annexedfile, "--to", "foo"] @? "copy --to encrypted remote failed"
annexed_present annexedfile
- git_annex "drop" [annexedfile, "--numcopies=2"] @? "drop failed"
+ git_annex env "drop" [annexedfile, "--numcopies=2"] @? "drop failed"
annexed_notpresent annexedfile
- git_annex "move" [annexedfile, "--from", "foo"] @? "move --from encrypted remote failed"
+ git_annex env "move" [annexedfile, "--from", "foo"] @? "move --from encrypted remote failed"
annexed_present annexedfile
- not <$> git_annex "drop" [annexedfile, "--numcopies=2"] @? "drop failed to fail"
+ not <$> git_annex env "drop" [annexedfile, "--numcopies=2"] @? "drop failed to fail"
annexed_present annexedfile
-- This is equivilant to running git-annex, but it's all run in-process
-- so test coverage collection works.
-git_annex :: String -> [String] -> IO Bool
-git_annex command params = do
+git_annex :: TestEnv -> String -> [String] -> IO Bool
+git_annex env command params = do
+ forM_ (M.toList env) $ \(var, val) ->
+ Utility.Env.setEnv var val True
+
-- catch all errors, including normally fatal errors
r <- try (run)::IO (Either SomeException ())
case r of
@@ -765,18 +765,19 @@ git_annex command params = do
run = GitAnnex.run (command:"-q":params)
{- Runs git-annex and returns its output. -}
-git_annex_output :: String -> [String] -> IO String
-git_annex_output command params = do
- got <- Utility.Process.readProcess "git-annex" (command:params)
+git_annex_output :: TestEnv -> String -> [String] -> IO String
+git_annex_output env command params = do
+ got <- Utility.Process.readProcessEnv "git-annex" (command:params) $
+ Just $ M.toList env
-- XXX since the above is a separate process, code coverage stats are
-- not gathered for things run in it.
-- Run same command again, to get code coverage.
- _ <- git_annex command params
+ _ <- git_annex env command params
return got
-git_annex_expectoutput :: String -> [String] -> [String] -> IO ()
-git_annex_expectoutput command params expected = do
- got <- lines <$> git_annex_output command params
+git_annex_expectoutput :: TestEnv -> String -> [String] -> [String] -> IO ()
+git_annex_expectoutput env command params expected = do
+ got <- lines <$> git_annex_output env command params
got == expected @? ("unexpected value running " ++ command ++ " " ++ show params ++ " -- got: " ++ show got ++ " expected: " ++ show expected)
-- Runs an action in the current annex. Note that shutdown actions
@@ -788,56 +789,57 @@ annexeval a = do
Annex.setOutput Types.Messages.QuietOutput
a
-innewrepo :: Assertion -> Assertion
-innewrepo a = withgitrepo $ \r -> indir r a
+innewrepo :: TestEnv -> Assertion -> Assertion
+innewrepo env a = withgitrepo env $ \r -> indir env r a
-inmainrepo :: Assertion -> Assertion
-inmainrepo a = indir mainrepodir a
+inmainrepo :: TestEnv -> Assertion -> Assertion
+inmainrepo env a = indir env mainrepodir a
-intmpclonerepo :: Assertion -> Assertion
-intmpclonerepo a = withtmpclonerepo False $ \r -> indir r a
+intmpclonerepo :: TestEnv -> Assertion -> Assertion
+intmpclonerepo env a = withtmpclonerepo env False $ \r -> indir env r a
-intmpbareclonerepo :: Assertion -> Assertion
-intmpbareclonerepo a = withtmpclonerepo True $ \r -> indir r a
+intmpbareclonerepo :: TestEnv -> Assertion -> Assertion
+intmpbareclonerepo env a = withtmpclonerepo env True $ \r -> indir env r a
-withtmpclonerepo :: Bool -> (FilePath -> Assertion) -> Assertion
-withtmpclonerepo bare a = do
+withtmpclonerepo :: TestEnv -> Bool -> (FilePath -> Assertion) -> Assertion
+withtmpclonerepo env bare a = do
dir <- tmprepodir
- bracket (clonerepo mainrepodir dir bare) cleanup a
+ bracket (clonerepo env mainrepodir dir bare) cleanup a
-withgitrepo :: (FilePath -> Assertion) -> Assertion
-withgitrepo = bracket (setuprepo mainrepodir) return
+withgitrepo :: TestEnv -> (FilePath -> Assertion) -> Assertion
+withgitrepo env = bracket (setuprepo env mainrepodir) return
-indir :: FilePath -> Assertion -> Assertion
-indir dir a = do
+indir :: TestEnv -> FilePath -> Assertion -> Assertion
+indir env dir a = do
cwd <- getCurrentDirectory
-- Assertion failures throw non-IO errors; catch
-- any type of error and change back to cwd before
-- rethrowing.
- r <- bracket_ (changeToTmpDir dir) (changeWorkingDirectory cwd)
+ r <- bracket_ (changeToTmpDir env dir) (setCurrentDirectory cwd)
(try (a)::IO (Either SomeException ()))
case r of
Right () -> return ()
Left e -> throw e
-setuprepo :: FilePath -> IO FilePath
-setuprepo dir = do
+setuprepo :: TestEnv -> FilePath -> IO FilePath
+setuprepo env dir = do
cleanup dir
ensuretmpdir
boolSystem "git" [Params "init -q", File dir] @? "git init failed"
- indir dir $ do
+ indir env dir $ do
boolSystem "git" [Params "config user.name", Param "Test User"] @? "git config failed"
boolSystem "git" [Params "config user.email test@example.com"] @? "git config failed"
return dir
-- clones are always done as local clones; we cannot test ssh clones
-clonerepo :: FilePath -> FilePath -> Bool -> IO FilePath
-clonerepo old new bare = do
+clonerepo :: TestEnv -> FilePath -> FilePath -> Bool -> IO FilePath
+clonerepo env old new bare = do
cleanup new
ensuretmpdir
let b = if bare then " --bare" else ""
boolSystem "git" [Params ("clone -q" ++ b), File old, File new] @? "git clone failed"
- indir new $ git_annex "init" ["-q", new] @? "git annex init failed"
+ indir env new $
+ git_annex env "init" ["-q", new] @? "git annex init failed"
return new
ensuretmpdir :: IO ()
@@ -860,7 +862,10 @@ cleanup dir = do
checklink :: FilePath -> Assertion
checklink f = do
s <- getSymbolicLinkStatus f
- isSymbolicLink s @? f ++ " is not a symlink"
+ -- in direct mode, it may be a symlink, or not, depending
+ -- on whether the content is present.
+ unlessM (annexeval Config.isDirect) $
+ isSymbolicLink s @? f ++ " is not a symlink"
checkregularfile :: FilePath -> Assertion
checkregularfile f = do
@@ -871,13 +876,13 @@ checkregularfile f = do
checkcontent :: FilePath -> Assertion
checkcontent f = do
c <- readFile f
- assertEqual ("checkcontent " ++ f) c (content f)
+ assertEqual ("checkcontent " ++ f) (content f) c
checkunwritable :: FilePath -> Assertion
-checkunwritable f = do
- -- Look at permissions bits rather than trying to write or using
- -- fileAccess because if run as root, any file can be modified
- -- despite permissions.
+checkunwritable f = unlessM (annexeval Config.isDirect) $ do
+ -- Look at permissions bits rather than trying to write or
+ -- using fileAccess because if run as root, any file can be
+ -- modified despite permissions.
s <- getFileStatus f
let mode = fileMode s
if (mode == mode `unionFileModes` ownerWriteMode)
@@ -892,11 +897,14 @@ checkwritable f = do
Right _ -> return ()
checkdangling :: FilePath -> Assertion
-checkdangling f = do
- r <- tryIO $ readFile f
- case r of
- Left _ -> return () -- expected; dangling link
- Right _ -> assertFailure $ f ++ " was not a dangling link as expected"
+checkdangling f = ifM (annexeval Config.crippledFileSystem)
+ ( return () -- probably no real symlinks to test
+ , do
+ r <- tryIO $ readFile f
+ case r of
+ Left _ -> return () -- expected; dangling link
+ Right _ -> assertFailure $ f ++ " was not a dangling link as expected"
+ )
checklocationlog :: FilePath -> Bool -> Assertion
checklocationlog f expected = do
@@ -938,30 +946,35 @@ annexed_present = runchecks
unannexed :: FilePath -> Assertion
unannexed = runchecks [checkregularfile, checkcontent, checkwritable]
-prepare :: IO ()
+prepare :: IO TestEnv
prepare = do
whenM (doesDirectoryExist tmpdir) $
error $ "The temporary directory " ++ tmpdir ++ " already exists; cannot run test suite."
- -- While PATH is mostly avoided, the commit hook does run it,
- -- and so does git_annex_output. Make sure that the just-built
- -- git annex is used.
cwd <- getCurrentDirectory
- p <- getEnvDefault "PATH" ""
- setEnv "PATH" (cwd ++ ":" ++ p) True
- setEnv "TOPDIR" cwd True
- -- Avoid git complaining if it cannot determine the user's email
- -- address, or exploding if it doesn't know the user's name.
- setEnv "GIT_AUTHOR_EMAIL" "test@example.com" True
- setEnv "GIT_AUTHOR_NAME" "git-annex test" True
- setEnv "GIT_COMMITTER_EMAIL" "test@example.com" True
- setEnv "GIT_COMMITTER_NAME" "git-annex test" True
-
-changeToTmpDir :: FilePath -> IO ()
-changeToTmpDir t = do
- -- Hack alert. Threading state to here was too much bother.
- topdir <- getEnvDefault "TOPDIR" ""
- changeWorkingDirectory $ topdir ++ "/" ++ t
+ p <- Utility.Env.getEnvDefault "PATH" ""
+
+ let env =
+ -- Ensure that the just-built git annex is used.
+ [ ("PATH", cwd ++ ":" ++ p)
+ , ("TOPDIR", cwd)
+ -- Avoid git complaining if it cannot determine the user's
+ -- email address, or exploding if it doesn't know the user's
+ -- name.
+ , ("GIT_AUTHOR_EMAIL", "test@example.com")
+ , ("GIT_AUTHOR_NAME", "git-annex test")
+ , ("GIT_COMMITTER_EMAIL", "test@example.com")
+ , ("GIT_COMMITTER_NAME", "git-annex test")
+ -- force gpg into batch mode for the tests
+ , ("GPG_BATCH", "1")
+ ]
+
+ return $ M.fromList env
+
+changeToTmpDir :: TestEnv -> FilePath -> IO ()
+changeToTmpDir env t = do
+ let topdir = fromMaybe "" $ M.lookup "TOPDIR" env
+ setCurrentDirectory $ topdir ++ "/" ++ t
tmpdir :: String
tmpdir = ".t"
diff --git a/Upgrade.hs b/Upgrade.hs
index 705b190..30f2b7e 100644
--- a/Upgrade.hs
+++ b/Upgrade.hs
@@ -5,18 +5,27 @@
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Upgrade where
import Common.Annex
import Annex.Version
+#ifndef __WINDOWS__
import qualified Upgrade.V0
import qualified Upgrade.V1
+#endif
import qualified Upgrade.V2
upgrade :: Annex Bool
upgrade = go =<< getVersion
where
+#ifndef __WINDOWS__
go (Just "0") = Upgrade.V0.upgrade
go (Just "1") = Upgrade.V1.upgrade
+#else
+ go (Just "0") = error "upgrade from v0 on Windows not supported"
+ go (Just "1") = error "upgrade from v1 on Windows not supported"
+#endif
go (Just "2") = Upgrade.V2.upgrade
go _ = return True
diff --git a/Upgrade/V1.hs b/Upgrade/V1.hs
index e048b3d..9793f04 100644
--- a/Upgrade/V1.hs
+++ b/Upgrade/V1.hs
@@ -20,7 +20,7 @@ import qualified Git.LsFiles as LsFiles
import Backend
import Annex.Version
import Utility.FileMode
-import Utility.TempFile
+import Utility.Tmp
import qualified Upgrade.V2
-- v2 adds hashing of filenames of content and location log files.
diff --git a/Upgrade/V2.hs b/Upgrade/V2.hs
index 935fc48..b5de6c8 100644
--- a/Upgrade/V2.hs
+++ b/Upgrade/V2.hs
@@ -14,7 +14,7 @@ import qualified Git.Ref
import qualified Annex.Branch
import Logs.Location
import Annex.Content
-import Utility.TempFile
+import Utility.Tmp
olddir :: Git.Repo -> FilePath
olddir g
diff --git a/Utility/Applicative.o b/Utility/Applicative.o
index 8863b47..49484c6 100644
--- a/Utility/Applicative.o
+++ b/Utility/Applicative.o
Binary files differ
diff --git a/Utility/CoProcess.hs b/Utility/CoProcess.hs
index 7a2a5fe..f72850f 100644
--- a/Utility/CoProcess.hs
+++ b/Utility/CoProcess.hs
@@ -6,11 +6,14 @@
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Utility.CoProcess (
CoProcessHandle,
start,
stop,
- query
+ query,
+ rawMode
) where
import Common
@@ -33,3 +36,15 @@ query (_, from, to, _) send receive = do
_ <- send to
hFlush to
receive from
+
+rawMode :: CoProcessHandle -> IO CoProcessHandle
+rawMode ch@(_, from, to, _) = do
+ raw from
+ raw to
+ return ch
+ where
+ raw h = do
+ fileEncoding h
+#ifdef __WINDOWS__
+ hSetNewlineMode h noNewlineTranslation
+#endif
diff --git a/Utility/Daemon.hs b/Utility/Daemon.hs
index ff13a3b..e1cd250 100644
--- a/Utility/Daemon.hs
+++ b/Utility/Daemon.hs
@@ -5,12 +5,19 @@
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Utility.Daemon where
import Common
import Utility.LogFile
+#ifndef __WINDOWS__
import System.Posix
+#else
+import System.PosixCompat
+import System.Posix.Types
+#endif
{- Run an action as a daemon, with all output sent to a file descriptor.
-
@@ -19,6 +26,7 @@ import System.Posix
-
- When successful, does not return. -}
daemonize :: Fd -> Maybe FilePath -> Bool -> IO () -> IO ()
+#ifndef __WINDOWS__
daemonize logfd pidfile changedirectory a = do
maybe noop checkalreadyrunning pidfile
_ <- forkProcess child1
@@ -40,6 +48,9 @@ daemonize logfd pidfile changedirectory a = do
a
out
out = exitImmediately ExitSuccess
+#else
+daemonize = error "daemonize is not implemented on Windows" -- TODO
+#endif
{- Locks the pid file, with an exclusive, non-blocking lock.
- Writes the pid to the file, fully atomically.
@@ -47,6 +58,7 @@ daemonize logfd pidfile changedirectory a = do
lockPidFile :: FilePath -> IO ()
lockPidFile file = do
createDirectoryIfMissing True (parentDir file)
+#ifndef __WINDOWS__
fd <- openFd file ReadWrite (Just stdFileMode) defaultFileFlags
locked <- catchMaybeIO $ setLock fd (WriteLock, AbsoluteSeek, 0, 0)
fd' <- openFd newfile ReadWrite (Just stdFileMode) defaultFileFlags
@@ -57,8 +69,11 @@ lockPidFile file = do
(_, Nothing) -> alreadyRunning
_ -> do
_ <- fdWrite fd' =<< show <$> getProcessID
- renameFile newfile file
closeFd fd
+#else
+ writeFile newfile "-1"
+#endif
+ renameFile newfile file
where
newfile = file ++ ".new"
@@ -70,6 +85,7 @@ alreadyRunning = error "Daemon is already running."
-
- If it's running, returns its pid. -}
checkDaemon :: FilePath -> IO (Maybe ProcessID)
+#ifndef __WINDOWS__
checkDaemon pidfile = do
v <- catchMaybeIO $
openFd pidfile ReadOnly (Just stdFileMode) defaultFileFlags
@@ -88,10 +104,17 @@ checkDaemon pidfile = do
"stale pid in " ++ pidfile ++
" (got " ++ show pid' ++
"; expected " ++ show pid ++ " )"
+#else
+checkDaemon pidfile = maybe Nothing readish <$> catchMaybeIO (readFile pidfile)
+#endif
{- Stops the daemon, safely. -}
stopDaemon :: FilePath -> IO ()
+#ifndef __WINDOWS__
stopDaemon pidfile = go =<< checkDaemon pidfile
where
go Nothing = noop
go (Just pid) = signalProcess sigTERM pid
+#else
+stopDaemon = error "stopDaemon is not implemented on Windows" -- TODO
+#endif
diff --git a/Utility/Directory.hs b/Utility/Directory.hs
index 7cce4a6..9477ad5 100644
--- a/Utility/Directory.hs
+++ b/Utility/Directory.hs
@@ -8,7 +8,7 @@
module Utility.Directory where
import System.IO.Error
-import System.Posix.Files
+import System.PosixCompat.Files
import System.Directory
import Control.Exception (throw)
import Control.Monad
@@ -18,7 +18,7 @@ import Control.Applicative
import System.IO.Unsafe (unsafeInterleaveIO)
import Utility.SafeCommand
-import Utility.TempFile
+import Utility.Tmp
import Utility.Exception
import Utility.Monad
diff --git a/Utility/Directory.o b/Utility/Directory.o
index e14c910..caff979 100644
--- a/Utility/Directory.o
+++ b/Utility/Directory.o
Binary files differ
diff --git a/Utility/Env.hs b/Utility/Env.hs
new file mode 100644
index 0000000..cb73873
--- /dev/null
+++ b/Utility/Env.hs
@@ -0,0 +1,63 @@
+{- portable environment variables
+ -
+ - Copyright 2013 Joey Hess <joey@kitenet.net>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+{-# LANGUAGE CPP #-}
+
+module Utility.Env where
+
+#ifdef mingw32_HOST_OS
+import Utility.Exception
+import Control.Applicative
+import Data.Maybe
+import qualified System.Environment as E
+#else
+import qualified System.Posix.Env as PE
+#endif
+
+getEnv :: String -> IO (Maybe String)
+#ifndef mingw32_HOST_OS
+getEnv = PE.getEnv
+#else
+getEnv = catchMaybeIO . E.getEnv
+#endif
+
+getEnvDefault :: String -> String -> IO String
+#ifndef mingw32_HOST_OS
+getEnvDefault = PE.getEnvDefault
+#else
+getEnvDefault var fallback = fromMaybe fallback <$> getEnv var
+#endif
+
+getEnvironment :: IO [(String, String)]
+#ifndef mingw32_HOST_OS
+getEnvironment = PE.getEnvironment
+#else
+getEnvironment = E.getEnvironment
+#endif
+
+{- Returns True if it could successfully set the environment variable.
+ -
+ - There is, apparently, no way to do this in Windows. Instead,
+ - environment varuables must be provided when running a new process. -}
+setEnv :: String -> String -> Bool -> IO Bool
+#ifndef mingw32_HOST_OS
+setEnv var val overwrite = do
+ PE.setEnv var val overwrite
+ return True
+#else
+setEnv _ _ _ = return False
+#endif
+
+{- Returns True if it could successfully unset the environment variable. -}
+unsetEnv :: String -> IO Bool
+#ifndef mingw32_HOST_OS
+unsetEnv var = do
+ PE.unsetEnv var
+ return True
+#else
+unsetEnv _ = return False
+#endif
diff --git a/Utility/Env.o b/Utility/Env.o
new file mode 100644
index 0000000..f4cdf2d
--- /dev/null
+++ b/Utility/Env.o
Binary files differ
diff --git a/Utility/Exception.o b/Utility/Exception.o
index ec39464..d9f3c64 100644
--- a/Utility/Exception.o
+++ b/Utility/Exception.o
Binary files differ
diff --git a/Utility/ExternalSHA.hs b/Utility/ExternalSHA.hs
new file mode 100644
index 0000000..21241d3
--- /dev/null
+++ b/Utility/ExternalSHA.hs
@@ -0,0 +1,67 @@
+{- Calculating a SHA checksum with an external command.
+ -
+ - This is often faster than using Haskell libraries.
+ -
+ - Copyright 2011-2013 Joey Hess <joey@kitenet.net>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Utility.ExternalSHA (externalSHA) where
+
+import Utility.SafeCommand
+import Utility.Process
+import Utility.FileSystemEncoding
+import Utility.Misc
+
+import System.Process
+import Data.List
+import Data.Char
+import Control.Applicative
+import System.IO
+
+externalSHA :: String -> Int -> FilePath -> IO (Either String String)
+externalSHA command shasize file = do
+ ls <- lines <$> readsha (toCommand [File file])
+ return $ sanitycheck =<< parse ls
+ where
+ {- sha commands output the filename, so need to set fileEncoding -}
+ readsha args =
+ withHandle StdoutHandle (createProcessChecked checkSuccessProcess) p $ \h -> do
+ fileEncoding h
+ output <- hGetContentsStrict h
+ hClose h
+ return output
+ where
+ p = (proc command args) { std_out = CreatePipe }
+
+ {- The first word of the output is taken to be the sha. -}
+ parse [] = bad
+ parse (l:_)
+ | null sha = bad
+ -- sha is prefixed with \ when filename contains certian chars
+ | "\\" `isPrefixOf` sha = Right $ drop 1 sha
+ | otherwise = Right sha
+ where
+ sha = fst $ separate (== ' ') l
+ bad = Left $ command ++ " parse error"
+
+ {- Check that we've correctly parsing the output of the command,
+ - by making sure the sha we read is of the expected length
+ - and contains only the right characters. -}
+ sanitycheck sha
+ | length sha /= expectedSHALength shasize =
+ Left $ "Failed to parse the output of " ++ command
+ | any (`notElem` "0123456789abcdef") sha' =
+ Left $ "Unexpected character in output of " ++ command ++ "\"" ++ sha ++ "\""
+ | otherwise = Right sha'
+ where
+ sha' = map toLower sha
+
+expectedSHALength :: Int -> Int
+expectedSHALength 1 = 40
+expectedSHALength 256 = 64
+expectedSHALength 512 = 128
+expectedSHALength 224 = 56
+expectedSHALength 384 = 96
+expectedSHALength _ = 0
diff --git a/Utility/ExternalSHA.o b/Utility/ExternalSHA.o
new file mode 100644
index 0000000..80935a2
--- /dev/null
+++ b/Utility/ExternalSHA.o
Binary files differ
diff --git a/Utility/FileMode.hs b/Utility/FileMode.hs
index 0f70463..47247e2 100644
--- a/Utility/FileMode.hs
+++ b/Utility/FileMode.hs
@@ -5,12 +5,17 @@
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Utility.FileMode where
import Common
import Control.Exception (bracket)
-import System.Posix.Types
+import System.PosixCompat.Types
+#ifndef __WINDOWS__
+import System.Posix.Files
+#endif
import Foreign (complement)
{- Applies a conversion function to a file's mode. -}
@@ -71,7 +76,11 @@ checkMode checkfor mode = checkfor `intersectFileModes` mode == checkfor
{- Checks if a file mode indicates it's a symlink. -}
isSymLink :: FileMode -> Bool
+#ifdef __WINDOWS__
+isSymLink _ = False
+#else
isSymLink = checkMode symbolicLinkMode
+#endif
{- Checks if a file has any executable bits set. -}
isExecutable :: FileMode -> Bool
@@ -80,6 +89,7 @@ isExecutable mode = combineModes executeModes `intersectFileModes` mode /= 0
{- Runs an action without that pesky umask influencing it, unless the
- passed FileMode is the standard one. -}
noUmask :: FileMode -> IO a -> IO a
+#ifndef __WINDOWS__
noUmask mode a
| mode == stdFileMode = a
| otherwise = bracket setup cleanup go
@@ -87,26 +97,39 @@ noUmask mode a
setup = setFileCreationMask nullFileMode
cleanup = setFileCreationMask
go _ = a
+#else
+noUmask _ a = a
+#endif
combineModes :: [FileMode] -> FileMode
combineModes [] = undefined
combineModes [m] = m
combineModes (m:ms) = foldl unionFileModes m ms
-stickyMode :: FileMode
-stickyMode = 512
-
isSticky :: FileMode -> Bool
+#ifdef __WINDOWS__
+isSticky _ = False
+#else
isSticky = checkMode stickyMode
+stickyMode :: FileMode
+stickyMode = 512
+
setSticky :: FilePath -> IO ()
setSticky f = modifyFileMode f $ addModes [stickyMode]
+#endif
{- Writes a file, ensuring that its modes do not allow it to be read
- - by anyone other than the current user, before any content is written. -}
+ - by anyone other than the current user, before any content is written.
+ -
+ - On a filesystem that does not support file permissions, this is the same
+ - as writeFile.
+ -}
writeFileProtected :: FilePath -> String -> IO ()
writeFileProtected file content = do
h <- openFile file WriteMode
- modifyFileMode file $ removeModes [groupReadMode, otherReadMode]
+ void $ tryIO $
+ modifyFileMode file $
+ removeModes [groupReadMode, otherReadMode]
hPutStr h content
hClose h
diff --git a/Utility/FileSystemEncoding.o b/Utility/FileSystemEncoding.o
index 3a2af8f..397fe54 100644
--- a/Utility/FileSystemEncoding.o
+++ b/Utility/FileSystemEncoding.o
Binary files differ
diff --git a/Utility/FreeDesktop.o b/Utility/FreeDesktop.o
index fb3e871..93441ef 100644
--- a/Utility/FreeDesktop.o
+++ b/Utility/FreeDesktop.o
Binary files differ
diff --git a/Utility/Gpg.hs b/Utility/Gpg.hs
index 4a13d45..aa4a7af 100644
--- a/Utility/Gpg.hs
+++ b/Utility/Gpg.hs
@@ -5,21 +5,25 @@
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Utility.Gpg where
import System.Posix.Types
import Control.Applicative
import Control.Concurrent
import Control.Exception (bracket)
-import System.Posix.Env (setEnv, unsetEnv, getEnv)
+import System.Path
import Common
+import Utility.Env
newtype KeyIds = KeyIds [String]
deriving (Ord, Eq)
stdParams :: [CommandParam] -> IO [String]
stdParams params = do
+#ifndef __WINDOWS__
-- Enable batch mode if GPG_AGENT_INFO is set, to avoid extraneous
-- gpg output about password prompts. GPG_BATCH is set by the test
-- suite for a similar reason.
@@ -29,6 +33,9 @@ stdParams params = do
then []
else ["--batch", "--no-tty", "--use-agent"]
return $ batch ++ defaults ++ toCommand params
+#else
+ return $ defaults ++ toCommand params
+#endif
where
-- be quiet, even about checking the trustdb
defaults = ["--quiet", "--trust-model", "always"]
@@ -64,6 +71,7 @@ pipeStrict params input = do
- Note that to avoid deadlock with the cleanup stage,
- the reader must fully consume gpg's input before returning. -}
feedRead :: [CommandParam] -> String -> (Handle -> IO ()) -> (Handle -> IO a) -> IO a
+#ifndef __WINDOWS__
feedRead params passphrase feeder reader = do
-- pipe the passphrase into gpg on a fd
(frompipe, topipe) <- createPipe
@@ -83,6 +91,9 @@ feedRead params passphrase feeder reader = do
feeder to
hClose to
reader from
+#else
+feedRead = error "gpg feedRead not implemented on Windows" -- TODO
+#endif
{- Finds gpg public keys matching some string. (Could be an email address,
- a key id, or a name; See the section 'HOW TO SPECIFY A USER ID' of
@@ -204,6 +215,7 @@ keyBlock public ls = unlines
| public = "PUBLIC"
| otherwise = "PRIVATE"
+#ifndef mingw32_HOST_OS
{- Runs an action using gpg in a test harness, in which gpg does
- not use ~/.gpg/, but a directory with the test key set up to be used. -}
testHarness :: IO a -> IO a
@@ -216,7 +228,7 @@ testHarness a = do
setup = do
base <- getTemporaryDirectory
dir <- mktmpdir $ base </> "gpgtmpXXXXXX"
- setEnv var dir True
+ void $ setEnv var dir True
_ <- pipeStrict [Params "--import -q"] $ unlines
[testSecretKey, testKey]
return dir
@@ -230,3 +242,4 @@ testTestHarness :: IO Bool
testTestHarness = do
keys <- testHarness $ findPubKeys testKeyId
return $ KeyIds [testKeyId] == keys
+#endif
diff --git a/Utility/InodeCache.hs b/Utility/InodeCache.hs
index e08abc6..8037c61 100644
--- a/Utility/InodeCache.hs
+++ b/Utility/InodeCache.hs
@@ -8,7 +8,7 @@
module Utility.InodeCache where
import Common
-import System.Posix.Types
+import System.PosixCompat.Types
import Utility.QuickCheck
data InodeCachePrim = InodeCachePrim FileID FileOffset EpochTime
diff --git a/Utility/LogFile.hs b/Utility/LogFile.hs
index 1ff3006..339d6e8 100644
--- a/Utility/LogFile.hs
+++ b/Utility/LogFile.hs
@@ -5,17 +5,23 @@
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Utility.LogFile where
import Common
-import System.Posix
+import System.Posix.Types
openLog :: FilePath -> IO Fd
+#ifndef __WINDOWS__
openLog logfile = do
rotateLog logfile
openFd logfile WriteOnly (Just stdFileMode)
defaultFileFlags { append = True }
+#else
+openLog = error "openLog TODO"
+#endif
rotateLog :: FilePath -> IO ()
rotateLog logfile = go 0
@@ -44,11 +50,19 @@ maxLogs :: Int
maxLogs = 9
redirLog :: Fd -> IO ()
+#ifndef __WINDOWS__
redirLog logfd = do
mapM_ (redir logfd) [stdOutput, stdError]
closeFd logfd
+#else
+redirLog _ = error "redirLog TODO"
+#endif
+#ifndef __WINDOWS__
redir :: Fd -> Fd -> IO ()
redir newh h = do
closeFd h
void $ dupTo newh h
+#else
+redir _ _ = error "redir TODO"
+#endif
diff --git a/Utility/Lsof.hs b/Utility/Lsof.hs
index 31da678..6d6b353 100644
--- a/Utility/Lsof.hs
+++ b/Utility/Lsof.hs
@@ -11,9 +11,9 @@ module Utility.Lsof where
import Common
import Build.SysConfig as SysConfig
+import Utility.Env
import System.Posix.Types
-import System.Posix.Env
data LsofOpenMode = OpenReadWrite | OpenReadOnly | OpenWriteOnly | OpenUnknown
deriving (Show, Eq)
@@ -32,7 +32,7 @@ setupLsof = do
when (isAbsolute cmd) $ do
path <- getSearchPath
let path' = takeDirectory cmd : path
- setEnv "PATH" (intercalate [searchPathSeparator] path') True
+ void $ setEnv "PATH" (intercalate [searchPathSeparator] path') True
{- Checks each of the files in a directory to find open files.
- Note that this will find hard links to files elsewhere that are open. -}
diff --git a/Utility/Misc.hs b/Utility/Misc.hs
index 1bb6de7..39d0e3d 100644
--- a/Utility/Misc.hs
+++ b/Utility/Misc.hs
@@ -5,6 +5,8 @@
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Utility.Misc where
import System.IO
@@ -13,7 +15,9 @@ import Foreign
import Data.Char
import Data.List
import Control.Applicative
+#ifndef mingw32_HOST_OS
import System.Posix.Process (getAnyProcessStatus)
+#endif
import Utility.Exception
@@ -124,7 +128,12 @@ hGetSomeString h sz = do
- on a process and get back an exit status is going to be confused
- if this reap gets there first. -}
reapZombies :: IO ()
+#ifndef mingw32_HOST_OS
reapZombies = do
-- throws an exception when there are no child processes
catchDefaultIO Nothing (getAnyProcessStatus False True)
>>= maybe (return ()) (const reapZombies)
+
+#else
+reapZombies = return ()
+#endif
diff --git a/Utility/Misc.o b/Utility/Misc.o
index 1995a3d..6663797 100644
--- a/Utility/Misc.o
+++ b/Utility/Misc.o
Binary files differ
diff --git a/Utility/Monad.o b/Utility/Monad.o
index 031ff15..32771a1 100644
--- a/Utility/Monad.o
+++ b/Utility/Monad.o
Binary files differ
diff --git a/Utility/Mounts.hsc b/Utility/Mounts.hsc
index c21a680..c13b0ec 100644
--- a/Utility/Mounts.hsc
+++ b/Utility/Mounts.hsc
@@ -3,7 +3,7 @@
- Derived from hsshellscript, originally written by
- Volker Wysk <hsss@volker-wysk.de>
-
- - Modified to support BSD and Mac OS X by
+ - Modified to support BSD, Mac OS X, and Android by
- Joey Hess <joey@kitenet.net>
-
- Licensed under the GNU LGPL version 2.1 or higher.
@@ -16,13 +16,18 @@ module Utility.Mounts (
getMounts
) where
+#ifndef __ANDROID__
import Control.Monad
import Foreign
import Foreign.C
import GHC.IO hiding (finally, bracket)
import Prelude hiding (catch)
-
#include "libmounts.h"
+#else
+import Utility.Exception
+import Data.Maybe
+import Control.Applicative
+#endif
{- This is a stripped down mntent, containing only
- fields available everywhere. -}
@@ -32,6 +37,8 @@ data Mntent = Mntent
, mnt_type :: String
} deriving (Read, Show, Eq, Ord)
+#ifndef __ANDROID__
+
getMounts :: IO [Mntent]
getMounts = do
h <- c_mounts_start
@@ -67,3 +74,22 @@ foreign import ccall unsafe "libmounts.h mounts_next" c_mounts_next
:: Ptr () -> IO (Ptr ())
foreign import ccall unsafe "libmounts.h mounts_end" c_mounts_end
:: Ptr () -> IO CInt
+
+#else
+
+{- Android does not support getmntent (well, it's a no-op stub in Bionic).
+ -
+ - But, the linux kernel's /proc/mounts is available to be parsed.
+ -}
+getMounts :: IO [Mntent]
+getMounts = catchDefaultIO [] $
+ mapMaybe (parse . words) . lines <$> readFile "/proc/mounts"
+ where
+ parse (device:mountpoint:fstype:_rest) = Just $ Mntent
+ { mnt_fsname = device
+ , mnt_dir = mountpoint
+ , mnt_type = fstype
+ }
+ parse _ = Nothing
+
+#endif
diff --git a/Utility/OSX.o b/Utility/OSX.o
index 6a22816..46a5aa0 100644
--- a/Utility/OSX.o
+++ b/Utility/OSX.o
Binary files differ
diff --git a/Utility/PartialPrelude.o b/Utility/PartialPrelude.o
index 08deb0d..e790464 100644
--- a/Utility/PartialPrelude.o
+++ b/Utility/PartialPrelude.o
Binary files differ
diff --git a/Utility/Path.hs b/Utility/Path.hs
index 4ffcf1c..4df0703 100644
--- a/Utility/Path.hs
+++ b/Utility/Path.hs
@@ -1,33 +1,60 @@
{- path manipulation
-
- - Copyright 2010-2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2013 Joey Hess <joey@kitenet.net>
-
- Licensed under the GNU GPL version 3 or higher.
-}
-{-# LANGUAGE PackageImports #-}
+{-# LANGUAGE PackageImports, CPP #-}
module Utility.Path where
import Data.String.Utils
-import "MissingH" System.Path
import System.FilePath
import System.Directory
import Data.List
import Data.Maybe
import Control.Applicative
+#ifdef __WINDOWS__
+import Data.Char
+import qualified System.FilePath.Posix as Posix
+#else
+import qualified "MissingH" System.Path as MissingH
+#endif
+
import Utility.Monad
import Utility.UserInfo
-{- Returns the parent directory of a path. Parent of / is "" -}
+{- Makes a path absolute if it's not already.
+ - The first parameter is a base directory (ie, the cwd) to use if the path
+ - is not already absolute.
+ -
+ - On Unix, collapses and normalizes ".." etc in the path. May return Nothing
+ - if the path cannot be normalized.
+ -
+ - MissingH's absNormPath does not work on Windows, so on Windows
+ - no normalization is done.
+ -}
+absNormPath :: FilePath -> FilePath -> Maybe FilePath
+#ifndef __WINDOWS__
+absNormPath dir path = MissingH.absNormPath dir path
+#else
+absNormPath dir path = Just $ combine dir path
+#endif
+
+{- Returns the parent directory of a path.
+ -
+ - To allow this to be easily used in loops, which terminate upon reaching the
+ - top, the parent of / is "" -}
parentDir :: FilePath -> FilePath
parentDir dir
- | not $ null dirs = slash ++ join s (init dirs)
- | otherwise = ""
+ | null dirs = ""
+ | otherwise = joinDrive drive (join s $ init dirs)
where
- dirs = filter (not . null) $ split s dir
- slash = if isAbsolute dir then s else ""
+ -- on Unix, the drive will be "/" when the dir is absolute, otherwise ""
+ (drive, path) = splitDrive dir
+ dirs = filter (not . null) $ split s path
s = [pathSeparator]
prop_parentDir_basics :: FilePath -> Bool
@@ -43,7 +70,7 @@ prop_parentDir_basics dir
- are all equivilant.
-}
dirContains :: FilePath -> FilePath -> Bool
-dirContains a b = a == b || a' == b' || (a'++"/") `isPrefixOf` b'
+dirContains a b = a == b || a' == b' || (a'++[pathSeparator]) `isPrefixOf` b'
where
norm p = fromMaybe "" $ absNormPath p "."
a' = norm a
@@ -108,7 +135,7 @@ prop_relPathDirToFile_regressionTest = same_dir_shortcurcuits_at_difference
{- Given an original list of paths, and an expanded list derived from it,
- generates a list of lists, where each sublist corresponds to one of the
- - original paths. When the original path is a direcotry, any items
+ - original paths. When the original path is a directory, any items
- in the expanded list that are contained in that directory will appear in
- its segment.
-}
@@ -164,3 +191,22 @@ dotfile file
| otherwise = "." `isPrefixOf` f || dotfile (takeDirectory file)
where
f = takeFileName file
+
+{- Converts a DOS style path to a Cygwin style path. Only on Windows.
+ - Any trailing '\' is preserved as a trailing '/' -}
+toCygPath :: FilePath -> FilePath
+#ifndef __WINDOWS__
+toCygPath = id
+#else
+toCygPath p
+ | null drive = recombine parts
+ | otherwise = recombine $ "/cygdrive" : driveletter drive : parts
+ where
+ (drive, p') = splitDrive p
+ parts = splitDirectories p'
+ driveletter = map toLower . takeWhile (/= ':')
+ recombine = fixtrailing . Posix.joinPath
+ fixtrailing s
+ | hasTrailingPathSeparator p = Posix.addTrailingPathSeparator s
+ | otherwise = s
+#endif
diff --git a/Utility/Path.o b/Utility/Path.o
index 3070224..99222f8 100644
--- a/Utility/Path.o
+++ b/Utility/Path.o
Binary files differ
diff --git a/Utility/Process.hs b/Utility/Process.hs
index b2bac99..6e0aef2 100644
--- a/Utility/Process.hs
+++ b/Utility/Process.hs
@@ -6,7 +6,7 @@
- Licensed under the GNU GPL version 3 or higher.
-}
-{-# LANGUAGE Rank2Types #-}
+{-# LANGUAGE CPP, Rank2Types #-}
module Utility.Process (
module X,
@@ -42,7 +42,9 @@ import Control.Concurrent
import qualified Control.Exception as E
import Control.Monad
import Data.Maybe
+#ifndef mingw32_HOST_OS
import System.Posix.IO
+#endif
import Utility.Misc
@@ -156,6 +158,7 @@ createBackgroundProcess p a = a =<< createProcess p
- returns a transcript combining its stdout and stderr, and
- whether it succeeded or failed. -}
processTranscript :: String -> [String] -> (Maybe String) -> IO (String, Bool)
+#ifndef mingw32_HOST_OS
processTranscript cmd opts input = do
(readf, writef) <- createPipe
readh <- fdToHandle readf
@@ -189,7 +192,9 @@ processTranscript cmd opts input = do
ok <- checkSuccessProcess pid
return (transcript, ok)
-
+#else
+processTranscript = error "processTranscript TODO"
+#endif
{- Runs a CreateProcessRunner, on a CreateProcess structure, that
- is adjusted to pipe only from/to a single StdHandle, and passes
diff --git a/Utility/Process.o b/Utility/Process.o
index e46e0b4..e05adb6 100644
--- a/Utility/Process.o
+++ b/Utility/Process.o
Binary files differ
diff --git a/Utility/Rsync.hs b/Utility/Rsync.hs
index d4eeddc..5f322a0 100644
--- a/Utility/Rsync.hs
+++ b/Utility/Rsync.hs
@@ -1,6 +1,6 @@
{- various rsync stuff
-
- - Copyright 2010-2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2013 Joey Hess <joey@kitenet.net>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -45,8 +45,20 @@ rsyncServerParams =
, Params "-e.Lsf ."
]
+rsyncUseDestinationPermissions :: CommandParam
+rsyncUseDestinationPermissions = Param "--chmod=ugo=rwX"
+
rsync :: [CommandParam] -> IO Bool
-rsync = boolSystem "rsync"
+rsync = boolSystem "rsync" . rsyncParamsFixup
+
+{- On Windows, rsync is from Cygwin, and expects to get Cygwin formatted
+ - paths to files. (It thinks that C:foo refers to a host named "C").
+ - Fix up all Files in the Params appropriately. -}
+rsyncParamsFixup :: [CommandParam] -> [CommandParam]
+rsyncParamsFixup = map fixup
+ where
+ fixup (File f) = File (toCygPath f)
+ fixup p = p
{- Runs rsync, but intercepts its progress output and updates a meter.
- The progress output is also output to stdout.
@@ -62,7 +74,7 @@ rsyncProgress meterupdate params = do
reapZombies
return r
where
- p = proc "rsync" (toCommand params)
+ p = proc "rsync" (toCommand $ rsyncParamsFixup params)
feedprogress prev buf h = do
s <- hGetSomeString h 80
if null s
diff --git a/Utility/SafeCommand.o b/Utility/SafeCommand.o
index 9f15fa4..5a3e576 100644
--- a/Utility/SafeCommand.o
+++ b/Utility/SafeCommand.o
Binary files differ
diff --git a/Utility/Shell.hs b/Utility/Shell.hs
index f3858af..2227dc7 100644
--- a/Utility/Shell.hs
+++ b/Utility/Shell.hs
@@ -9,12 +9,18 @@
module Utility.Shell where
-shellPath :: FilePath
+shellPath_portable :: FilePath
+shellPath_portable = "/bin/sh"
+
+shellPath_local :: FilePath
#ifndef __ANDROID__
-shellPath = "/bin/sh"
+shellPath_local = shellPath_portable
#else
-shellPath = "/system/bin/sh"
+shellPath_local = "/system/bin/sh"
#endif
-shebang :: String
-shebang = "#!" ++ shellPath
+shebang_portable :: String
+shebang_portable = "#!" ++ shellPath_portable
+
+shebang_local :: String
+shebang_local = "#!" ++ shellPath_local
diff --git a/Utility/TempFile.hs b/Utility/TempFile.hs
deleted file mode 100644
index 6dbea69..0000000
--- a/Utility/TempFile.hs
+++ /dev/null
@@ -1,58 +0,0 @@
-{- temp file functions
- -
- - Copyright 2010-2011 Joey Hess <joey@kitenet.net>
- -
- - Licensed under the GNU GPL version 3 or higher.
- -}
-
-module Utility.TempFile where
-
-import Control.Exception (bracket)
-import System.IO
-import System.Posix.Process
-import System.Directory
-
-import Utility.Exception
-import Utility.Path
-import System.FilePath
-
-{- Runs an action like writeFile, writing to a temp file first and
- - then moving it into place. The temp file is stored in the same
- - directory as the final file to avoid cross-device renames. -}
-viaTmp :: (FilePath -> String -> IO ()) -> FilePath -> String -> IO ()
-viaTmp a file content = do
- pid <- getProcessID
- let tmpfile = file ++ ".tmp" ++ show pid
- createDirectoryIfMissing True (parentDir file)
- a tmpfile content
- renameFile tmpfile file
-
-type Template = String
-
-{- Runs an action with a temp file, then removes the file. -}
-withTempFile :: Template -> (FilePath -> Handle -> IO a) -> IO a
-withTempFile template a = bracket create remove use
- where
- create = do
- tmpdir <- catchDefaultIO "." getTemporaryDirectory
- openTempFile tmpdir template
- remove (name, handle) = do
- hClose handle
- catchBoolIO (removeFile name >> return True)
- use (name, handle) = a name handle
-
-{- Runs an action with a temp directory, then removes the directory and
- - all its contents. -}
-withTempDir :: Template -> (FilePath -> IO a) -> IO a
-withTempDir template = bracket create remove
- where
- remove = removeDirectoryRecursive
- create = do
- tmpdir <- catchDefaultIO "." getTemporaryDirectory
- createDirectoryIfMissing True tmpdir
- pid <- getProcessID
- makedir tmpdir (template ++ show pid) (0 :: Int)
- makedir tmpdir t n = do
- let dir = tmpdir </> t ++ "." ++ show n
- r <- tryIO $ createDirectory dir
- either (const $ makedir tmpdir t $ n + 1) (const $ return dir) r
diff --git a/Utility/TempFile.o b/Utility/TempFile.o
deleted file mode 100644
index 5adafa3..0000000
--- a/Utility/TempFile.o
+++ /dev/null
Binary files differ
diff --git a/Utility/Tmp.hs b/Utility/Tmp.hs
new file mode 100644
index 0000000..f03e4c0
--- /dev/null
+++ b/Utility/Tmp.hs
@@ -0,0 +1,71 @@
+{- Temporary files and directories.
+ -
+ - Copyright 2010-2013 Joey Hess <joey@kitenet.net>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Utility.Tmp where
+
+import Control.Exception (bracket)
+import System.IO
+import System.Directory
+import Control.Monad.IfElse
+
+import Utility.Exception
+import System.FilePath
+
+type Template = String
+
+{- Runs an action like writeFile, writing to a temp file first and
+ - then moving it into place. The temp file is stored in the same
+ - directory as the final file to avoid cross-device renames. -}
+viaTmp :: (FilePath -> String -> IO ()) -> FilePath -> String -> IO ()
+viaTmp a file content = do
+ let (dir, base) = splitFileName file
+ createDirectoryIfMissing True dir
+ (tmpfile, handle) <- openTempFile dir (base ++ ".tmp")
+ hClose handle
+ a tmpfile content
+ renameFile tmpfile file
+
+{- Runs an action with a tmp file located in the system's tmp directory
+ - (or in "." if there is none) then removes the file. -}
+withTmpFile :: Template -> (FilePath -> Handle -> IO a) -> IO a
+withTmpFile template a = do
+ tmpdir <- catchDefaultIO "." getTemporaryDirectory
+ withTmpFileIn tmpdir template a
+
+{- Runs an action with a tmp file located in the specified directory,
+ - then removes the file. -}
+withTmpFileIn :: FilePath -> Template -> (FilePath -> Handle -> IO a) -> IO a
+withTmpFileIn tmpdir template a = bracket create remove use
+ where
+ create = openTempFile tmpdir template
+ remove (name, handle) = do
+ hClose handle
+ catchBoolIO (removeFile name >> return True)
+ use (name, handle) = a name handle
+
+{- Runs an action with a tmp directory located within the system's tmp
+ - directory (or within "." if there is none), then removes the tmp
+ - directory and all its contents. -}
+withTmpDir :: Template -> (FilePath -> IO a) -> IO a
+withTmpDir template a = do
+ tmpdir <- catchDefaultIO "." getTemporaryDirectory
+ withTmpDirIn tmpdir template a
+
+{- Runs an action with a tmp directory located within a specified directory,
+ - then removes the tmp directory and all its contents. -}
+withTmpDirIn :: FilePath -> Template -> (FilePath -> IO a) -> IO a
+withTmpDirIn tmpdir template = bracket create remove
+ where
+ remove d = whenM (doesDirectoryExist d) $
+ removeDirectoryRecursive d
+ create = do
+ createDirectoryIfMissing True tmpdir
+ makenewdir (tmpdir </> template) (0 :: Int)
+ makenewdir t n = do
+ let dir = t ++ "." ++ show n
+ either (const $ makenewdir t $ n + 1) (const $ return dir)
+ =<< tryIO (createDirectory dir)
diff --git a/Utility/Tmp.o b/Utility/Tmp.o
new file mode 100644
index 0000000..881c6fe
--- /dev/null
+++ b/Utility/Tmp.o
Binary files differ
diff --git a/Utility/UserInfo.hs b/Utility/UserInfo.hs
index 916ebb1..3a71c6b 100644
--- a/Utility/UserInfo.hs
+++ b/Utility/UserInfo.hs
@@ -14,18 +14,31 @@ module Utility.UserInfo (
) where
import Control.Applicative
-import System.Posix.User
-import System.Posix.Env
+import System.PosixCompat
+
+import Utility.Env
{- Current user's home directory.
-
- getpwent will fail on LDAP or NIS, so use HOME if set. -}
myHomeDir :: IO FilePath
-myHomeDir = myVal ["HOME"] homeDirectory
+myHomeDir = myVal env homeDirectory
+ where
+#ifndef __WINDOWS__
+ env = ["HOME"]
+#else
+ env = ["USERPROFILE", "HOME"] -- HOME is used in Cygwin
+#endif
{- Current user's user name. -}
myUserName :: IO String
-myUserName = myVal ["USER", "LOGNAME"] userName
+myUserName = myVal env userName
+ where
+#ifndef __WINDOWS__
+ env = ["USER", "LOGNAME"]
+#else
+ env = ["USERNAME", "USER", "LOGNAME"]
+#endif
myUserGecos :: IO String
#ifdef __ANDROID__
diff --git a/Utility/UserInfo.o b/Utility/UserInfo.o
index dd9a804..0cc3ac2 100644
--- a/Utility/UserInfo.o
+++ b/Utility/UserInfo.o
Binary files differ
diff --git a/Utility/WebApp.hs b/Utility/WebApp.hs
index 0614384..762819b 100644
--- a/Utility/WebApp.hs
+++ b/Utility/WebApp.hs
@@ -10,7 +10,7 @@
module Utility.WebApp where
import Common
-import Utility.TempFile
+import Utility.Tmp
import Utility.FileMode
import qualified Yesod
diff --git a/Utility/libmounts.h b/Utility/libmounts.h
index 460fcc7..24df55f 100644
--- a/Utility/libmounts.h
+++ b/Utility/libmounts.h
@@ -6,7 +6,7 @@
# define GETMNTINFO
#else
#if defined __ANDROID__
-# warning mounts listing code not available for Android
+/* Android is handled by the Haskell code, not here. */
# define UNKNOWN
#else
#if defined (__linux__) || defined (__FreeBSD_kernel__)
diff --git a/debian/changelog b/debian/changelog
index d5152ae..0eb8eef 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,11 +1,34 @@
-git-annex (4.20130502) UNRELEASED; urgency=low
+git-annex (4.20130516) unstable; urgency=low
* Android: The webapp is ported and working.
+ * Windows: There is a very rough Windows port. Do not trust it with
+ important data.
+ * git-annex-shell: Ensure that received files can be read. Files
+ transferred from some Android devices may have very broken permissions
+ as received.
+ * direct mode: Direct mode commands now work on files staged in the index,
+ they do not need to be committed to git.
* Temporarily add an upper bound to the version of yesod that can be built
with, since yesod 1.2 has a great many changes that will require extensive
work on the webapp.
-
- -- Joey Hess <joeyh@debian.org> Thu, 02 May 2013 20:39:19 -0400
+ * Disable building with the haskell threaded runtime when the assistant
+ is not built. This may fix builds on s390x and sparc, which are failing
+ to link -lHSrts_thr
+ * Avoid depending on regex-tdfa on mips, mipsel, and s390, where it fails
+ to build.
+ * direct: Fix a bug that could cause some files to be left in indirect mode.
+ * When initializing a directory special remote with a relative path,
+ the path is made absolute.
+ * SHA: Add a runtime sanity check that sha commands output something
+ that appears to be a real sha.
+ * configure: Better checking that sha commands output in the desired format.
+ * rsync special remotes: When sending from a crippled filesystem, use
+ the destination's default file permissions, as the local ones can
+ be arbitrarily broken. (Ie, ----rwxr-x for files on Android)
+ * migrate: Detect if a file gets corrupted while it's being migrated.
+ * Debian: Add a menu file.
+
+ -- Joey Hess <joeyh@debian.org> Thu, 16 May 2013 11:03:35 -0400
git-annex (4.20130501) unstable; urgency=low
diff --git a/debian/control b/debian/control
index 32f8a47..f9d2724 100644
--- a/debian/control
+++ b/debian/control
@@ -9,7 +9,7 @@ Build-Depends:
libghc-hslogger-dev,
libghc-pcre-light-dev,
libghc-sha-dev,
- libghc-regex-tdfa-dev,
+ libghc-regex-tdfa-dev [!mips !mipsel !s390],
libghc-dataenc-dev,
libghc-utf8-string-dev,
libghc-hs3-dev (>= 0.5.6),
@@ -17,6 +17,7 @@ Build-Depends:
libghc-quickcheck2-dev,
libghc-monad-control-dev (>= 0.3),
libghc-lifted-base-dev,
+ libghc-unix-compat-dev,
libghc-dlist-dev,
libghc-uuid-dev,
libghc-json-dev,
@@ -40,7 +41,7 @@ Build-Depends:
libghc-blaze-builder-dev,
libghc-crypto-api-dev,
libghc-network-multicast-dev,
- libghc-network-info-dev,
+ libghc-network-info-dev [linux-any kfreebsd-any],
libghc-safesemaphore-dev,
libghc-network-protocol-xmpp-dev (>= 0.4.3-1+b1),
libghc-gnutls-dev (>= 0.1.4),
diff --git a/debian/files b/debian/files
deleted file mode 100644
index b957efb..0000000
--- a/debian/files
+++ /dev/null
@@ -1 +0,0 @@
-git-annex_4.20130417_amd64.deb utils optional
diff --git a/debian/git-annex.debhelper.log b/debian/git-annex.debhelper.log
deleted file mode 100644
index 0924d1f..0000000
--- a/debian/git-annex.debhelper.log
+++ /dev/null
@@ -1,47 +0,0 @@
-dh_auto_configure
-dh_auto_build
-dh_auto_test
-dh_prep
-dh_installdirs
-dh_auto_install
-dh_install
-dh_installdocs
-dh_installchangelogs
-dh_installexamples
-dh_installman
-dh_installcatalogs
-dh_installcron
-dh_installdebconf
-dh_installemacsen
-dh_installifupdown
-dh_installinfo
-dh_installinit
-dh_installmenu
-dh_installmime
-dh_installmodules
-dh_installlogcheck
-dh_installlogrotate
-dh_installpam
-dh_installppp
-dh_installudev
-dh_installwm
-dh_installxfonts
-dh_installgsettings
-dh_bugfiles
-dh_ucf
-dh_lintian
-dh_gconf
-dh_icons
-dh_perl
-dh_usrlocal
-dh_link
-dh_compress
-dh_fixperms
-dh_strip
-dh_makeshlibs
-dh_shlibdeps
-dh_installdeb
-dh_gencontrol
-dh_md5sums
-dh_builddeb
-dh_builddeb
diff --git a/debian/git-annex.substvars b/debian/git-annex.substvars
deleted file mode 100644
index 3d717e0..0000000
--- a/debian/git-annex.substvars
+++ /dev/null
@@ -1,2 +0,0 @@
-shlibs:Depends=libc6 (>= 2.7), libffi5 (>= 3.0.4), libgmp10, libgnutls26 (>= 2.12.17-0), libgsasl7 (>= 1.4), libidn11 (>= 1.13), libxml2 (>= 2.7.4), libyaml-0-2, zlib1g (>= 1:1.1.4)
-misc:Depends=
diff --git a/debian/git-annex/DEBIAN/control b/debian/git-annex/DEBIAN/control
deleted file mode 100644
index 3550264..0000000
--- a/debian/git-annex/DEBIAN/control
+++ /dev/null
@@ -1,24 +0,0 @@
-Package: git-annex
-Version: 4.20130417
-Architecture: amd64
-Maintainer: Joey Hess <joeyh@debian.org>
-Installed-Size: 46054
-Depends: libc6 (>= 2.7), libffi5 (>= 3.0.4), libgmp10, libgnutls26 (>= 2.12.17-0), libgsasl7 (>= 1.4), libidn11 (>= 1.13), libxml2 (>= 2.7.4), libyaml-0-2, zlib1g (>= 1:1.1.4), git (>= 1:1.7.7.6), rsync, wget, curl, openssh-client (>= 1:5.6p1)
-Recommends: lsof, gnupg, bind9-host
-Suggests: graphviz, bup, libnss-mdns
-Section: utils
-Priority: optional
-Homepage: http://git-annex.branchable.com/
-Description: manage files with git, without checking their contents into git
- git-annex allows managing files with git, without checking the file
- contents into git. While that may seem paradoxical, it is useful when
- dealing with files larger than git can currently easily handle, whether due
- to limitations in memory, time, or disk space.
- .
- Even without file content tracking, being able to manage files with git,
- move files around and delete files with versioned directory trees, and use
- branches and distributed clones, are all very handy reasons to use git. And
- annexed files can co-exist in the same git repository with regularly
- versioned files, which is convenient for maintaining documents, Makefiles,
- etc that are associated with annexed files but that benefit from full
- revision control.
diff --git a/debian/git-annex/DEBIAN/md5sums b/debian/git-annex/DEBIAN/md5sums
deleted file mode 100644
index 8ee698b..0000000
--- a/debian/git-annex/DEBIAN/md5sums
+++ /dev/null
@@ -1,228 +0,0 @@
-16246dcc37ffdde88c1512632cf4564b usr/bin/git-annex
-2ef419c4a13022ede5561da5b1914f62 usr/share/doc-base/git-annex
-008556d24900b7f08cfeea8da49cd464 usr/share/doc/git-annex/NEWS.Debian.gz
-ad375de4fdc0a30dc1c682a6360f4d8c usr/share/doc/git-annex/changelog.gz
-dfc4775bd2a7d941b819e734ec9b7e73 usr/share/doc/git-annex/copyright
-dedf6671d7ec5d249ad5a99d9bdbacbe usr/share/doc/git-annex/html/assistant.html
-6713a86e655998384c46fb7460988b57 usr/share/doc/git-annex/html/assistant/addsshserver.png
-ebcfa646439b9df0b54cb7bd31ae20ec usr/share/doc/git-annex/html/assistant/android/appinstalled.png
-9fd3bdafbdc2f5d4266bd313f9b655e8 usr/share/doc/git-annex/html/assistant/android/install.png
-e2677873f5ac5d5c97e82e361aca711a usr/share/doc/git-annex/html/assistant/android/terminal.png
-729d0e63a114001e2c7684cae5bdf0be usr/share/doc/git-annex/html/assistant/archival_walkthrough.html
-07f39d17b252a39776f1bd2dbd9cda90 usr/share/doc/git-annex/html/assistant/buddylist.png
-cb7d4d4757a8e6989a77a843e4f867d2 usr/share/doc/git-annex/html/assistant/cloudnudge.png
-e8ca3cd2f32161a83ac41bdcd93fdd56 usr/share/doc/git-annex/html/assistant/combinerepos.png
-5013fbf9e1bf92e53a1e70bfcc2b222f usr/share/doc/git-annex/html/assistant/controlmenu.png
-95ce2bd3ae2466242e470396a99b096a usr/share/doc/git-annex/html/assistant/crashrecovery.png
-3494483bd7625aad928c02dbd75507f4 usr/share/doc/git-annex/html/assistant/dashboard.png
-a1518dea95aab7eac446bb3d64f7f024 usr/share/doc/git-annex/html/assistant/deleterepository.png
-4e6daf0f77faf92c456f93431e0dad32 usr/share/doc/git-annex/html/assistant/example.png
-313ee85d8109ce5535f669eada6e48a7 usr/share/doc/git-annex/html/assistant/local_pairing_walkthrough.html
-17b6d14b4f3225c9dcf2cbab8a754f8f usr/share/doc/git-annex/html/assistant/local_pairing_walkthrough/addrepository.png
-e6d3761647be986783f96722e9243098 usr/share/doc/git-annex/html/assistant/local_pairing_walkthrough/pairing.png
-479f35f53a4bdf29d849a90ae13a5196 usr/share/doc/git-annex/html/assistant/local_pairing_walkthrough/pairrequest.png
-ebf723435dae6e2c94846a8a30f77bd5 usr/share/doc/git-annex/html/assistant/local_pairing_walkthrough/secret.png
-1a1cec71fad74012c37ebd7c6ba30288 usr/share/doc/git-annex/html/assistant/local_pairing_walkthrough/secretempty.png
-6410869a6b0d0d359f59367f9f928098 usr/share/doc/git-annex/html/assistant/logs.png
-bdc41ce7b9f8b67552614bc36aad9080 usr/share/doc/git-annex/html/assistant/makerepo.png
-4f5f4f7879d518cf5a759110dfef4ec5 usr/share/doc/git-annex/html/assistant/menu.png
-34fc0ab10ba4736b0e28a94784ca8885 usr/share/doc/git-annex/html/assistant/osx-app.png
-2e98430eef3a73aa2c6537727e2e6b2a usr/share/doc/git-annex/html/assistant/preferences.png
-590f25e827d02d53b37f2097a9eb27e7 usr/share/doc/git-annex/html/assistant/quickstart.html
-b164f881382408424134aa52e9866850 usr/share/doc/git-annex/html/assistant/release_notes.html
-b97ea87a3dba9329fb42147827d7a71b usr/share/doc/git-annex/html/assistant/remote_sharing_walkthrough.html
-c3b25c8a79014b28a0487a1812be6a86 usr/share/doc/git-annex/html/assistant/repogroup.png
-52ec95dc090b11a246dd1026e7cd86fc usr/share/doc/git-annex/html/assistant/repogroups.png
-9fc46bce83b5019646e4853065fec9a2 usr/share/doc/git-annex/html/assistant/repositories.png
-dcddb85e4ec4dda2ec030ca4307d5bfd usr/share/doc/git-annex/html/assistant/rsync.net.png
-2ec2114e89c70340ea64d582396a2773 usr/share/doc/git-annex/html/assistant/running.png
-fb613b836edc313358f1d801e1d9c43f usr/share/doc/git-annex/html/assistant/share_with_a_friend_walkthrough.html
-5cef90a6c7681efe04db89e4cabb9df1 usr/share/doc/git-annex/html/assistant/share_with_a_friend_walkthrough/buddylist.png
-91e3719633fb46bd36b7330d4bb2a1e2 usr/share/doc/git-annex/html/assistant/share_with_a_friend_walkthrough/pairing.png
-db44e11831135b45d578ac6e51b2fe71 usr/share/doc/git-annex/html/assistant/share_with_a_friend_walkthrough/repolist.png
-4f28f7cdc46d08a70c99b04901f5abd2 usr/share/doc/git-annex/html/assistant/share_with_a_friend_walkthrough/xmppalert.png
-b3f48493cb313da1299769a0a88b26d4 usr/share/doc/git-annex/html/assistant/thanks.html
-3904b3966640d84f23bcf9c3d3cc3051 usr/share/doc/git-annex/html/assistant/thumbnail.png
-2f8c80fcf1340e81979cbd4e9aae951f usr/share/doc/git-annex/html/assistant/xmpp.png
-f07e8d8fcc01836de290c0fbc3ea0c92 usr/share/doc/git-annex/html/assistant/xmppnudge.png
-eef6deb5ab3028057671f5ff74d1cb10 usr/share/doc/git-annex/html/assistant/xmpppairingend.png
-9ac3188c29aa365c0d24ad568e631504 usr/share/doc/git-annex/html/backends.html
-3eb339561f742000263adf9367d3da12 usr/share/doc/git-annex/html/bare_repositories.html
-b2337cc994e1245e3f9bb21cc902aaf5 usr/share/doc/git-annex/html/coding_style.html
-466803edb94ea4370795fae7d6f3e073 usr/share/doc/git-annex/html/comments.html
-4cda7bd2c40ee654a1908b00c3a1ded3 usr/share/doc/git-annex/html/contact.html
-55f64a075c5f293966b40649d93d1b87 usr/share/doc/git-annex/html/copies.html
-9e802bc81dcfbf1742d288a9f31f8855 usr/share/doc/git-annex/html/design.html
-8d23e8435f297ae114ccdeb897f6b7ef usr/share/doc/git-annex/html/design/assistant.html
-bcff6fe1600a07a8ee26562a8eccd5cb usr/share/doc/git-annex/html/design/assistant/OSX.html
-8ce17a8330dbb9cb96a18aa278b05c3e usr/share/doc/git-annex/html/design/assistant/android.html
-cbdb25c7ec89b1a32dfb3f2d7b29fb18 usr/share/doc/git-annex/html/design/assistant/cloud.html
-33be00e17a7ffba05645dc8d09198694 usr/share/doc/git-annex/html/design/assistant/configurators.html
-39b89dd3a4ba2863b72d17467f6089d9 usr/share/doc/git-annex/html/design/assistant/deltas.html
-81752d54c1f771aa98091353839baf4c usr/share/doc/git-annex/html/design/assistant/desymlink.html
-3ed8c70dcf4a40a22b896edb5a9429d2 usr/share/doc/git-annex/html/design/assistant/encrypted_git_remotes.html
-95f76be22a4a02c4f798fa8b76821800 usr/share/doc/git-annex/html/design/assistant/inotify.html
-1095fed9931e91cf5f0d368f840b96e2 usr/share/doc/git-annex/html/design/assistant/leftovers.html
-e0ef86064e457d0bd73e3e26ed877267 usr/share/doc/git-annex/html/design/assistant/more_cloud_providers.html
-218e7eebb4a9f010a2ebe8b932cbb8e4 usr/share/doc/git-annex/html/design/assistant/pairing.html
-4ed1c0405641b159d7cd3cfacaf7824c usr/share/doc/git-annex/html/design/assistant/partial_content.html
-56d7545afaacd20719ce59c94b845c19 usr/share/doc/git-annex/html/design/assistant/polls.html
-cfe5636ccc5fcf4d71fcef66d5621ec5 usr/share/doc/git-annex/html/design/assistant/polls/Android.html
-9d14de8debe853061756dd73d5aa035e usr/share/doc/git-annex/html/design/assistant/polls/goals_for_April.html
-2894cfe72e98dcfd7a119c568665ca6c usr/share/doc/git-annex/html/design/assistant/polls/prioritizing_special_remotes.html
-01b679992d9ebdafb82b697ec914b51d usr/share/doc/git-annex/html/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant.html
-749a52361206b9d2f6b58c7f97c2df46 usr/share/doc/git-annex/html/design/assistant/progressbars.html
-e46632ef0f32a0554b4478e729c2f209 usr/share/doc/git-annex/html/design/assistant/rate_limiting.html
-db9dde8542ade8b669f7c939b0bcc965 usr/share/doc/git-annex/html/design/assistant/screenshot/firstrun.png
-fd2bf9e02e1bcc91ef40b80099592caf usr/share/doc/git-annex/html/design/assistant/screenshot/intro.png
-c38ae833c6dfb8857dca0a6cac79f41c usr/share/doc/git-annex/html/design/assistant/syncing.html
-401d56bbef7e4f834e49e144ed240196 usr/share/doc/git-annex/html/design/assistant/transfer_control.html
-5ba30a696f2a68591818b0a7ee9111b6 usr/share/doc/git-annex/html/design/assistant/webapp.html
-b0295c7c350b5d0fb702923ad6273d6e usr/share/doc/git-annex/html/design/assistant/windows.html
-7e522c25167c6407d8ec0ec8e86a4acb usr/share/doc/git-annex/html/design/assistant/xmpp.html
-6de7af3334b64c378acc5d4bebba4a3b usr/share/doc/git-annex/html/design/encryption.html
-dcf68209c0787e8c5c0a56514a82c227 usr/share/doc/git-annex/html/direct_mode.html
-914b2d4bd6b0748aea59ba4ee7a10224 usr/share/doc/git-annex/html/distributed_version_control.html
-04d583703191255f43d379f2ed765db5 usr/share/doc/git-annex/html/download.html
-9b6103fc86087f71e3967fb41cefb829 usr/share/doc/git-annex/html/encryption.html
-146f97002d28c80a3b783ce50dbad93b usr/share/doc/git-annex/html/favicon.ico
-8d9f31e7f913c1e511ab87fc04035da2 usr/share/doc/git-annex/html/feeds.html
-ba0016398d6e9b8d6d5f5c2f15627ffe usr/share/doc/git-annex/html/footer/column_a.html
-36cb6c4529bf23554eee5073829fdef7 usr/share/doc/git-annex/html/footer/column_b.html
-6f1ef31b1cc3a98c49c09e8a6ba39b7b usr/share/doc/git-annex/html/future_proofing.html
-e194c2c439f436869b8cf4f01fbeb117 usr/share/doc/git-annex/html/git-annex-shell.html
-c106d7b90a3e56931371d7f3dec4eaa6 usr/share/doc/git-annex/html/git-annex.html
-54e75044a2840e0296d4098661a35fd3 usr/share/doc/git-annex/html/git-union-merge.html
-365320869f7e9ca2e4e053d2be065055 usr/share/doc/git-annex/html/how_it_works.html
-7edcc34e82cc270a3a0b84244c003ec0 usr/share/doc/git-annex/html/ikiwiki/ikiwiki.js
-531101fb991d25633961400bd5b018c5 usr/share/doc/git-annex/html/ikiwiki/relativedate.js
-4329a38aa265e63db16f6c8eb629b15c usr/share/doc/git-annex/html/ikiwiki/toggle.js
-afaa4c38712a1805f79fb930f2177c08 usr/share/doc/git-annex/html/index.html
-e83980341eb0b89a519cf7b53cf6398b usr/share/doc/git-annex/html/install.html
-ff8f301c93b6a1d12296a4cd15d30220 usr/share/doc/git-annex/html/install/Android.html
-20d16bef5d64869f044e608a08ea799a usr/share/doc/git-annex/html/install/ArchLinux.html
-59d67cf75de0355f6ae48918ea146145 usr/share/doc/git-annex/html/install/Debian.html
-f1c340b3596ba1453a9a49aa85204288 usr/share/doc/git-annex/html/install/Fedora.html
-5e8b78918385f354a6696e6fcfff3a5d usr/share/doc/git-annex/html/install/FreeBSD.html
-c95ed84f3ea9f8ba7957da3515d72df1 usr/share/doc/git-annex/html/install/Gentoo.html
-92521d161ca5a6af686548aab769a0ae usr/share/doc/git-annex/html/install/Linux_standalone.html
-4769deab931e8a1f4bad23b37c72e396 usr/share/doc/git-annex/html/install/NixOS.html
-56286356d8df54578248e07016665ac5 usr/share/doc/git-annex/html/install/OSX.html
-abd8fc315442a65db2aa459ecb6cf0f0 usr/share/doc/git-annex/html/install/OSX/old_comments.html
-1939faaed691097a0e6381bd26f55ace usr/share/doc/git-annex/html/install/ScientificLinux5.html
-6fde89e241a6e67a850e013dad29ea2f usr/share/doc/git-annex/html/install/Ubuntu.html
-de09edc6a897b9dd5a3e87f19f9c889d usr/share/doc/git-annex/html/install/cabal.html
-cf1474276345c541b993c9a9795be52a usr/share/doc/git-annex/html/install/fromscratch.html
-1b1e1d43ad6c3c1dc508a681a23776d5 usr/share/doc/git-annex/html/install/openSUSE.html
-c12fb140009655df3c3a4e0ee36366e7 usr/share/doc/git-annex/html/internals.html
-db63e59dba5e3bdc07056af6c34520b7 usr/share/doc/git-annex/html/internals/hashing.html
-59497f909e322bcb09e0938f6e5a148e usr/share/doc/git-annex/html/internals/key_format.html
-cc455557211946a3e05c20e96a5cb55c usr/share/doc/git-annex/html/license.html
-55e7b8cb55b0cc3efdde9ee52cce4c3b usr/share/doc/git-annex/html/license/AGPL.gz
-4e0ca2bc63e61797836c39b9a6e33ddc usr/share/doc/git-annex/html/license/GPL.gz
-68f10b63c785bc6767f61275f6a65da9 usr/share/doc/git-annex/html/license/LGPL.gz
-c4d57f4479c1f5ffdbc47f5cce7a4901 usr/share/doc/git-annex/html/links/key_concepts.html
-3c46c4240ae5902f0c8792e024cfb683 usr/share/doc/git-annex/html/links/other_stuff.html
-62937d018ccadff16cfd36d5138c5143 usr/share/doc/git-annex/html/links/the_details.html
-550ca9383584fe78d2bee0c3e306da74 usr/share/doc/git-annex/html/location_tracking.html
-d29fa683faf26b4eeaf7e2df5ccc9067 usr/share/doc/git-annex/html/logo-bw.svg
-da7ef72c147208844c47996d3701b552 usr/share/doc/git-annex/html/logo.png
-0e7352e76622961cbe82145534500c9d usr/share/doc/git-annex/html/logo.svg
-bd3617363704ae91f84398a9d113b067 usr/share/doc/git-annex/html/logo_small.png
-9ee5f7dbb882268b6b9c40d446b8188f usr/share/doc/git-annex/html/meta.html
-b9b8d4a69d0b10141a629bdc63352e8b usr/share/doc/git-annex/html/news.html
-3bc359b1087e4fb81281b0ccde1b4493 usr/share/doc/git-annex/html/not.html
-e0fb93deb8a9b2624a989550f714714d usr/share/doc/git-annex/html/preferred_content.html
-f6bf213ce33de7163bd65fc69f53071c usr/share/doc/git-annex/html/related_software.html
-99c8387075783f9d4260a525ff0c3950 usr/share/doc/git-annex/html/repomap.png
-787b49e0eda206605fedf58b2c8fc731 usr/share/doc/git-annex/html/scalability.html
-653a65dc513eecea105cc5af922c34df usr/share/doc/git-annex/html/sidebar.html
-963dd1209b9cfb805cfd5d90509a4e0e usr/share/doc/git-annex/html/sitemap.html
-93739e63677f2f7b9cd016d79b68035d usr/share/doc/git-annex/html/special_remotes.html
-ea046b3b40e395bcf36c4920013a6d70 usr/share/doc/git-annex/html/special_remotes/S3.html
-4054190ce62387219e2788b794ffddb5 usr/share/doc/git-annex/html/special_remotes/bup.html
-a26623c67dd5940257864827b2f7f8cd usr/share/doc/git-annex/html/special_remotes/directory.html
-ba3eb361fb781d58df7cbadb3ae61c45 usr/share/doc/git-annex/html/special_remotes/glacier.html
-4595ac5b9e2b75bcab93c973ec6c70a1 usr/share/doc/git-annex/html/special_remotes/hook.html
-015c4427e988917d90f61af983ff1e67 usr/share/doc/git-annex/html/special_remotes/rsync.html
-91bcf22f8ae50108d821482e6f940f19 usr/share/doc/git-annex/html/special_remotes/web.html
-1ccd2ef4c978b66712b36e08d2e632aa usr/share/doc/git-annex/html/special_remotes/webdav.html
-310b57c106602b1780d1155ce0f1810e usr/share/doc/git-annex/html/special_remotes/xmpp.html
-544503961d1cba606f5c401f928051ff usr/share/doc/git-annex/html/summary.html
-55fcdbf4a5a6e8eebb0486eee32de6fb usr/share/doc/git-annex/html/sync.html
-40ff84996d93191b8b2477ba4684b68f usr/share/doc/git-annex/html/templates/bare.tmpl
-fd4053eb8be4e1a659d95deb9b1df2f2 usr/share/doc/git-annex/html/templates/bugtemplate.html
-977b742d9da88d36e4dd927c4c069658 usr/share/doc/git-annex/html/templates/walkthrough.tmpl
-6ba1652d9ae7c1a09251c8d9638e62a0 usr/share/doc/git-annex/html/testimonials.html
-767d3df7127d5fc7ce3eadd62602a1ad usr/share/doc/git-annex/html/tips.html
-e553b61175b15e1db211df77c81bdc97 usr/share/doc/git-annex/html/tips/Building_git-annex_on_Debian_OR___37____164____35____34____164____37____38____34____35___Haskell__33__.html
-fe6a2125e4e2d48dff6d4b72463e6b84 usr/share/doc/git-annex/html/tips/Decentralized_repository_behind_a_Firewall.html
-9303cbf8d625114cdf9d014a21363dfa usr/share/doc/git-annex/html/tips/How_to_retroactively_annex_a_file_already_in_a_git_repo.html
-da126363e988bbb1c2029434afcc074e usr/share/doc/git-annex/html/tips/Internet_Archive_via_S3.html
-3b07049f68a94d6e12c5809fb58f284e usr/share/doc/git-annex/html/tips/Using_Git-annex_as_a_web_browsing_assistant.html
-a11a1250cf1e3c6a5c82904fc7f5c9ce usr/share/doc/git-annex/html/tips/assume-unstaged.html
-c126a4d317f08fd8d43755ab2cf3d20f usr/share/doc/git-annex/html/tips/automatically_getting_files_on_checkout.html
-696a6f3f5f2f52569e9ecec8ad0d94aa usr/share/doc/git-annex/html/tips/centralised_repository:_starting_from_nothing.html
-de4578646bc3b7a8f3bd4d0af499ac9e usr/share/doc/git-annex/html/tips/centralized_git_repository_tutorial.html
-027c8efcc1a9c03a6ef6a4a80e127462 usr/share/doc/git-annex/html/tips/emacs_integration.html
-108b999387a7de2ff4d8ae53500ea8cd usr/share/doc/git-annex/html/tips/finding_duplicate_files.html
-adee13342f4d60e364579d2a6cfcf2dc usr/share/doc/git-annex/html/tips/migrating_data_to_a_new_backend.html
-b88debb958799599abed290b006a2375 usr/share/doc/git-annex/html/tips/powerful_file_matching.html
-94259379fc668106dca8223e7d511270 usr/share/doc/git-annex/html/tips/recover_data_from_lost+found.html
-3ae70e1eb0812cd4796af14c3983027f usr/share/doc/git-annex/html/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant.html
-e4a7db1a35d2033ce8267ef674dfe939 usr/share/doc/git-annex/html/tips/setup_a_public_repository_on_a_web_site.html
-d1e6d33155d7ac68a8539351a5ad4326 usr/share/doc/git-annex/html/tips/untrusted_repositories.html
-4c73de1034928b2f0bf5febd4f0184c9 usr/share/doc/git-annex/html/tips/using_Amazon_Glacier.html
-5291749ff0acbfdd6057399dea4a2a7a usr/share/doc/git-annex/html/tips/using_Amazon_S3.html
-cb8bd698cd43c5c031082b50aefa4eec usr/share/doc/git-annex/html/tips/using_Google_Cloud_Storage.html
-0650b20442eb4dfddb9baf8e9996cf2d usr/share/doc/git-annex/html/tips/using_box.com_as_a_special_remote.html
-b0f0e743aaca0c7ba15168abc4a72036 usr/share/doc/git-annex/html/tips/using_git_annex_with_no_fixed_hostname_and_optimising_ssh.html
-b7479da4c4d71763f1e2325be3200433 usr/share/doc/git-annex/html/tips/using_gitolite_with_git-annex.html
-66b6d9fe6def3367c38eb07c31ae9802 usr/share/doc/git-annex/html/tips/using_the_SHA1_backend.html
-204f4c897832b06ebfbc2c291138c6ef usr/share/doc/git-annex/html/tips/using_the_web_as_a_special_remote.html
-cd580aa02a8204f51d4a5fdae5e43c32 usr/share/doc/git-annex/html/tips/visualizing_repositories_with_gource.html
-919131bcd8658ae2c2670849953945a2 usr/share/doc/git-annex/html/tips/visualizing_repositories_with_gource/screenshot.jpg
-313149a6f3cf0939263eef6da49b79df usr/share/doc/git-annex/html/tips/what_to_do_when_a_repository_is_corrupted.html
-d8f4ff1e7d35ec2b09ee81982f1cc994 usr/share/doc/git-annex/html/tips/what_to_do_when_you_lose_a_repository.html
-1e58adc871a07107cd56057197b1af0b usr/share/doc/git-annex/html/transferring_data.html
-f7ad8a50509a8d0f8ef37ad97565111f usr/share/doc/git-annex/html/trust.html
-b0d8986b2472aaee300a1b567077ad33 usr/share/doc/git-annex/html/upgrades.html
-f6c97d0651c7a5acf8f59c0fc310cd20 usr/share/doc/git-annex/html/upgrades/SHA_size.html
-8e217f7cc0d1973807481661dbd2bdc1 usr/share/doc/git-annex/html/use_case/Alice.html
-2d7a5fdb1016a57ae9a00fb83173d035 usr/share/doc/git-annex/html/use_case/Bob.html
-5e836dcedc1b25bfbf48d6dac7810ce3 usr/share/doc/git-annex/html/users.html
-8e6ba607564550ca0467532a3027a135 usr/share/doc/git-annex/html/users/chrysn.html
-dbb3ca851afc39980944344f597d1bce usr/share/doc/git-annex/html/users/fmarier.html
-a22903aca0886e1ecdaef5c3778149f9 usr/share/doc/git-annex/html/users/gebi.html
-7208b3071785ad698ab4c5aaebd0438c usr/share/doc/git-annex/html/users/joey.html
-743391440135199e70044e97322051fb usr/share/doc/git-annex/html/videos.html
-2423df4764aced36bb632e028b705b26 usr/share/doc/git-annex/html/videos/FOSDEM2012.html
-85bc3b286086e1f7e906aad3d8389a66 usr/share/doc/git-annex/html/videos/LCA2013.html
-b474ac826f7e8acb684823f8f02971b1 usr/share/doc/git-annex/html/videos/git-annex_assistant_archiving.html
-49ed3bf9ee79500b629bd73725a75047 usr/share/doc/git-annex/html/videos/git-annex_assistant_introduction.html
-56126b607227a182e7a772273b287576 usr/share/doc/git-annex/html/videos/git-annex_assistant_remote_sharing.html
-3a301cd8e6eb3b29bf380c2e775cee37 usr/share/doc/git-annex/html/videos/git-annex_assistant_sync_demo.html
-268ff933732798a4e7807debb75765fe usr/share/doc/git-annex/html/videos/git-annex_watch_demo.html
-fc5532b490cee25f57a977a767e97f87 usr/share/doc/git-annex/html/videos/git-annex_weppapp_demo.html
-d798ae857754a90a2a53e980c6af0eb9 usr/share/doc/git-annex/html/walkthrough.html
-03d8415b3143efe76eacbb7e5c837403 usr/share/doc/git-annex/html/walkthrough/adding_a_remote.html
-33f436aa1b44dfef282ca546764c1e34 usr/share/doc/git-annex/html/walkthrough/adding_files.html
-22da998647d5c37cba452f733a441838 usr/share/doc/git-annex/html/walkthrough/automatically_managing_content.html
-caeaeeaea85feee563943dad3a84da12 usr/share/doc/git-annex/html/walkthrough/backups.html
-3d73e09e90d0f85dd15ded89625bfa2e usr/share/doc/git-annex/html/walkthrough/creating_a_repository.html
-98b54e9bf4e04d7cee3bfb3985be482e usr/share/doc/git-annex/html/walkthrough/fsck:_verifying_your_data.html
-6d1abc65429df9a7c1d87b65a30ec950 usr/share/doc/git-annex/html/walkthrough/fsck:_when_things_go_wrong.html
-e4410117cff03b8a9f0ec87b4590b083 usr/share/doc/git-annex/html/walkthrough/getting_file_content.html
-cd8b5ef502c25c2b421a6203502dd8f8 usr/share/doc/git-annex/html/walkthrough/modifying_annexed_files.html
-c811dc97b861f08bdd2bc27acde4a356 usr/share/doc/git-annex/html/walkthrough/more.html
-2f329b6821030c0287f868ff684c3817 usr/share/doc/git-annex/html/walkthrough/moving_file_content_between_repositories.html
-6cbdae72514a4907cac8846c65099156 usr/share/doc/git-annex/html/walkthrough/removing_files.html
-33aef95c4a4b15d1b57efda2e5b5b121 usr/share/doc/git-annex/html/walkthrough/removing_files:_When_things_go_wrong.html
-5ca66a6912647361cac8da91506d2d45 usr/share/doc/git-annex/html/walkthrough/renaming_files.html
-7ee72345527052122996f0cf3c2ca1b1 usr/share/doc/git-annex/html/walkthrough/syncing.html
-3a99d4e12d425cbb45f28951c8eb7d1f usr/share/doc/git-annex/html/walkthrough/transferring_files:_When_things_go_wrong.html
-ed1c0a08473bf439b5d1692d5e5ade85 usr/share/doc/git-annex/html/walkthrough/unused_data.html
-411865f3015512c3f561271fc452ee59 usr/share/doc/git-annex/html/walkthrough/using_bup.html
-751895de1877010e57d322d9eb425189 usr/share/doc/git-annex/html/walkthrough/using_ssh_remotes.html
-c0d91beb3dfd17a071524d8fafcd27af usr/share/man/man1/git-annex-shell.1.gz
-64f0e285f9c90fc85b91013dca618f0c usr/share/man/man1/git-annex.1.gz
diff --git a/debian/git-annex/usr/bin/git-annex b/debian/git-annex/usr/bin/git-annex
deleted file mode 100755
index 1438c44..0000000
--- a/debian/git-annex/usr/bin/git-annex
+++ /dev/null
Binary files differ
diff --git a/debian/git-annex/usr/bin/git-annex-shell b/debian/git-annex/usr/bin/git-annex-shell
deleted file mode 100755
index 1438c44..0000000
--- a/debian/git-annex/usr/bin/git-annex-shell
+++ /dev/null
Binary files differ
diff --git a/debian/git-annex/usr/share/doc-base/git-annex b/debian/git-annex/usr/share/doc-base/git-annex
deleted file mode 100644
index f71a233..0000000
--- a/debian/git-annex/usr/share/doc-base/git-annex
+++ /dev/null
@@ -1,9 +0,0 @@
-Document: git-annex
-Title: git-annex documentation
-Author: Joey Hess
-Abstract: All the documentation from git-annex's website.
-Section: File Management
-
-Format: HTML
-Index: /usr/share/doc/git-annex/html/index.html
-Files: /usr/share/doc/git-annex/html/*.html
diff --git a/debian/git-annex/usr/share/doc/git-annex/NEWS.Debian.gz b/debian/git-annex/usr/share/doc/git-annex/NEWS.Debian.gz
deleted file mode 100644
index a68174e..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/NEWS.Debian.gz
+++ /dev/null
Binary files differ
diff --git a/debian/git-annex/usr/share/doc/git-annex/changelog.gz b/debian/git-annex/usr/share/doc/git-annex/changelog.gz
deleted file mode 100644
index e60a64f..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/changelog.gz
+++ /dev/null
Binary files differ
diff --git a/debian/git-annex/usr/share/doc/git-annex/copyright b/debian/git-annex/usr/share/doc/git-annex/copyright
deleted file mode 100644
index 1791a04..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/copyright
+++ /dev/null
@@ -1,783 +0,0 @@
-Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
-Source: native package
-
-Files: *
-Copyright: © 2010-2013 Joey Hess <joey@kitenet.net>
-License: GPL-3+
-
-Files: Assistant/WebApp.hs Assistant/WebApp/* templates/* static/*
-Copyright: © 2012-2013 Joey Hess <joey@kitenet.net>
-License: AGPL-3+
-
-Files: Utility/ThreadScheduler.hs
-Copyright: 2011 Bas van Dijk & Roel van Dijk
- 2012 Joey Hess <joey@kitenet.net>
-License: GPL-3+
-
-Files: Utility/Gpg/Types.hs
-Copyright: 2013 guilhem <guilhem@fripost.org>
-License: GPL-3+
-
-Files: doc/logo* */favicon.ico standalone/osx/git-annex.app/Contents/Resources/git-annex.icns
-Copyright: 2007 Henrik Nyh <http://henrik.nyh.se/>
- 2010 Joey Hess <joey@kitenet.net>
-License: other
- Free to modify and redistribute with due credit, and obviously free to use.
-
-Files: Utility/Mounts.hsc
-Copyright: Volker Wysk <hsss@volker-wysk.de>
-License: LGPL-2.1+
-
-Files: Utility/libmounts.c
-Copyright: 1980, 1989, 1993, 1994 The Regents of the University of California
- 2001 David Rufino <daverufino@btinternet.com>
- 2012 Joey Hess <joey@kitenet.net>
-License: BSD-3-clause
- * Copyright (c) 1980, 1989, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- * Copyright (c) 2001
- * David Rufino <daverufino@btinternet.com>
- * Copyright 2012
- * Joey Hess <joey@kitenet.net>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
-Files: static/jquery*
-Copyright: © 2005-2011 by John Resig, Branden Aaron & Jörn Zaefferer
- © 2011 The Dojo Foundation
-License: MIT or GPL-2
- The full text of version 2 of the GPL is distributed in
- /usr/share/common-licenses/GPL-2 on Debian systems. The text of the MIT
- license follows:
- .
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- .
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
- .
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Files: static/*/bootstrap* static/img/glyphicons-halflings*
-Copyright: 2012 Twitter, Inc.
-License: Apache-2.0
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- .
- http://www.apache.org/licenses/LICENSE-2.0
- .
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- .
- The complete text of the Apache License is distributed in
- /usr/share/common-licenses/Apache-2.0 on Debian systems.
-
-License: GPL-3+
- The full text of version 3 of the GPL is distributed as doc/license/GPL in
- this package's source, or in /usr/share/common-licenses/GPL-3 on
- Debian systems.
-
-License: LGPL-2.1+
- The full text of version 2.1 of the LGPL is distributed as doc/license/LGPL
- in this package's source, or in /usr/share/common-licenses/LGPL-2.1
- on Debian systems.
-
-License: AGPL-3+
- GNU AFFERO GENERAL PUBLIC LICENSE
- Version 3, 19 November 2007
- .
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
- .
- Preamble
- .
- The GNU Affero General Public License is a free, copyleft license for
- software and other kinds of works, specifically designed to ensure
- cooperation with the community in the case of network server software.
- .
- The licenses for most software and other practical works are designed
- to take away your freedom to share and change the works. By contrast,
- our General Public Licenses are intended to guarantee your freedom to
- share and change all versions of a program--to make sure it remains free
- software for all its users.
- .
- When we speak of free software, we are referring to freedom, not
- price. Our General Public Licenses are designed to make sure that you
- have the freedom to distribute copies of free software (and charge for
- them if you wish), that you receive source code or can get it if you
- want it, that you can change the software or use pieces of it in new
- free programs, and that you know you can do these things.
- .
- Developers that use our General Public Licenses protect your rights
- with two steps: (1) assert copyright on the software, and (2) offer
- you this License which gives you legal permission to copy, distribute
- and/or modify the software.
- .
- A secondary benefit of defending all users' freedom is that
- improvements made in alternate versions of the program, if they
- receive widespread use, become available for other developers to
- incorporate. Many developers of free software are heartened and
- encouraged by the resulting cooperation. However, in the case of
- software used on network servers, this result may fail to come about.
- The GNU General Public License permits making a modified version and
- letting the public access it on a server without ever releasing its
- source code to the public.
- .
- The GNU Affero General Public License is designed specifically to
- ensure that, in such cases, the modified source code becomes available
- to the community. It requires the operator of a network server to
- provide the source code of the modified version running there to the
- users of that server. Therefore, public use of a modified version, on
- a publicly accessible server, gives the public access to the source
- code of the modified version.
- .
- An older license, called the Affero General Public License and
- published by Affero, was designed to accomplish similar goals. This is
- a different license, not a version of the Affero GPL, but Affero has
- released a new version of the Affero GPL which permits relicensing under
- this license.
- .
- The precise terms and conditions for copying, distribution and
- modification follow.
- .
- TERMS AND CONDITIONS
- .
- 0. Definitions.
- .
- "This License" refers to version 3 of the GNU Affero General Public License.
- .
- "Copyright" also means copyright-like laws that apply to other kinds of
- works, such as semiconductor masks.
- .
- "The Program" refers to any copyrightable work licensed under this
- License. Each licensee is addressed as "you". "Licensees" and
- "recipients" may be individuals or organizations.
- .
- To "modify" a work means to copy from or adapt all or part of the work
- in a fashion requiring copyright permission, other than the making of an
- exact copy. The resulting work is called a "modified version" of the
- earlier work or a work "based on" the earlier work.
- .
- A "covered work" means either the unmodified Program or a work based
- on the Program.
- .
- To "propagate" a work means to do anything with it that, without
- permission, would make you directly or secondarily liable for
- infringement under applicable copyright law, except executing it on a
- computer or modifying a private copy. Propagation includes copying,
- distribution (with or without modification), making available to the
- public, and in some countries other activities as well.
- .
- To "convey" a work means any kind of propagation that enables other
- parties to make or receive copies. Mere interaction with a user through
- a computer network, with no transfer of a copy, is not conveying.
- .
- An interactive user interface displays "Appropriate Legal Notices"
- to the extent that it includes a convenient and prominently visible
- feature that (1) displays an appropriate copyright notice, and (2)
- tells the user that there is no warranty for the work (except to the
- extent that warranties are provided), that licensees may convey the
- work under this License, and how to view a copy of this License. If
- the interface presents a list of user commands or options, such as a
- menu, a prominent item in the list meets this criterion.
- .
- 1. Source Code.
- .
- The "source code" for a work means the preferred form of the work
- for making modifications to it. "Object code" means any non-source
- form of a work.
- .
- A "Standard Interface" means an interface that either is an official
- standard defined by a recognized standards body, or, in the case of
- interfaces specified for a particular programming language, one that
- is widely used among developers working in that language.
- .
- The "System Libraries" of an executable work include anything, other
- than the work as a whole, that (a) is included in the normal form of
- packaging a Major Component, but which is not part of that Major
- Component, and (b) serves only to enable use of the work with that
- Major Component, or to implement a Standard Interface for which an
- implementation is available to the public in source code form. A
- "Major Component", in this context, means a major essential component
- (kernel, window system, and so on) of the specific operating system
- (if any) on which the executable work runs, or a compiler used to
- produce the work, or an object code interpreter used to run it.
- .
- The "Corresponding Source" for a work in object code form means all
- the source code needed to generate, install, and (for an executable
- work) run the object code and to modify the work, including scripts to
- control those activities. However, it does not include the work's
- System Libraries, or general-purpose tools or generally available free
- programs which are used unmodified in performing those activities but
- which are not part of the work. For example, Corresponding Source
- includes interface definition files associated with source files for
- the work, and the source code for shared libraries and dynamically
- linked subprograms that the work is specifically designed to require,
- such as by intimate data communication or control flow between those
- subprograms and other parts of the work.
- .
- The Corresponding Source need not include anything that users
- can regenerate automatically from other parts of the Corresponding
- Source.
- .
- The Corresponding Source for a work in source code form is that
- same work.
- .
- 2. Basic Permissions.
- .
- All rights granted under this License are granted for the term of
- copyright on the Program, and are irrevocable provided the stated
- conditions are met. This License explicitly affirms your unlimited
- permission to run the unmodified Program. The output from running a
- covered work is covered by this License only if the output, given its
- content, constitutes a covered work. This License acknowledges your
- rights of fair use or other equivalent, as provided by copyright law.
- .
- You may make, run and propagate covered works that you do not
- convey, without conditions so long as your license otherwise remains
- in force. You may convey covered works to others for the sole purpose
- of having them make modifications exclusively for you, or provide you
- with facilities for running those works, provided that you comply with
- the terms of this License in conveying all material for which you do
- not control copyright. Those thus making or running the covered works
- for you must do so exclusively on your behalf, under your direction
- and control, on terms that prohibit them from making any copies of
- your copyrighted material outside their relationship with you.
- .
- Conveying under any other circumstances is permitted solely under
- the conditions stated below. Sublicensing is not allowed; section 10
- makes it unnecessary.
- .
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
- .
- No covered work shall be deemed part of an effective technological
- measure under any applicable law fulfilling obligations under article
- 11 of the WIPO copyright treaty adopted on 20 December 1996, or
- similar laws prohibiting or restricting circumvention of such
- measures.
- .
- When you convey a covered work, you waive any legal power to forbid
- circumvention of technological measures to the extent such circumvention
- is effected by exercising rights under this License with respect to
- the covered work, and you disclaim any intention to limit operation or
- modification of the work as a means of enforcing, against the work's
- users, your or third parties' legal rights to forbid circumvention of
- technological measures.
- .
- 4. Conveying Verbatim Copies.
- .
- You may convey verbatim copies of the Program's source code as you
- receive it, in any medium, provided that you conspicuously and
- appropriately publish on each copy an appropriate copyright notice;
- keep intact all notices stating that this License and any
- non-permissive terms added in accord with section 7 apply to the code;
- keep intact all notices of the absence of any warranty; and give all
- recipients a copy of this License along with the Program.
- .
- You may charge any price or no price for each copy that you convey,
- and you may offer support or warranty protection for a fee.
- .
- 5. Conveying Modified Source Versions.
- .
- You may convey a work based on the Program, or the modifications to
- produce it from the Program, in the form of source code under the
- terms of section 4, provided that you also meet all of these conditions:
- .
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
- .
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
- .
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
- .
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
- .
- A compilation of a covered work with other separate and independent
- works, which are not by their nature extensions of the covered work,
- and which are not combined with it such as to form a larger program,
- in or on a volume of a storage or distribution medium, is called an
- "aggregate" if the compilation and its resulting copyright are not
- used to limit the access or legal rights of the compilation's users
- beyond what the individual works permit. Inclusion of a covered work
- in an aggregate does not cause this License to apply to the other
- parts of the aggregate.
- .
- 6. Conveying Non-Source Forms.
- .
- You may convey a covered work in object code form under the terms
- of sections 4 and 5, provided that you also convey the
- machine-readable Corresponding Source under the terms of this License,
- in one of these ways:
- .
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
- .
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
- .
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
- .
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
- .
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
- .
- A separable portion of the object code, whose source code is excluded
- from the Corresponding Source as a System Library, need not be
- included in conveying the object code work.
- .
- A "User Product" is either (1) a "consumer product", which means any
- tangible personal property which is normally used for personal, family,
- or household purposes, or (2) anything designed or sold for incorporation
- into a dwelling. In determining whether a product is a consumer product,
- doubtful cases shall be resolved in favor of coverage. For a particular
- product received by a particular user, "normally used" refers to a
- typical or common use of that class of product, regardless of the status
- of the particular user or of the way in which the particular user
- actually uses, or expects or is expected to use, the product. A product
- is a consumer product regardless of whether the product has substantial
- commercial, industrial or non-consumer uses, unless such uses represent
- the only significant mode of use of the product.
- .
- "Installation Information" for a User Product means any methods,
- procedures, authorization keys, or other information required to install
- and execute modified versions of a covered work in that User Product from
- a modified version of its Corresponding Source. The information must
- suffice to ensure that the continued functioning of the modified object
- code is in no case prevented or interfered with solely because
- modification has been made.
- .
- If you convey an object code work under this section in, or with, or
- specifically for use in, a User Product, and the conveying occurs as
- part of a transaction in which the right of possession and use of the
- User Product is transferred to the recipient in perpetuity or for a
- fixed term (regardless of how the transaction is characterized), the
- Corresponding Source conveyed under this section must be accompanied
- by the Installation Information. But this requirement does not apply
- if neither you nor any third party retains the ability to install
- modified object code on the User Product (for example, the work has
- been installed in ROM).
- .
- The requirement to provide Installation Information does not include a
- requirement to continue to provide support service, warranty, or updates
- for a work that has been modified or installed by the recipient, or for
- the User Product in which it has been modified or installed. Access to a
- network may be denied when the modification itself materially and
- adversely affects the operation of the network or violates the rules and
- protocols for communication across the network.
- .
- Corresponding Source conveyed, and Installation Information provided,
- in accord with this section must be in a format that is publicly
- documented (and with an implementation available to the public in
- source code form), and must require no special password or key for
- unpacking, reading or copying.
- .
- 7. Additional Terms.
- .
- "Additional permissions" are terms that supplement the terms of this
- License by making exceptions from one or more of its conditions.
- Additional permissions that are applicable to the entire Program shall
- be treated as though they were included in this License, to the extent
- that they are valid under applicable law. If additional permissions
- apply only to part of the Program, that part may be used separately
- under those permissions, but the entire Program remains governed by
- this License without regard to the additional permissions.
- .
- When you convey a copy of a covered work, you may at your option
- remove any additional permissions from that copy, or from any part of
- it. (Additional permissions may be written to require their own
- removal in certain cases when you modify the work.) You may place
- additional permissions on material, added by you to a covered work,
- for which you have or can give appropriate copyright permission.
- .
- Notwithstanding any other provision of this License, for material you
- add to a covered work, you may (if authorized by the copyright holders of
- that material) supplement the terms of this License with terms:
- .
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
- .
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
- .
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
- .
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
- .
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
- .
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
- .
- All other non-permissive additional terms are considered "further
- restrictions" within the meaning of section 10. If the Program as you
- received it, or any part of it, contains a notice stating that it is
- governed by this License along with a term that is a further
- restriction, you may remove that term. If a license document contains
- a further restriction but permits relicensing or conveying under this
- License, you may add to a covered work material governed by the terms
- of that license document, provided that the further restriction does
- not survive such relicensing or conveying.
- .
- If you add terms to a covered work in accord with this section, you
- must place, in the relevant source files, a statement of the
- additional terms that apply to those files, or a notice indicating
- where to find the applicable terms.
- .
- Additional terms, permissive or non-permissive, may be stated in the
- form of a separately written license, or stated as exceptions;
- the above requirements apply either way.
- .
- 8. Termination.
- .
- You may not propagate or modify a covered work except as expressly
- provided under this License. Any attempt otherwise to propagate or
- modify it is void, and will automatically terminate your rights under
- this License (including any patent licenses granted under the third
- paragraph of section 11).
- .
- However, if you cease all violation of this License, then your
- license from a particular copyright holder is reinstated (a)
- provisionally, unless and until the copyright holder explicitly and
- finally terminates your license, and (b) permanently, if the copyright
- holder fails to notify you of the violation by some reasonable means
- prior to 60 days after the cessation.
- .
- Moreover, your license from a particular copyright holder is
- reinstated permanently if the copyright holder notifies you of the
- violation by some reasonable means, this is the first time you have
- received notice of violation of this License (for any work) from that
- copyright holder, and you cure the violation prior to 30 days after
- your receipt of the notice.
- .
- Termination of your rights under this section does not terminate the
- licenses of parties who have received copies or rights from you under
- this License. If your rights have been terminated and not permanently
- reinstated, you do not qualify to receive new licenses for the same
- material under section 10.
- .
- 9. Acceptance Not Required for Having Copies.
- .
- You are not required to accept this License in order to receive or
- run a copy of the Program. Ancillary propagation of a covered work
- occurring solely as a consequence of using peer-to-peer transmission
- to receive a copy likewise does not require acceptance. However,
- nothing other than this License grants you permission to propagate or
- modify any covered work. These actions infringe copyright if you do
- not accept this License. Therefore, by modifying or propagating a
- covered work, you indicate your acceptance of this License to do so.
- .
- 10. Automatic Licensing of Downstream Recipients.
- .
- Each time you convey a covered work, the recipient automatically
- receives a license from the original licensors, to run, modify and
- propagate that work, subject to this License. You are not responsible
- for enforcing compliance by third parties with this License.
- .
- An "entity transaction" is a transaction transferring control of an
- organization, or substantially all assets of one, or subdividing an
- organization, or merging organizations. If propagation of a covered
- work results from an entity transaction, each party to that
- transaction who receives a copy of the work also receives whatever
- licenses to the work the party's predecessor in interest had or could
- give under the previous paragraph, plus a right to possession of the
- Corresponding Source of the work from the predecessor in interest, if
- the predecessor has it or can get it with reasonable efforts.
- .
- You may not impose any further restrictions on the exercise of the
- rights granted or affirmed under this License. For example, you may
- not impose a license fee, royalty, or other charge for exercise of
- rights granted under this License, and you may not initiate litigation
- (including a cross-claim or counterclaim in a lawsuit) alleging that
- any patent claim is infringed by making, using, selling, offering for
- sale, or importing the Program or any portion of it.
- .
- 11. Patents.
- .
- A "contributor" is a copyright holder who authorizes use under this
- License of the Program or a work on which the Program is based. The
- work thus licensed is called the contributor's "contributor version".
- .
- A contributor's "essential patent claims" are all patent claims
- owned or controlled by the contributor, whether already acquired or
- hereafter acquired, that would be infringed by some manner, permitted
- by this License, of making, using, or selling its contributor version,
- but do not include claims that would be infringed only as a
- consequence of further modification of the contributor version. For
- purposes of this definition, "control" includes the right to grant
- patent sublicenses in a manner consistent with the requirements of
- this License.
- .
- Each contributor grants you a non-exclusive, worldwide, royalty-free
- patent license under the contributor's essential patent claims, to
- make, use, sell, offer for sale, import and otherwise run, modify and
- propagate the contents of its contributor version.
- .
- In the following three paragraphs, a "patent license" is any express
- agreement or commitment, however denominated, not to enforce a patent
- (such as an express permission to practice a patent or covenant not to
- sue for patent infringement). To "grant" such a patent license to a
- party means to make such an agreement or commitment not to enforce a
- patent against the party.
- .
- If you convey a covered work, knowingly relying on a patent license,
- and the Corresponding Source of the work is not available for anyone
- to copy, free of charge and under the terms of this License, through a
- publicly available network server or other readily accessible means,
- then you must either (1) cause the Corresponding Source to be so
- available, or (2) arrange to deprive yourself of the benefit of the
- patent license for this particular work, or (3) arrange, in a manner
- consistent with the requirements of this License, to extend the patent
- license to downstream recipients. "Knowingly relying" means you have
- actual knowledge that, but for the patent license, your conveying the
- covered work in a country, or your recipient's use of the covered work
- in a country, would infringe one or more identifiable patents in that
- country that you have reason to believe are valid.
- .
- If, pursuant to or in connection with a single transaction or
- arrangement, you convey, or propagate by procuring conveyance of, a
- covered work, and grant a patent license to some of the parties
- receiving the covered work authorizing them to use, propagate, modify
- or convey a specific copy of the covered work, then the patent license
- you grant is automatically extended to all recipients of the covered
- work and works based on it.
- .
- A patent license is "discriminatory" if it does not include within
- the scope of its coverage, prohibits the exercise of, or is
- conditioned on the non-exercise of one or more of the rights that are
- specifically granted under this License. You may not convey a covered
- work if you are a party to an arrangement with a third party that is
- in the business of distributing software, under which you make payment
- to the third party based on the extent of your activity of conveying
- the work, and under which the third party grants, to any of the
- parties who would receive the covered work from you, a discriminatory
- patent license (a) in connection with copies of the covered work
- conveyed by you (or copies made from those copies), or (b) primarily
- for and in connection with specific products or compilations that
- contain the covered work, unless you entered into that arrangement,
- or that patent license was granted, prior to 28 March 2007.
- .
- Nothing in this License shall be construed as excluding or limiting
- any implied license or other defenses to infringement that may
- otherwise be available to you under applicable patent law.
- .
- 12. No Surrender of Others' Freedom.
- .
- If conditions are imposed on you (whether by court order, agreement or
- otherwise) that contradict the conditions of this License, they do not
- excuse you from the conditions of this License. If you cannot convey a
- covered work so as to satisfy simultaneously your obligations under this
- License and any other pertinent obligations, then as a consequence you may
- not convey it at all. For example, if you agree to terms that obligate you
- to collect a royalty for further conveying from those to whom you convey
- the Program, the only way you could satisfy both those terms and this
- License would be to refrain entirely from conveying the Program.
- .
- 13. Remote Network Interaction; Use with the GNU General Public License.
- .
- Notwithstanding any other provision of this License, if you modify the
- Program, your modified version must prominently offer all users
- interacting with it remotely through a computer network (if your version
- supports such interaction) an opportunity to receive the Corresponding
- Source of your version by providing access to the Corresponding Source
- from a network server at no charge, through some standard or customary
- means of facilitating copying of software. This Corresponding Source
- shall include the Corresponding Source for any work covered by version 3
- of the GNU General Public License that is incorporated pursuant to the
- following paragraph.
- .
- Notwithstanding any other provision of this License, you have
- permission to link or combine any covered work with a work licensed
- under version 3 of the GNU General Public License into a single
- combined work, and to convey the resulting work. The terms of this
- License will continue to apply to the part which is the covered work,
- but the work with which it is combined will remain governed by version
- 3 of the GNU General Public License.
- .
- 14. Revised Versions of this License.
- .
- The Free Software Foundation may publish revised and/or new versions of
- the GNU Affero General Public License from time to time. Such new versions
- will be similar in spirit to the present version, but may differ in detail to
- address new problems or concerns.
- .
- Each version is given a distinguishing version number. If the
- Program specifies that a certain numbered version of the GNU Affero General
- Public License "or any later version" applies to it, you have the
- option of following the terms and conditions either of that numbered
- version or of any later version published by the Free Software
- Foundation. If the Program does not specify a version number of the
- GNU Affero General Public License, you may choose any version ever published
- by the Free Software Foundation.
- .
- If the Program specifies that a proxy can decide which future
- versions of the GNU Affero General Public License can be used, that proxy's
- public statement of acceptance of a version permanently authorizes you
- to choose that version for the Program.
- .
- Later license versions may give you additional or different
- permissions. However, no additional obligations are imposed on any
- author or copyright holder as a result of your choosing to follow a
- later version.
- .
- 15. Disclaimer of Warranty.
- .
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
- APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
- HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
- OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
- IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
- ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
- .
- 16. Limitation of Liability.
- .
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
- WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
- THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
- GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
- USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
- DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
- PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
- EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGES.
- .
- 17. Interpretation of Sections 15 and 16.
- .
- If the disclaimer of warranty and limitation of liability provided
- above cannot be given local legal effect according to their terms,
- reviewing courts shall apply local law that most closely approximates
- an absolute waiver of all civil liability in connection with the
- Program, unless a warranty or assumption of liability accompanies a
- copy of the Program in return for a fee.
- .
- END OF TERMS AND CONDITIONS
- .
- How to Apply These Terms to Your New Programs
- .
- If you develop a new program, and you want it to be of the greatest
- possible use to the public, the best way to achieve this is to make it
- free software which everyone can redistribute and change under these terms.
- .
- To do so, attach the following notices to the program. It is safest
- to attach them to the start of each source file to most effectively
- state the exclusion of warranty; and each file should have at least
- the "copyright" line and a pointer to where the full notice is found.
- .
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
- .
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
- .
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
- .
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
- .
- Also add information on how to contact you by electronic and paper mail.
- .
- If your software can interact with users remotely through a computer
- network, you should also make sure that it provides a way for users to
- get its source. For example, if your program is a web application, its
- interface could display a "Source" link that leads users to an archive
- of the code. There are many ways you could offer source, and different
- solutions will be better for different programs; see section 13 for the
- specific requirements.
- .
- You should also get your employer (if you work as a programmer) or school,
- if any, to sign a "copyright disclaimer" for the program, if necessary.
- For more information on this, and how to apply and follow the GNU AGPL, see
- <http://www.gnu.org/licenses/>.
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/assistant.html b/debian/git-annex/usr/share/doc/git-annex/html/assistant.html
deleted file mode 100644
index 341c9e5..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/assistant.html
+++ /dev/null
@@ -1,211 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>assistant</title>
-
-<link rel="stylesheet" href="style.css" type="text/css" />
-
-<link rel="stylesheet" href="local.css" type="text/css" />
-
-
-
-
-
-
-</head>
-<body>
-
-<div class="page">
-
-<div class="pageheader">
-<div class="header">
-<span>
-<span class="parentlinks">
-
-<a href="./index.html">git-annex</a>/
-
-</span>
-<span class="title">
-assistant
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-
-</div>
-
-
-<div class="sidebar">
-<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>
-
-<ul>
-<li><a href="./install.html">install</a></li>
-<li><span class="selflink">assistant</span></li>
-<li><a href="./walkthrough.html">walkthrough</a></li>
-<li><a href="./tips.html">tips</a></li>
-<li><span class="createlink">bugs</span></li>
-<li><span class="createlink">todo</span></li>
-<li><span class="createlink">forum</span></li>
-<li><a href="./comments.html">comments</a></li>
-<li><a href="./contact.html">contact</a></li>
-<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>
-</ul>
-
-
-</div>
-
-
-<div id="pagebody">
-
-<div id="content">
-<p>The git-annex assistant creates a folder on each of your computers,
-removable drives, and cloud services, which
-it keeps synchronised, so its contents are the same everywhere.
-It's very easy to use, and has all the power of git and git-annex.</p>
-
-<h2>installation</h2>
-
-<p>The git-annex assistant comes as part of git-annex, starting with version
-3.20120924. See <a href="./install.html">install</a> to get it installed.</p>
-
-<p>Note that the git-annex assistant is still beta quality code. See
-the <a href="./assistant/release_notes.html">release notes</a> for known infelicities and upgrade instructions.</p>
-
-<h2>intro screencast</h2>
-
-<p><video controls width="400">
-<source src="http://downloads.kitenet.net/videos/git-annex/git-annex-assistant-intro.ogv">
-</video><br>
-A <a href="http://downloads.kitenet.net/videos/git-annex/git-annex-assistant-intro.ogv">8 minute screencast</a>
-introducing the <span class="selflink">git-annex assistant</span></a>.</p>
-
-
-
-
-<h2>documentation</h2>
-
-<ul>
-<li><a href="./assistant/quickstart.html">Basic usage</a></li>
-<li>Want to make two nearby computers share the same synchronised folder?<br/>
-Follow the <a href="./assistant/local_pairing_walkthrough.html">local pairing walkthrough</a>.</li>
-<li>Or perhaps you want to share files between computers in different
-locations, like home and work?<br/>
-Follow the <a href="./assistant/remote_sharing_walkthrough.html">remote sharing walkthrough</a>.</li>
-<li>Want to share a synchronised folder with a friend?<br/>
-Follow the <a href="./assistant/share_with_a_friend_walkthrough.html">share with a friend walkthrough</a>.</li>
-<li>Want to archive data to a drive or the cloud?<br/>
-Follow the <a href="./assistant/archival_walkthrough.html">archival walkthrough</a>.</li>
-</ul>
-
-
-<h2>colophon</h2>
-
-<p>The git-annex assistant is being
-<a href="http://www.kickstarter.com/projects/joeyh/git-annex-assistant-like-dropbox-but-with-your-own/">crowd funded on
-Kickstarter</a>.
-<a href="./assistant/thanks.html">Thanks</a> to all my backers.</p>
-
-<p>I blog about my work on the git-annex assistant on a daily basis
-in <span class="createlink">this blog</span>. Follow along!</p>
-
-<p>See also: The <a href="./design/assistant.html">design</a> pages.</p>
-
-</div>
-
-
-
-<div id="comments">
-
-
-
-
-<div class="addcomment">Comments on this page are closed.</div>
-
-</div>
-
-
-
-</div>
-
-<div id="footer" class="pagefooter">
-
-<div id="pageinfo">
-
-
-
-
-
-
-<div id="backlinks">
-Links:
-
-<a href="./design.html">design</a>
-
-<a href="./design/assistant.html">design/assistant</a>
-
-<a href="./direct_mode.html">direct mode</a>
-
-<a href="./install/OSX.html">install/OSX</a>
-
-<a href="./install/fromscratch.html">install/fromscratch</a>
-
-<a href="./not.html">not</a>
-
-<a href="./preferred_content.html">preferred content</a>
-
-<a href="./related_software.html">related software</a>
-
-<a href="./sidebar.html">sidebar</a>
-
-<a href="./special_remotes/xmpp.html">special remotes/xmpp</a>
-
-
-<span class="popup">...
-<span class="balloon">
-
-<a href="./summary.html">summary</a>
-
-<a href="./sync/comment_4_cf29326408e62575085d1f980087c923.html">sync/comment 4 cf29326408e62575085d1f980087c923</a>
-
-<a href="./tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant.html">tips/replacing Sparkleshare or dvcs-autosync with the assistant</a>
-
-<a href="./videos/git-annex_assistant_archiving.html">videos/git-annex assistant archiving</a>
-
-<a href="./videos/git-annex_assistant_introduction.html">videos/git-annex assistant introduction</a>
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-<div class="pagedate">
-Last edited <span class="date">Tue Apr 2 17:32:07 2013</span>
-<!-- Created <span class="date">Tue Apr 2 17:32:07 2013</span> -->
-</div>
-
-</div>
-
-
-<!-- from git-annex -->
-</div>
-
-</div>
-
-</body>
-</html>
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/assistant/addsshserver.png b/debian/git-annex/usr/share/doc/git-annex/html/assistant/addsshserver.png
deleted file mode 100644
index 80f5d56..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/assistant/addsshserver.png
+++ /dev/null
Binary files differ
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/assistant/buddylist.png b/debian/git-annex/usr/share/doc/git-annex/html/assistant/buddylist.png
deleted file mode 100644
index 40b5a92..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/assistant/buddylist.png
+++ /dev/null
Binary files differ
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/assistant/cloudnudge.png b/debian/git-annex/usr/share/doc/git-annex/html/assistant/cloudnudge.png
deleted file mode 100644
index b6f9a65..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/assistant/cloudnudge.png
+++ /dev/null
Binary files differ
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/assistant/combinerepos.png b/debian/git-annex/usr/share/doc/git-annex/html/assistant/combinerepos.png
deleted file mode 100644
index 7beea71..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/assistant/combinerepos.png
+++ /dev/null
Binary files differ
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/assistant/controlmenu.png b/debian/git-annex/usr/share/doc/git-annex/html/assistant/controlmenu.png
deleted file mode 100644
index c1dac19..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/assistant/controlmenu.png
+++ /dev/null
Binary files differ
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/assistant/crashrecovery.png b/debian/git-annex/usr/share/doc/git-annex/html/assistant/crashrecovery.png
deleted file mode 100644
index fce3805..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/assistant/crashrecovery.png
+++ /dev/null
Binary files differ
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/assistant/dashboard.png b/debian/git-annex/usr/share/doc/git-annex/html/assistant/dashboard.png
deleted file mode 100644
index c71558d..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/assistant/dashboard.png
+++ /dev/null
Binary files differ
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/assistant/example.png b/debian/git-annex/usr/share/doc/git-annex/html/assistant/example.png
deleted file mode 100644
index bfcb9af..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/assistant/example.png
+++ /dev/null
Binary files differ
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/assistant/logs.png b/debian/git-annex/usr/share/doc/git-annex/html/assistant/logs.png
deleted file mode 100644
index 8e9e5b1..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/assistant/logs.png
+++ /dev/null
Binary files differ
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/assistant/makerepo.png b/debian/git-annex/usr/share/doc/git-annex/html/assistant/makerepo.png
deleted file mode 100644
index e8f1b26..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/assistant/makerepo.png
+++ /dev/null
Binary files differ
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/assistant/menu.png b/debian/git-annex/usr/share/doc/git-annex/html/assistant/menu.png
deleted file mode 100644
index 29a7c9d..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/assistant/menu.png
+++ /dev/null
Binary files differ
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/assistant/osx-app.png b/debian/git-annex/usr/share/doc/git-annex/html/assistant/osx-app.png
deleted file mode 100644
index 386fb83..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/assistant/osx-app.png
+++ /dev/null
Binary files differ
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/assistant/preferences.png b/debian/git-annex/usr/share/doc/git-annex/html/assistant/preferences.png
deleted file mode 100644
index 74fb814..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/assistant/preferences.png
+++ /dev/null
Binary files differ
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/assistant/quickstart.html b/debian/git-annex/usr/share/doc/git-annex/html/assistant/quickstart.html
deleted file mode 100644
index 890be8b..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/assistant/quickstart.html
+++ /dev/null
@@ -1,158 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>quickstart</title>
-
-<link rel="stylesheet" href="../style.css" type="text/css" />
-
-<link rel="stylesheet" href="../local.css" type="text/css" />
-
-
-
-
-
-
-</head>
-<body>
-
-<div class="page">
-
-<div class="pageheader">
-<div class="header">
-<span>
-<span class="parentlinks">
-
-<a href="../index.html">git-annex</a>/
-
-<a href="../assistant.html">assistant</a>/
-
-</span>
-<span class="title">
-quickstart
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-
-</div>
-
-
-<div class="sidebar">
-<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>
-
-<ul>
-<li><a href="../install.html">install</a></li>
-<li><a href="../assistant.html">assistant</a></li>
-<li><a href="../walkthrough.html">walkthrough</a></li>
-<li><a href="../tips.html">tips</a></li>
-<li><span class="createlink">bugs</span></li>
-<li><span class="createlink">todo</span></li>
-<li><span class="createlink">forum</span></li>
-<li><a href="../comments.html">comments</a></li>
-<li><a href="../contact.html">contact</a></li>
-<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>
-</ul>
-
-
-</div>
-
-
-<div id="pagebody">
-
-<div id="content">
-<h2>first run</h2>
-
-<p>To get started with the git-annex assistant, just pick it from
-your system's list of applications.</p>
-
-<p><a href="./menu.png"><img src="./menu.png" width="385" height="307" class="img" /></a>
-<a href="./osx-app.png"><img src="./osx-app.png" width="87" height="98" class="img" /></a></p>
-
-<p>It'll prompt you to set up a folder:</p>
-
-<p><a href="./makerepo.png"><img src="./makerepo.png" width="588" height="476" class="img" /></a></p>
-
-<p>Then any changes you make to its folder will automatically be committed to
-git, and synced to repositories on other computers. You can use the
-interface to add repositories and control the git-annex assistant.</p>
-
-<p><a href="./running.png"><img src="./running.png" width="614" height="366" class="img" /></a></p>
-
-<h2>starting on boot</h2>
-
-<p>The git-annex assistant will automatically be started when you log in to
-desktop environments like Mac OS X, Gnome, XFCE, and KDE, and the menu item
-shown above can be used to open the webapp. On other systems, you may need
-to start it by hand.</p>
-
-<p>To start the webapp, run <code>git annex webapp</code> at the command line.</p>
-
-<p>To start the assistant without opening the webapp,
-you can run the command "git annex assistant --autostart". This is a
-good thing to configure your system to run automatically when you log in.</p>
-
-</div>
-
-
-
-<div id="comments">
-
-
-
-
-<div class="addcomment">Comments on this page are closed.</div>
-
-</div>
-
-
-
-</div>
-
-<div id="footer" class="pagefooter">
-
-<div id="pageinfo">
-
-
-
-
-
-
-<div id="backlinks">
-Links:
-
-<a href="../assistant.html">assistant</a>
-
-
-</div>
-
-
-
-
-
-
-<div class="pagedate">
-Last edited <span class="date">Tue Apr 2 17:32:07 2013</span>
-<!-- Created <span class="date">Tue Apr 2 17:32:07 2013</span> -->
-</div>
-
-</div>
-
-
-<!-- from git-annex -->
-</div>
-
-</div>
-
-</body>
-</html>
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/assistant/release_notes.html b/debian/git-annex/usr/share/doc/git-annex/html/assistant/release_notes.html
deleted file mode 100644
index 60a99cc..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/assistant/release_notes.html
+++ /dev/null
@@ -1,553 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>release notes</title>
-
-<link rel="stylesheet" href="../style.css" type="text/css" />
-
-<link rel="stylesheet" href="../local.css" type="text/css" />
-
-
-
-
-
-
-</head>
-<body>
-
-<div class="page">
-
-<div class="pageheader">
-<div class="header">
-<span>
-<span class="parentlinks">
-
-<a href="../index.html">git-annex</a>/
-
-<a href="../assistant.html">assistant</a>/
-
-</span>
-<span class="title">
-release notes
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-
-</div>
-
-
-<div class="sidebar">
-<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>
-
-<ul>
-<li><a href="../install.html">install</a></li>
-<li><a href="../assistant.html">assistant</a></li>
-<li><a href="../walkthrough.html">walkthrough</a></li>
-<li><a href="../tips.html">tips</a></li>
-<li><span class="createlink">bugs</span></li>
-<li><span class="createlink">todo</span></li>
-<li><span class="createlink">forum</span></li>
-<li><a href="../comments.html">comments</a></li>
-<li><a href="../contact.html">contact</a></li>
-<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>
-</ul>
-
-
-</div>
-
-
-<div id="pagebody">
-
-<div id="content">
-<h2>version 4.20130323, 4.20130405</h2>
-
-<p>These versions continue fixing bugs and adding features.</p>
-
-<h2>version 4.20130314</h2>
-
-<p>This version makes a great many improvements and bugfixes, and is
-a recommended upgrade.</p>
-
-<p>If you have already used the webapp to locally pair two computers,
-a bug caused the paired repository to not be given an appropriate cost.
-To fix this, go into the Repositories page in the webapp, and drag the
-repository for the locally paired computer to come before any repositories
-that it's more expensive to transfer data to.</p>
-
-<h2>version 4.20130227</h2>
-
-<p>This release fixes a bug with globbing that broke preferred content expressions.
-So, it is a recommended upgrade from the previous release, which introduced
-that bug.</p>
-
-<p>In this release, the assistant is fully working on Android, although
-it must be set up using the command line.</p>
-
-<p>Repositories can now be placed on filesystems that lack support for symbolic
-links; FAT support is complete.</p>
-
-<h2>version 3.20130216</h2>
-
-<p>This adds a port to Android. Only usable at the command line so far;
-beta qualitty.</p>
-
-<p>Also a bugfix release, and improves support for FAT.</p>
-
-<p>The following are known limitations of this release of the git-annex
-assistant:</p>
-
-<ul>
-<li>No Android app yet.</li>
-<li>On BSD operating systems (but not on OS X), the assistant uses kqueue to
-watch files. Kqueue has to open every directory it watches, so too many
-directories will run it out of the max number of open files (typically
-1024), and fail. See <span class="createlink">this bug</span>
-for a workaround.</li>
-<li>Also on systems with kqueue, modifications to existing files in direct
-mode will not be noticed.</li>
-</ul>
-
-
-<h2>version 3.20130107, 3.20130114, 3.20130124, 3.20130207</h2>
-
-<p>These are bugfix releases.</p>
-
-<h2>version 3.20130102</h2>
-
-<p>This release makes several significant improvements to the git-annex
-assistant, which is still in beta.</p>
-
-<p>The main improvement is direct mode. This allows you to directly edit files
-in the repository, and the assistant will automatically commit and sync
-your changes. Direct mode is the default for new repositories created
-by the assistant. To convert your existing repository to use direct mode,
-manually run <code>git annex direct</code> inside the repository.</p>
-
-<h2>version 3.20121211</h2>
-
-<p>This release of the git-annex assistant (which is still in beta)
-consists of mostly bugfixes, user interface improvements, and improvements
-to existing features.</p>
-
-<p>In general, anything you can configure with the assistant's web app
-will work. Some examples of use cases supported by this release include:</p>
-
-<ul>
-<li>Using Box.com's 5 gigabytes of free storage space as a cloud transfer
-point between between repositories that cannot directly contact
-one-another. (Many other cloud providers are also supported, from Rsync.net
-to Amazon S3, to your own ssh server.)</li>
-<li>Archiving or backing up files to Amazon Glacier. See <a href="./archival_walkthrough.html">archival walkthrough</a>.</li>
-<li><a href="./share_with_a_friend_walkthrough.html">Sharing repositories with friends</a>
-contacted through a Jabber server (such as Google Talk).</li>
-<li><a href="./local_pairing_walkthrough.html">Pairing</a> two computers that are on the same local
-network (or VPN) and automatically keeping the files in the annex in
-sync as changes are made to them.</li>
-<li>Cloning your repository to removable drives, USB keys, etc. The assistant
-will notice when the drive is mounted and keep it in sync.
-Such a drive can be stored as an offline backup, or transported between
-computers to keep them in sync.</li>
-</ul>
-
-
-<p>The following are known limitations of this release of the git-annex
-assistant:</p>
-
-<ul>
-<li>The Max OSX standalone app may not work on all versions of Max OSX.
-Please test!</li>
-<li>On Mac OSX and BSD operating systems, the assistant uses kqueue to watch
-files. Kqueue has to open every directory it watches, so too many
-directories will run it out of the max number of open files (typically
-1024), and fail. See <span class="createlink">Issue on OSX with some system limits</span>
-for a workaround.</li>
-</ul>
-
-
-<h2>version 3.20121126</h2>
-
-<p>This adds several features to the git-annex assistant, which is still in beta.</p>
-
-<p>In general, anything you can configure with the assistant's web app
-will work. Some examples of use cases supported by this release include:</p>
-
-<ul>
-<li>Using Box.com's 5 gigabytes of free storage space as a cloud transfer
-point between between repositories that cannot directly contact
-one-another. (Many other cloud providers are also supported, from Rsync.net
-to Amazon S3, to your own ssh server.)</li>
-<li>Archiving or backing up files to Amazon Glacier.</li>
-<li><a href="./share_with_a_friend_walkthrough.html">Sharing repositories with friends</a>
-contacted through a Jabber server (such as Google Talk).</li>
-<li><a href="./local_pairing_walkthrough.html">Pairing</a> two computers that are on the same local
-network (or VPN) and automatically keeping the files in the annex in
-sync as changes are made to them.</li>
-<li>Cloning your repository to removable drives, USB keys, etc. The assistant
-will notice when the drive is mounted and keep it in sync.
-Such a drive can be stored as an offline backup, or transported between
-computers to keep them in sync.</li>
-</ul>
-
-
-<p>The following are known limitations of this release of the git-annex
-assistant:</p>
-
-<ul>
-<li>The Max OSX standalone app does not work on all versions of Max OSX.</li>
-<li>On Mac OSX and BSD operating systems, the assistant uses kqueue to watch
-files. Kqueue has to open every directory it watches, so too many
-directories will run it out of the max number of open files (typically
-1024), and fail. See <span class="createlink">Issue on OSX with some system limits</span>
-for a workaround.</li>
-<li>Retrieval of files from Amazon Glacier is not fully automated; the
-assistant does not automatically retry in the 4 to 5 hours period
-when Glacier makes the files available.</li>
-</ul>
-
-
-<h2>version 3.20121112</h2>
-
-<p>This is a major upgrade of the git-annex assistant, which is still in beta.</p>
-
-<p>In general, anything you can configure with the assistant's web app
-will work. Some examples of use cases supported by this release include:</p>
-
-<ul>
-<li><a href="./share_with_a_friend_walkthrough.html">Sharing repositories with friends</a>
-contacted through a Jabber server (such as Google Talk).</li>
-<li>Setting up cloud repositories, that are used as backups, archives,
-or transfer points between repositories that cannot directly contact
-one-another.</li>
-<li><a href="./local_pairing_walkthrough.html">Pairing</a> two computers that are on the same local
-network (or VPN) and automatically keeping the files in the annex in
-sync as changes are made to them.</li>
-<li>Cloning your repository to removable drives, USB keys, etc. The assistant
-will notice when the drive is mounted and keep it in sync.
-Such a drive can be stored as an offline backup, or transported between
-computers to keep them in sync.</li>
-</ul>
-
-
-<p>The following upgrade notes apply if you're upgrading from a previous version:</p>
-
-<ul>
-<li>For best results, edit the configuration of repositories you set
-up with older versions, and place them in a repository group.
-This lets the assistant know how you want to use the repository; for backup,
-archival, as a transfer point for clients, etc. Go to Configuration -&gt;
-Manage Repositories, and click in the "configure" link to edit a repository's
-configuration.</li>
-<li>If you set up a cloud repository with an older version, and have multiple
-clients using it, you are recommended to configure an Jabber account,
-so that clients can use it to communicate when sending data to the
-cloud repository. Configure Jabber by opening the webapp, and going to
-Configuration -&gt; Configure jabber account</li>
-<li>When setting up local pairing, the assistant did not limit the paired
-computer to accessing a single git repository. This new version does,
-by setting GIT_ANNEX_SHELL_DIRECTORY in <code>~/.ssh/authorized_keys</code>.</li>
-</ul>
-
-
-<p>The following are known limitations of this release of the git-annex
-assistant:</p>
-
-<ul>
-<li>On Mac OSX and BSD operating systems, the assistant uses kqueue to watch
-files. Kqueue has to open every directory it watches, so too many
-directories will run it out of the max number of open files (typically
-1024), and fail. See <span class="createlink">Issue on OSX with some system limits</span>
-for a workaround.</li>
-</ul>
-
-
-<h2>version 3.20121009</h2>
-
-<p>This is a maintenance release of the git-annex assistant, which is still in
-beta.</p>
-
-<p>In general, anything you can configure with the assistant's web app
-will work. Some examples of use cases supported by this release include:</p>
-
-<ul>
-<li><a href="./local_pairing_walkthrough.html">Pairing</a> two computers that are on the same local
-network (or VPN) and automatically keeping the files in the annex in
-sync as changes are made to them.</li>
-<li>Cloning your repository to removable drives, USB keys, etc. The assistant
-will notice when the drive is mounted and keep it in sync.
-Such a drive can be stored as an offline backup, or transported between
-computers to keep them in sync.</li>
-<li>Cloning your repository to a remote server, running ssh, and uploading
-changes made to your files to the server. There is special support
-for using the rsync.net cloud provider this way, or any shell account
-on a typical unix server, such as a Linode VPS can be used.</li>
-</ul>
-
-
-<p>The following are known limitations of this release of the git-annex
-assistant:</p>
-
-<ul>
-<li>On Mac OSX and BSD operating systems, the assistant uses kqueue to watch
-files. Kqueue has to open every directory it watches, so too many
-directories will run it out of the max number of open files (typically
-1024), and fail. See <span class="createlink">Issue on OSX with some system limits</span>
-for a workaround.</li>
-<li>In order to ensure that all multiple repositories are kept in sync,
-each computer with a repository must be running the git-annex assistant.</li>
-<li>The assistant does not yet always manage to keep repositories in sync
-when some are hidden from others behind firewalls.</li>
-</ul>
-
-
-<h2>version 3.20120924</h2>
-
-<p>This is the first beta release of the git-annex assistant.</p>
-
-<p>In general, anything you can configure with the assistant's web app
-will work. Some examples of use cases supported by this release include:</p>
-
-<ul>
-<li><a href="./local_pairing_walkthrough.html">Pairing</a> two computers that are on the same local
-network (or VPN) and automatically keeping the files in the annex in
-sync as changes are made to them.</li>
-<li>Cloning your repository to removable drives, USB keys, etc. The assistant
-will notice when the drive is mounted and keep it in sync.
-Such a drive can be stored as an offline backup, or transported between
-computers to keep them in sync.</li>
-<li>Cloning your repository to a remote server, running ssh, and uploading
-changes made to your files to the server. There is special support
-for using the rsync.net cloud provider this way, or any shell account
-on a typical unix server, such as a Linode VPS can be used.</li>
-</ul>
-
-
-<p>The following are known limitations of this release of the git-annex
-assistant:</p>
-
-<ul>
-<li>On Mac OSX and BSD operating systems, the assistant uses kqueue to watch
-files. Kqueue has to open every directory it watches, so too many
-directories will run it out of the max number of open files (typically
-1024), and fail. See <span class="createlink">Issue on OSX with some system limits</span>
-for a workaround.</li>
-<li>In order to ensure that all multiple repositories are kept in sync,
-each computer with a repository must be running the git-annex assistant.</li>
-<li>The assistant does not yet always manage to keep repositories in sync
-when some are hidden from others behind firewalls.</li>
-<li>If a file is checked into git as a normal file and gets modified
-(or merged, etc), it will be converted into an annexed file. So you
-should not mix use of the assistant with normal git files in the same
-repository yet.</li>
-<li>If you <code>git annex unlock</code> a file, it will immediately be re-locked.
-See <span class="createlink">watcher commits unlocked files</span>.</li>
-</ul>
-
-
-</div>
-
-
-
-<div id="comments">
-<div class="feedlink">
-
-
-</div>
-<div class="comment" id="comment-750d9d9679548f9c107b86463ffc6c63">
-
-
-
-<div class="comment-subject">
-
-<a href="/assistant/release_notes.html#comment-750d9d9679548f9c107b86463ffc6c63">OSX 10.8&#x27;s gatekeeper does not like git-annex</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>Trying to run this release on OSX results in an error message from Gatekeeper:</p>
-
-<blockquote><p>"git-annex" can't be opened because it is from an unidentified developer.</p>
-
-<p>Your security preferences allow installation of only apps from the Mac App Store and identified developers.</p></blockquote>
-
-<p>It would be nice if the binary could be signed to make Gatekeeper happy. Until then a note in the installation instructions might be useful.</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="http://wiggy.net/">Wichert</a>
-</span>
-
-
-&mdash; <span class="date">Tue Nov 13 10:47:52 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-4ec347a82669fabb94e58d4b5c462884">
-
-
-
-<div class="comment-subject">
-
-<a href="/assistant/release_notes.html#comment-4ec347a82669fabb94e58d4b5c462884">git-annex not runnable on OSX 10.8</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>After telling Gatekeeper that I really want to run git-annex it still fails:</p>
-
-<p>[fog;~]-131&gt; open Applications/git-annex.app
-LSOpenURLsWithRole() failed with error -10810 for the file /Users/wichert/Applications/git-annex.app.</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="http://wiggy.net/">Wichert</a>
-</span>
-
-
-&mdash; <span class="date">Tue Nov 13 10:49:35 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-bf41641d0dfc2a217615673f62d1e10e">
-
-
-
-<div class="comment-subject">
-
-<a href="/assistant/release_notes.html#comment-bf41641d0dfc2a217615673f62d1e10e">comment 3</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>This has been previously reported: <span class="createlink">OSX git-annex.app error: LSOpenURLsWithRole&#40;&#41;</span></p>
-
-<p>No clue what that error is supposed to mean.</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="http://joeyh.name/">joeyh.name</a>
-</span>
-
-
-&mdash; <span class="date">Tue Nov 13 13:11:51 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-6cc0fc47b477d4906add9ddf5f983733">
-
-
-
-<div class="comment-subject">
-
-<a href="/assistant/release_notes.html#comment-6cc0fc47b477d4906add9ddf5f983733">comment 4</a>
-
-</div>
-
-<div class="inlinecontent">
-sadly i only have a 10.7 machine to create the builds, so I have no experience with 10.8. I haven't had a 10.6 machine in a while to create the builds. Anyone else want to work together in setting up another 10.6 or 10.8 builder for others?
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus">Jimmy</a>
-</span>
-
-
-&mdash; <span class="date">Fri Nov 16 09:02:40 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-
-
-
-
-<div class="addcomment">Comments on this page are closed.</div>
-
-</div>
-
-
-
-</div>
-
-<div id="footer" class="pagefooter">
-
-<div id="pageinfo">
-
-
-
-
-
-
-<div id="backlinks">
-Links:
-
-<a href="../assistant.html">assistant</a>
-
-
-</div>
-
-
-
-
-
-
-<div class="pagedate">
-Last edited <span class="date">Fri Apr 5 17:31:52 2013</span>
-<!-- Created <span class="date">Fri Apr 5 17:31:52 2013</span> -->
-</div>
-
-</div>
-
-
-<!-- from git-annex -->
-</div>
-
-</div>
-
-</body>
-</html>
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/assistant/repogroup.png b/debian/git-annex/usr/share/doc/git-annex/html/assistant/repogroup.png
deleted file mode 100644
index ac5aabd..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/assistant/repogroup.png
+++ /dev/null
Binary files differ
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/assistant/repogroups.png b/debian/git-annex/usr/share/doc/git-annex/html/assistant/repogroups.png
deleted file mode 100644
index 441a750..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/assistant/repogroups.png
+++ /dev/null
Binary files differ
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/assistant/repositories.png b/debian/git-annex/usr/share/doc/git-annex/html/assistant/repositories.png
deleted file mode 100644
index 2853683..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/assistant/repositories.png
+++ /dev/null
Binary files differ
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/assistant/rsync.net.png b/debian/git-annex/usr/share/doc/git-annex/html/assistant/rsync.net.png
deleted file mode 100644
index 0e09407..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/assistant/rsync.net.png
+++ /dev/null
Binary files differ
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/assistant/running.png b/debian/git-annex/usr/share/doc/git-annex/html/assistant/running.png
deleted file mode 100644
index 8c3b0ea..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/assistant/running.png
+++ /dev/null
Binary files differ
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/assistant/thanks.html b/debian/git-annex/usr/share/doc/git-annex/html/assistant/thanks.html
deleted file mode 100644
index 0fd971a..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/assistant/thanks.html
+++ /dev/null
@@ -1,379 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>thanks</title>
-
-<link rel="stylesheet" href="../style.css" type="text/css" />
-
-<link rel="stylesheet" href="../local.css" type="text/css" />
-
-
-
-
-
-
-</head>
-<body>
-
-<div class="page">
-
-<div class="pageheader">
-<div class="header">
-<span>
-<span class="parentlinks">
-
-<a href="../index.html">git-annex</a>/
-
-<a href="../assistant.html">assistant</a>/
-
-</span>
-<span class="title">
-thanks
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-
-</div>
-
-
-<div class="sidebar">
-<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>
-
-<ul>
-<li><a href="../install.html">install</a></li>
-<li><a href="../assistant.html">assistant</a></li>
-<li><a href="../walkthrough.html">walkthrough</a></li>
-<li><a href="../tips.html">tips</a></li>
-<li><span class="createlink">bugs</span></li>
-<li><span class="createlink">todo</span></li>
-<li><span class="createlink">forum</span></li>
-<li><a href="../comments.html">comments</a></li>
-<li><a href="../contact.html">contact</a></li>
-<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>
-</ul>
-
-
-</div>
-
-
-<div id="pagebody">
-
-<div id="content">
-<p>The development of the git-annex assistant was made possible by the
-generous donations of many people. I want to say "Thank You!" to each of
-you individually, but until I meet all 951 of you, this page will have to
-do. You have my most sincere thanks. --<span class="createlink">Joey</span></p>
-
-<p>(If I got your name wrong, or you don't want it publically posted here,
-email <a href="mailto:joey@kitenet.net">&#x6a;&#x6f;&#x65;&#x79;&#64;&#107;&#105;&#x74;&#x65;&#110;&#x65;&#116;&#x2e;&#110;&#101;&#116;</a>.)</p>
-
-<h2>Major Backers</h2>
-
-<p>These people are just inspiring in their enthusiasm and generosity to this
-project.</p>
-
-<ul>
-<li>Jason Scott</li>
-<li>strager</li>
-</ul>
-
-
-<h2>Beta Testers</h2>
-
-<p>Whole weeks of my time were made possible thanks to each of these
-people, and their testing is invaluable to the development of
-the git-annex assistant.</p>
-
-<ul>
-<li>Jimmy Tang</li>
-<li>David Pollak</li>
-<li>Pater</li>
-<li>Francois Marier</li>
-<li>Paul Sherwood</li>
-<li>Fred Epma</li>
-<li>Robert Ristroph</li>
-<li>Josh Triplett</li>
-<li>David Haslem</li>
-<li>AJ Ashton</li>
-<li>Svenne Krap</li>
-<li>Drew Hess</li>
-<li>Peter van Westen</li>
-</ul>
-
-
-<h2>Prioritizers</h2>
-
-<p>These forward-thinking people contributed generously just to help
-set my priorities in which parts of the git-annex assistant were most
-important to develop.</p>
-
-<p>Paul C. Bryan, Paul Tötterman, Don Marti, Dean Thompson, Djoume, David Johnston
-Asokan Pichai, Anders Østhus, Dominik Wagenknecht, Charlie Fox, Yazz D. Atlas,
-fenchel, Erik Penninga, Richard Hartmann, Graham, Stan Yamane, Ben Skelton,
-Ian McEwen, asc, Paul Tagliamonte, Sherif Abouseda, Igor Támara, Anne Wind,
-Mesar Hameed, Brandur K. Holm Petersen, Takahiro Inoue, Kai Hendry,
-Stephen Youndt, Lee Roberson, Ben Strawbridge, Andrew Greenberg, Alfred Adams
-Andrew, Aaron De Vries, Monti Knazze, Jorge Canseco, Hamish, Mark Eichin,
-Sherif Abouseda, Ben Strawbridge, chee rabbits, Pedro Côrte-Real</p>
-
-<p>And special thanks to Kevin McKenzie, who also gave me a login to a Mac OSX
-machine, which has proven invaluable, and Jimmy Tang who has helped
-with Mac OSX autobuilding and packaging.</p>
-
-<h2>Other Backers</h2>
-
-<p>Most of the success of the Kickstarter is thanks to these folks. Some of
-them spent significant amounts of money in the guise of getting some
-swag. For others, being listed here, and being crucial to making the
-git-annex assistant happen was reward enough. Large or small, these
-contributions are, literally, my bread and butter this year.</p>
-
-<p>Amitai Schlair, mvime, Romain Lenglet, James Petts, Jouni Uuksulainen,
-Wichert Akkerman, Robert Bellus, Kasper Souren, rob, Michiel Buddingh',
-Kevin, Rob Avina, Alon Levy, Vikash, Michael Alan Dorman, Harley Pig,
-Andreas Olsson, Pietpiet, Christine Spang, Liz Young, Oleg Kosorukov,
-Allard Hoeve, Valentin Haenel, Joost Baaij, Nathan Yergler, Nathan Howell,
-Frédéric Schütz, Matti Eskelinen, Neil McGovern, Lane Lillquist, db48x,
-Stuart Prescott, Mark Matienzo, KarlTheGood, leonm, Drew Slininger,
-Andreas Fuchs, Conrad Parker, Johannes Engelke, Battlegarden, Justin Kelly,
-Robin Wagner, Thad Ward, crenquis, Trudy Goold, Mike Cochrane, Adam Venturella,
-Russell Foo, furankupan, Giorgio Occhioni, andy, mind, Mike Linksvayer,
-Stefan Strahl, Jelmer Vernooij, Markus Fix, David Hicks, Justin Azoff,
-Iain Nicol, Bob Ippolito, Thomas Lundstrøm, Jason Mandel, federico2,
-Edd Cochran, Jose Ortega, Emmett Agnew, Rudy Garcia, Kodi, Nick Rusnov,
-Michael Rubin, Tom de Grunt, Richard Murray, Peter, Suzanne Pierce, Jared
-Marcotte, folk, Eamon, Jeff Richards, Leo Sutedja, dann frazier, Mikkel
-kristiansen, Matt Thomas, Kilian Evang, Gergely Risko, Kristian Rumberg,
-Peter Kropf, Mark Hepburn, greymont, D. Joe Anderson, Jeremy Zunker, ctebo,
-Manuel Roumain, Jason Walsh, np, Shawn, Johan Tibell, Branden Tyree, Dinyar
-Rabady, Andrew Mason, damond armstead, Ethan Aubin, TomTom Tommie, Jimmy
-Kaplowitz, Steven Zakulec, mike smith, Jacob Kirkwood, Mark Hymers, Nathan
-Collins, Asbjørn Sloth Tønnesen, Misty De Meo, James Shubin,
-Jim Paris, Adam Sjøgren, miniBill, Taneli, Kumar Appaiah, Greg Grossmeier,
-Sten Turpin, Otavio Salvador, Teemu Hukkanen, Brian Stengaard, bob walker,
-bibeneus, andrelo, Yaroslav Halchenko, hesfalling, Tommy L, jlargentaye,
-Serafeim Zanikolas, Don Armstrong, Chris Cormack, shayne.oneill, Radu
-Raduta, Josh S, Robin Sheat, Henrik Mygind, kodx, Christian, Geoff
-Crompton, Brian May, Olivier Berger, Filippo Gadotti, Daniel Curto-Millet,
-Eskild Hustvedt, Douglas Soares de Andrade, Tom L, Michael Nacos, Michaël
-P., William Roe, Joshua Honeycutt, Brian Kelly, Nathan Rasch, jorge, Martin
-Galese, alex cox, Avery Brooks, David Whittington, Dan Martinez, Forrest
-Sutton, Jouni K. Seppänen, Arnold Cano, Robert Beaty, Daniel, Kevin Savetz,
-Randy, Ernie Braganza, Aaron Haviland, Brian Brunswick, asmw, sean, Michael
-Williams, Alexander, Dougal Campbell, Robert Bacchas, Michael Lewis, Collin
-Price, Wes Frazier, Matt Wall, Brandon Barclay, Derek van Vliet, Martin
-DeMello, kitt hodsden, Stephen Kitt, Leif Bergman, Simon Lilburn, Michael
-Prokop, Christiaan Conover, Nick Coombe, Tim Dysinger, Brandon Robinson,
-Philip Newborough, keith, Mike Fullerton, Kyle, Phil Windley, Tyler Head,
-George V. Reilly, Matthew, Ali Gündüz, Vasyl Diakonov, Paolo Capriotti,
-allanfranta, Martin Haeberli, msingle, Vincent Sanders, Steven King, Dmitry
-Gribanov, Brandon High, Ben Hughes, Mike Dank, JohnE, Diggory Hardy,
-Michael Hanke, valhalla, Samuli Tuomola, Jeff Rau, Benjamin Lebsanft, John
-Drago, James, Aidan Cooper, rondie, Paul Kohler, Matthew Knights, Aaron
-Junod, Patrick R McDonald, Christopher Browne, Daniel Engel, John SJ
-Anderson, Peter Sarossy, Mike Prasad, Christoph Ender, Jan Dittberner,
-Zohar, Alexander Jelinek, stefan, Danny O'Brien, Matthew Thode, Nicole
-Aptekar, maurice gaston, Chris Adams, Mike Klemencic, Reedy, Subito, Tobias
-Gruetzmacher, Ole-Morten Duesund, André Koot, mp, gdop, Cole Scott, Blaker,
-Matt Sottile, W. Craig Trader, Louis-Philippe Dubrule, Brian Boucheron,
-Duncan Smith, Brenton Buchbach, Kyle Stevenson, Eliot Lash, Egon Elbre,
-Praveen, williamji, Thomas Schreiber, Neil Ford, Ryan Pratt, Joshua Brand,
-Peter Cox, Markus Engstrom, John Sutherland, Dean Bailey, Ed Summers,
-Hillel Arnold, David Fiander, Kurt Yoder, Trevor Muñoz, keri, Ivan
-Sergeyenko, Shad Bolling, Tal Kelrich, Steve Presley, gerald ocker, Essex
-Taylor, Josh Thomson, Trevor Bramble, Lance Higgins, Frank Motta, Dirk
-Kraft, soundray, Joe Haskins, nmjk, Apurva Desai, Colin Dean, docwhat,
-Joseph Costello, Jst, flamsmark, Alex Lang, Bill Traynor, Anthony David,
-Marc-André Lureau, AlNapp, Giovanni Moretti, John Lawrence, João Paulo
-Pizani Flor, Jim Ray, Gregory Thrush, Alistair McGann, Andrew Wied,
-Koutarou Furukawa, Xiscu Ignacio, Aaron Sachs, Matt, Quirijn, Chet
-Williams, Chris Gray, Bruce Segal, Tom Conder, Louis Tovar, Alex Duryee,
-booltox, d8uv, Decklin Foster, Rafael Cervantes, Micah R Ledbetter, Kevin
-Sjöberg, Johan Strombom, Zachary Cohen, Jason Lewis, Yves Bilgeri, Ville
-Aine, Mark Hurley, Marco Bonetti, Maximilian Haack, Hynek Schlawack,
-Michael Leinartas, Andreas Liebschner, Duotrig, Nat Fairbanks, David
-Deutsch, Colin Hayhurst, calca, Kyle Goodrick, Marc Bobillier, Robert
-Snook, James Kim, Olivier Serres, Jon Redfern, Itai Tavor, Michael
-Fladischer, Rob, Jan Schmid, Thomas H., Anders Söderbäck, Abhishek
-Dasgupta, Jeff Goeke-Smith, Tommy Thorn, bonuswavepilot, Philipp Edelmann,
-Nick, Alejandro Navarro Fulleda, Yann Lallemant, andrew brennan,
-Dave Allen Barker Jr, Fabian, Lukas Anzinger, Carl Witty, Andy Taylor,
-Andre Klärner, Andrew Chilton, Adam Gibbins, Alexander Wauck, Shane O'Dea,
-Paul Waite, Iain McLaren, Maggie Ellen Robin Hess, Willard Korfhage,
-Nicolas, Eric Nikolaisen, Magnus Enger, Philipp Kern, Andrew Alderwick,
-Raphael Wimmer, Benjamin Schötz, Ana Guerrero, Pete, Pieter van der Eems,
-Aaron Suggs, Fred Benenson, Cedric Howe, Lance Ivy, Tieg Zaharia, Kevin
-Cooney, Jon Williams, Anton Kudris, Roman Komarov, Brad Hilton, Rick Dakan,
-Adam Whitcomb, Paul Casagrande, Evgueni Baldin, Robert Sanders, Kagan
-Kayal, Dean Gardiner, micah altman, Cameron Banga, Ross Mcnairn, Oscar
-Vilaplana, Robin Graham, Dan Gervais, Jon Åslund, Ragan Webber, Noble Hays,
-stephen brown, Sean True, Maciek Swiech, faser, eikenberry, Kai Laborenz,
-Sergey Fedoseev, Chris Fournier, Svend Sorensen, Greg K, wojtek, Johan
-Ribenfors, Anton, Benjamin, Oleg Tsarev, PsychoHazard, John Cochrane,
-Kasper Lauritzen, Patrick Naish, Rob, Keith Nasman, zenmaster, David Royer,
-Max Woolf, Dan Gabber, martin rhoads, Martin Schmidinger, Paul
-Scott-Wilson, Tom Gromak, Andy Webster, Dale Webb, Jim Watson, Stephen
-Hansen, Mircea, Dan Goodenberger, Matthias Fink, Andy Gott, Daniel, Jai
-Nelson, Shrayas Rajagopal, Vladimir Rutsky, Alexander, Thorben Westerhuys,
-hiruki, Tao Neuendorffer Flaherty, Elline, Marco Hegenberg, robert, Balda,
-Brennen Bearnes, Richard Parkins, David Gwilliam, Mark Johnson, Jeff Eaton,
-Reddawn90, Heather Pusey, Chris Heinz, Colin, Phatsaphong Thadabusapa,
-valunthar, Michael Martinez, redlukas, Yury V. Zaytsev, Blake, Tobias
-"betabrain" A., Leon, sopyer, Steve Burnett, bessarabov, sarble, krsch.com,
-Jack Self, Jeff Welch, Sam Pettiford, Jimmy Stridh, Diego Barberá, David
-Steele, Oscar Ciudad, John Braman, Jacob, Nick Jenkins, Ben Sullivan, Brian
-Cleary, James Brosnahan, Darryn Ten, Alex Brem, Jonathan Hitchcock, Jan
-Schmidle, Wolfrzx99, Steve Pomeroy, Matthew Sitton, Finkregh, Derek Reeve,
-GDR!, Cory Chapman, Marc Olivier Chouinard, Andreas Ryland, Justin, Andreas
-Persenius, Games That Teach, Walter Somerville, Bill Haecker, Brandon
-Phenix, Justin Shultz, Colin Scroggins, Tim Goddard, Ben Margolin, Michael
-Martinez, David Hobbs, Andre Le, Jason Roberts, Bob Lopez, Gert Van Gool,
-Robert Carnel, Anders Lundqvist, Aniruddha Sathaye, Marco Gillies, Basti
-von Bejga, Esko Arajärvi, Dominik Deobald, Pavel Yudaev, Fionn Behrens,
-Davide Favargiotti, Perttu Luukko, Silvan Jegen, Marcelo Bittencourt,
-Leonard Peris, smercer, Alexandre Dupas, Solomon Matthews, Peter Hogg,
-Richard E. Varian, Ian Oswald, James W. Sarvey, Ed Grether, Frederic
-Savard, Sebastian Nerz, Hans-Chr. Jehg, Matija Nalis, Josh DiMauro, Jason
-Harris, Adam Byrtek, Tellef, Magnus, Bart Schuurmans, Giel van Schijndel,
-Ryan, kiodos, Richard 'maddog' Collins, PawZubr, Jason Gassel, Alex
-Boisvert, Richard Thompson, maddi bolton, csights, Aaron Bryson, Jason Chu,
-Maxime Côté, Kineteka Systems, Joe Cabezas, Mike Czepiel, Rami Nasra,
-Christian Simonsen, Wouter Beugelsdijk, Adam Gibson, Gal Buki, James
-Marble, Alan Chambers, Bernd Wiehle, Simon Korzun, Daniel Glassey, Eero af
-Heurlin, Mikael, Timo Engelhardt, Wesley Faulkner, Jay Wo, Mike Belle,
-David Fowlkes Jr., Karl-Heinz Strass, Ed Mullins, Sam Flint,
-Hendrica, Mark Emer Anderson, Joshua Cole, Jan Gondol, Henrik Lindhe,
-Albert Delgado, Patrick, Alexa Avellar, Chris, sebsn1349, Maxim Kachur,
-Andrew Marshall, Navjot Narula, Alwin Mathew, Christian Mangelsdorf, Avi
-Shevin, Kevin S., Guillermo Sanchez Estrada, Alex Krieger, Luca Meier, Will
-Jessop, Nick Ruest, Lani Aung, Ulf Benjaminsson, Rudi Engelbrecht, Miles
-Matton, Cpt_Threepwood, Adam Kuyper, reacocard, David Kilsheimer, Peter
-Olson, Bill Fischofer, Prashant Shah, Simon Bonnick, Alexander Grudtsov,
-Antoine Boegli, Richard Warren, Sebastian Rust, AlmostHuman, Timmy
-Crawford, PC, Marek Belski, pontus, Douglas S Butts, Eric Wallmander, Joe
-Pelar, VIjay, Trahloc, Vernon Vantucci, Matthew baya, Viktor Štujber,
-Stephen Akiki, Daniil Zamoldinov, Atley, Chris Thomson, Jacob Briggs, Falko
-Richter, Andy Schmitz, Sergi Sagas, Peder Refsnes, Jonatan, Ben, Bill
-Niblock, Agustin Acuna, Jeff Curl, Tim Humphrey, bib, James Zarbock,
-Lachlan Devantier, Michal Berg, Jeff Lucas, Sid Irish, Franklyn, Jared
-Dickson, Olli Jarva, Adam Gibson, Lukas Loesche, Jukka Määttä, Alexander
-Lin, Dao Tran, Kirk, briankb, Ryan Villasenor, Daniel Wong, barista, Tomas
-Jungwirth, Jesper Hansen, Nivin Singh, Alessandro Tieghi, Billy Roessler,
-Peter Fetterer, Pallav Laskar, jcherney, Tyler Wang, Steve, Gigahost, Beat
-Wolf, Hannibal Skorepa, aktiveradio, Mark Nunnikhoven, Bret Comnes, Alan
-Ruttenberg, Anthony DiSanti, Adam Warkiewicz, Brian Bowman, Jonathan, Mark
-Filley, Tobias Mohr, Christian St. Cyr, j. faceless user, Karl Miller,
-Thomas Taimre, Vikram, Jason Mountcastle, Jason, Paul Elliott, Alexander,
-Stephen Farmer, rayslava, Peter Leurs, Sky Kruse, JP Reeves, John J Schatz,
-Martin Sandmair, Will Thompson, John Hergenroeder, Thomas, Christophe
-Ponsart, Wolfdog, Eagertolearn, LukasM, Federico Hernandez, Vincent Bernat,
-Christian Schmidt, Cameron Colby Thomson, Josh Duff, James Brown, Theron
-Trowbridge, Falke, Don Meares, tauu, Greg Cornford, Max Fenton, Kenneth
-Reitz, Bruce Bensetler, Mark Booth, Herb Mann, Sindre Sorhus, Chris
-Knadler, Daniel Digerås, Derek, Sin Valentine, Ben Gamari, david
-lampenscherf, fardles, Richard Burdeniuk, Tobias Kienzler, Dawid Humbla,
-Bruno Barbaroxa, D Malt, krivar, James Valleroy, Peter, Tim Geddings,
-Matthias Holzinger, Hanen, Petr Vacek, Raymond, Griff Maloney, Andreas
-Helveg Rudolph, Nelson Blaha, Colonel Fubar, Skyjacker Captain Gavin
-Phoenix, shaun, Michael, Kari Salminen, Rodrigo Miranda, Alan Chan, Justin
-Eugene Evans, Isaac, Ben Staffin, Matthew Loar, Magos, Roderik, Eugenio
-Piasini, Nico B, Scott Walter, Lior Amsalem, Thongrop Rodsavas, Alberto de
-Paola, Shawn Poulen, John Swiderski, lluks, Waelen, Mark Slosarek, Jim
-Cristol, mikesol, Bilal Quadri, LuP, Allan Nicolson, Kevin Washington,
-Isaac Wedin, Paul Anguiano, ldacruz, Jason Manheim, Sawyer, Jason
-Woofenden, Joe Danziger, Declan Morahan, KaptainUfolog, Vladron, bart, Jeff
-McNeill, Christian Schlotter, Ben McQuillan, Anthony, Julian, Martin O,
-altruism, Eric Solheim, MarkS, ndrwc, Matthew, David Lehn, Matthew
-Cisneros, Mike Skoglund, Kristy Carey, fmotta, Tom Lowenthal, Branden
-Tyree, Aaron Whitehouse</p>
-
-<h2>Also thanks to</h2>
-
-<ul>
-<li>The Kickstarter team, who have unleashed much good on the world.</li>
-<li>The Haskell developers, who toiled for 20 years in obscurity
-before most of us noticed them, and on whose giant shoulders I now stand,
-in awe of the view.</li>
-<li>The Git developers, for obvious reasons.</li>
-<li>All of git-annex's early adopters, who turned it from a personal
-toy project into something much more, and showed me the interest was there.</li>
-<li>Rsync.net, for providing me a free account so I can make sure git-annex
-works well with it.</li>
-<li>LeastAuthority.com, for providing me a free Tahoe-LAFS grid account,
-so I can test git-annex with that, and back up the git-annex assistant
-screencasts.</li>
-<li>Anna and Mark, for the loan of the video camera; as well as the rest of
-my family, for your support. Even when I couldn't explain what I was
-working on.</li>
-<li>The Hodges, for providing such a congenial place for me to live and work
-on these first world problems, while you're off helping people in the
-third world.</li>
-</ul>
-
-
-</div>
-
-
-
-<div id="comments">
-
-
-
-
-<div class="addcomment">Comments on this page are closed.</div>
-
-</div>
-
-
-
-</div>
-
-<div id="footer" class="pagefooter">
-
-<div id="pageinfo">
-
-
-
-
-
-
-<div id="backlinks">
-Links:
-
-<a href="../assistant.html">assistant</a>
-
-
-</div>
-
-
-
-
-
-
-<div class="pagedate">
-Last edited <span class="date">Wed Apr 3 23:37:44 2013</span>
-<!-- Created <span class="date">Wed Apr 3 23:37:44 2013</span> -->
-</div>
-
-</div>
-
-
-<!-- from git-annex -->
-</div>
-
-</div>
-
-</body>
-</html>
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/assistant/thumbnail.png b/debian/git-annex/usr/share/doc/git-annex/html/assistant/thumbnail.png
deleted file mode 100644
index 346c22f..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/assistant/thumbnail.png
+++ /dev/null
Binary files differ
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/assistant/xmpp.png b/debian/git-annex/usr/share/doc/git-annex/html/assistant/xmpp.png
deleted file mode 100644
index c3cc53e..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/assistant/xmpp.png
+++ /dev/null
Binary files differ
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/assistant/xmppnudge.png b/debian/git-annex/usr/share/doc/git-annex/html/assistant/xmppnudge.png
deleted file mode 100644
index b3a0658..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/assistant/xmppnudge.png
+++ /dev/null
Binary files differ
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/assistant/xmpppairingend.png b/debian/git-annex/usr/share/doc/git-annex/html/assistant/xmpppairingend.png
deleted file mode 100644
index f0c9e76..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/assistant/xmpppairingend.png
+++ /dev/null
Binary files differ
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/backends.html b/debian/git-annex/usr/share/doc/git-annex/html/backends.html
deleted file mode 100644
index ddcb0f1..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/backends.html
+++ /dev/null
@@ -1,285 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>backends</title>
-
-<link rel="stylesheet" href="style.css" type="text/css" />
-
-<link rel="stylesheet" href="local.css" type="text/css" />
-
-
-
-
-
-
-</head>
-<body>
-
-<div class="page">
-
-<div class="pageheader">
-<div class="header">
-<span>
-<span class="parentlinks">
-
-<a href="./index.html">git-annex</a>/
-
-</span>
-<span class="title">
-backends
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-
-</div>
-
-
-<div class="sidebar">
-<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>
-
-<ul>
-<li><a href="./install.html">install</a></li>
-<li><a href="./assistant.html">assistant</a></li>
-<li><a href="./walkthrough.html">walkthrough</a></li>
-<li><a href="./tips.html">tips</a></li>
-<li><span class="createlink">bugs</span></li>
-<li><span class="createlink">todo</span></li>
-<li><span class="createlink">forum</span></li>
-<li><a href="./comments.html">comments</a></li>
-<li><a href="./contact.html">contact</a></li>
-<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>
-</ul>
-
-
-</div>
-
-
-<div id="pagebody">
-
-<div id="content">
-<p>When a file is annexed, a key is generated from its content and/or metadata.
-The file checked into git symlinks to the key. This key can later be used
-to retrieve the file's content (its value).</p>
-
-<p>Multiple pluggable key-value backends are supported, and a single repository
-can use different ones for different files.</p>
-
-<ul>
-<li><code>SHA256E</code> -- The default backend for new files. This allows
-verifying that the file content is right, and can avoid duplicates of
-files with the same content. Its need to generate checksums
-can make it slower for large files.</li>
-<li><code>SHA256</code> -- Does not include the file extension in the key, which can
-lead to better deduplication.</li>
-<li><code>WORM</code> ("Write Once, Read Many") This assumes that any file with
-the same basename, size, and modification time has the same content.
-This is the the least expensive backend, recommended for really large
-files or slow systems.</li>
-<li><code>SHA512</code>, <code>SHA512E</code> -- Best currently available hash, for the very paranoid.</li>
-<li><code>SHA1</code>, <code>SHA1E</code> -- Smaller hash than <code>SHA256</code> for those who want a checksum
- but are not concerned about security.</li>
-<li><code>SHA384</code>, <code>SHA384E</code>, <code>SHA224</code>, <code>SHA224E</code> -- Hashes for people who like
-unusual sizes.</li>
-</ul>
-
-
-<p>The <code>annex.backends</code> git-config setting can be used to list the backends
-git-annex should use. The first one listed will be used by default when
-new files are added.</p>
-
-<p>For finer control of what backend is used when adding different types of
-files, the <code>.gitattributes</code> file can be used. The <code>annex.backend</code>
-attribute can be set to the name of the backend to use for matching files.</p>
-
-<p>For example, to use the SHA256E backend for sound files, which tend to be
-smallish and might be modified or copied over time,
-while using the WORM backend for everything else, you could set
-in <code>.gitattributes</code>:</p>
-
-<pre><code>* annex.backend=WORM
-*.mp3 annex.backend=SHA256E
-*.ogg annex.backend=SHA256E
-</code></pre>
-
-</div>
-
-
-
-<div id="comments">
-<div class="feedlink">
-
-
-</div>
-<div class="comment" id="comment-3c1cd45d2a015b4fc412dd813293ad7d">
-
-
-
-<div class="comment-subject">
-
-<a href="/backends.html#comment-3c1cd45d2a015b4fc412dd813293ad7d">SHA performance</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>It turns out that (at least on x86-64 machines) <code>SHA512</code> <a href="https://community.emc.com/community/edn/rsashare/blog/2010/11/01/sha-2-algorithms-when-sha-512-is-more-secure-and-faster">is faster than</a> <code>SHA256</code>. In some benchmarks I performed<sup>1</sup> <code>SHA256</code> was 1.8–2.2x slower than <code>SHA1</code> while <code>SHA512</code> was only 1.5–1.6x slower.</p>
-
-<p><code>SHA224</code> and <code>SHA384</code> are effectively just truncated versions of <code>SHA256</code> and <code>SHA512</code> so their performance characteristics are identical.</p>
-
-<p><sup>1</sup> <code>time head -c 100000000 /dev/zero | shasum -a 512</code></p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="http://nanotech.nanotechcorp.net/">NanoTech</a>
-</span>
-
-
-&mdash; <span class="date">Fri Aug 10 00:37:32 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-f1af10fa62cec23b61a688a3f8191f53">
-
-
-
-<div class="comment-subject">
-
-<a href="/backends.html#comment-f1af10fa62cec23b61a688a3f8191f53">Tracking remote copies not even stored locally / URL backend turned into a &#x22;special remote&#x22;.</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>In case you came here looking for the URL backend.</p>
-
-<h2>The URL backend</h2>
-
-<p>Several documents on the web refer to a special "URL backend", e.g. <a href="http://lwn.net/Articles/419241/">Large file management with git-annex [LWN.net]</a>. Historical content will never be updated yet it drives people to living places.</p>
-
-<h2>Why a URL backend ?</h2>
-
-<p>It is interesting because you can:</p>
-
-<ul>
-<li>let <code>git-annex</code> rest on the fact that some documents are available as extra copies available at any time (but from something that is not a git repository).</li>
-<li>track these documents like your own with all git features, which opens up some truly marvelous combinations, which this margin is too narrow to contain (Pierre d.F. wouldn't disapprove ;-).</li>
-</ul>
-
-
-<h2>How/Where now ?</h2>
-
-<p><code>git-annex</code> used to have a URL backend. It seems that the design changed into a "special remote" feature, not limited to the web. You can now track files available through plain directories, rsync, webdav, some cloud storage, etc, even clay tablets. For details see <a href="./special_remotes.html">special remotes</a>.</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawm7eqCMh_B7mxE0tnchbr0JoYu11FUAFRY">Stéphane</a>
-</span>
-
-
-&mdash; <span class="date">Thu Jan 3 06:59:35 2013</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-
-
-
-
-<div class="addcomment">Comments on this page are closed.</div>
-
-</div>
-
-
-
-</div>
-
-<div id="footer" class="pagefooter">
-
-<div id="pageinfo">
-
-
-
-
-
-
-<div id="backlinks">
-Links:
-
-<a href="./how_it_works.html">how it works</a>
-
-<a href="./internals.html">internals</a>
-
-<a href="./internals/key_format.html">internals/key format</a>
-
-<a href="./links/the_details.html">links/the details</a>
-
-<a href="./scalability.html">scalability</a>
-
-<a href="./tips/Internet_Archive_via_S3.html">tips/Internet Archive via S3</a>
-
-<a href="./tips/using_the_SHA1_backend.html">tips/using the SHA1 backend</a>
-
-<a href="./upgrades.html">upgrades</a>
-
-<a href="./upgrades/SHA_size.html">upgrades/SHA size</a>
-
-<a href="./walkthrough/fsck:_verifying_your_data.html">walkthrough/fsck: verifying your data</a>
-
-
-<span class="popup">...
-<span class="balloon">
-
-<a href="./walkthrough/unused_data.html">walkthrough/unused data</a>
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-<div class="pagedate">
-Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>
-<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->
-</div>
-
-</div>
-
-
-<!-- from git-annex -->
-</div>
-
-</div>
-
-</body>
-</html>
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/bare_repositories.html b/debian/git-annex/usr/share/doc/git-annex/html/bare_repositories.html
deleted file mode 100644
index a92df1c..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/bare_repositories.html
+++ /dev/null
@@ -1,223 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>bare repositories</title>
-
-<link rel="stylesheet" href="style.css" type="text/css" />
-
-<link rel="stylesheet" href="local.css" type="text/css" />
-
-
-
-
-
-
-</head>
-<body>
-
-<div class="page">
-
-<div class="pageheader">
-<div class="header">
-<span>
-<span class="parentlinks">
-
-<a href="./index.html">git-annex</a>/
-
-</span>
-<span class="title">
-bare repositories
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-
-</div>
-
-
-<div class="sidebar">
-<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>
-
-<ul>
-<li><a href="./install.html">install</a></li>
-<li><a href="./assistant.html">assistant</a></li>
-<li><a href="./walkthrough.html">walkthrough</a></li>
-<li><a href="./tips.html">tips</a></li>
-<li><span class="createlink">bugs</span></li>
-<li><span class="createlink">todo</span></li>
-<li><span class="createlink">forum</span></li>
-<li><a href="./comments.html">comments</a></li>
-<li><a href="./contact.html">contact</a></li>
-<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>
-</ul>
-
-
-</div>
-
-
-<div id="pagebody">
-
-<div id="content">
-<p>Due to popular demand, git-annex can now be used with bare repositories.</p>
-
-<p>So, for example, you can stash a file away in the origin:
-<code>git annex move mybigfile --to origin</code></p>
-
-<p>Of course, for that to work, the bare repository has to be on a system with
-<a href="./git-annex-shell.html">git-annex-shell</a> installed. If "origin" is on GitWeb, you still can't
-use git-annex to store stuff there.</p>
-
-<p>It took a while, but bare repositories are now supported exactly as well
-as non-bare repositories. Except for these caveats:</p>
-
-<ul>
-<li><code>git annex fsck</code> works in a bare repository, but does not display
-warnings about insufficient
-<a href="./copies.html">copies</a>. To get those warnings, just run it in one of the non-bare
-checkouts.</li>
-<li><code>git annex unused</code> in a bare repository only knows about keys used in
-branches that have been pushed to the bare repository. So use it with care..</li>
-<li>Commands that need a work tree, like <code>git annex add</code> won't work in a bare
-repository, of course.</li>
-</ul>
-
-
-<hr />
-
-<p>Here is a quick example of how to set this up, using <code>origin</code> as the remote name, and assuming <code>~/annex</code> contains an annex:</p>
-
-<p>On the server:</p>
-
-<pre><code>git init --bare bare-annex.git
-git annex init origin
-</code></pre>
-
-<p>Now configure the remote and do the initial push:</p>
-
-<pre><code>cd ~/annex
-git remote add origin example.com:bare-annex.git
-git push origin master git-annex
-</code></pre>
-
-<p>Now <code>git annex status</code> should show the configured bare remote. If it does not, you may have to pull from the remote first (older versions of <code>git-annex</code>)</p>
-
-<p>If you wish to configure git such that you can push/pull without arguments, set the upstream branch:</p>
-
-<pre><code>git branch master --set-upstream origin/master
-</code></pre>
-
-</div>
-
-
-
-<div id="comments">
-<div class="feedlink">
-
-
-</div>
-<div class="comment" id="comment-6e007e9304d6f09aaf40ff942f429025">
-
-
-
-<div class="comment-subject">
-
-<a href="/bare_repositories.html#comment-6e007e9304d6f09aaf40ff942f429025">How to convert bare repositories to non-bare</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>I made a repository bare and later wanted to convert it, this would have worked with just plain git:</p>
-
-<pre><code>cd bare-repo.git
-mkdir .git
-mv .??* * .git/
-git config --unset core.bare
-git reset --hard
-</code></pre>
-
-<p>But because git-annex uses different hashing directories under bare repositories all the files in the repo will point to files you don't have. Here's how you can fix that up assuming you're using a backend that assigns unique hashes based on file content (e.g. the SHA256 backend):</p>
-
-<pre><code>mv .git/annex/objects from-bare-repo
-git annex add from-bare-repo
-git rm -f from-bare-repo
-</code></pre>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawmraN_ldJplGunVGmnjjLN6jL9s9TrVMGE">Ævar Arnfjörð</a>
-</span>
-
-
-&mdash; <span class="date">Sun Nov 11 16:14:44 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-
-
-
-
-<div class="addcomment">Comments on this page are closed.</div>
-
-</div>
-
-
-
-</div>
-
-<div id="footer" class="pagefooter">
-
-<div id="pageinfo">
-
-
-
-
-
-
-<div id="backlinks">
-Links:
-
-<a href="./links/the_details.html">links/the details</a>
-
-
-</div>
-
-
-
-
-
-
-<div class="pagedate">
-Last edited <span class="date">Mon Oct 22 14:30:32 2012</span>
-<!-- Created <span class="date">Mon Oct 22 14:30:32 2012</span> -->
-</div>
-
-</div>
-
-
-<!-- from git-annex -->
-</div>
-
-</div>
-
-</body>
-</html>
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/coding_style.html b/debian/git-annex/usr/share/doc/git-annex/html/coding_style.html
deleted file mode 100644
index c590c32..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/coding_style.html
+++ /dev/null
@@ -1,225 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>coding style</title>
-
-<link rel="stylesheet" href="style.css" type="text/css" />
-
-<link rel="stylesheet" href="local.css" type="text/css" />
-
-
-
-
-
-
-</head>
-<body>
-
-<div class="page">
-
-<div class="pageheader">
-<div class="header">
-<span>
-<span class="parentlinks">
-
-<a href="./index.html">git-annex</a>/
-
-</span>
-<span class="title">
-coding style
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-
-</div>
-
-
-<div class="sidebar">
-<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>
-
-<ul>
-<li><a href="./install.html">install</a></li>
-<li><a href="./assistant.html">assistant</a></li>
-<li><a href="./walkthrough.html">walkthrough</a></li>
-<li><a href="./tips.html">tips</a></li>
-<li><span class="createlink">bugs</span></li>
-<li><span class="createlink">todo</span></li>
-<li><span class="createlink">forum</span></li>
-<li><a href="./comments.html">comments</a></li>
-<li><a href="./contact.html">contact</a></li>
-<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>
-</ul>
-
-
-</div>
-
-
-<div id="pagebody">
-
-<div id="content">
-<p>If you do nothing else, avoid use of partial functions from the Prelude!
-<code>import Utility.PartialPrelude</code> helps avoid this by defining conflicting
-functions for all the common ones. Also avoid <code>!!</code>, it's partial too.</p>
-
-<p>Use tabs for indentation. The one exception to this rule are
-the Hamlet format files in <code>templates/*</code>. Hamlet, infuriatingly, refuses
-to allow tabs to be used for indentation.</p>
-
-<p>Code should make sense with any tab stop setting, but 8 space tabs are
-the default. With 8 space tabs, code should not exceed 80 characters
-per line. (With larger tabs, it may of course.)</p>
-
-<p>Use spaces for layout. For example, here spaces (indicated with <code>.</code>)
-are used after the initial tab to make the third test line up with
-the others.</p>
-
-<pre><code> when (foo_test || bar_test ||
- ......some_other_long_test)
- print "hi"
-</code></pre>
-
-<p>As a special Haskell-specific rule, "where" clauses are indented with two
-spaces, rather than a tab. This makes them stand out from the main body
-of the function, and avoids excessive indentation of the where cause content.
-The definitions within the where clause should be put on separate lines,
-each indented with a tab.</p>
-
-<pre><code>main = do
- foo
- bar
- foo
- where
- foo = ...
- bar = ...
-</code></pre>
-
-<p>Where clauses for instance definitions and modules tend to appear at the end
-of a line, rather than on a separate line.</p>
-
-<pre><code>module Foo (Foo, mkFoo, unFoo) where
-instance MonadBaseControl IO Annex where
-</code></pre>
-
-<p>When a function's type signature needs to be wrapped to another line,
-it's typical to switch to displaying one parameter per line.</p>
-
-<pre><code>foo :: Bar -&gt; Baz -&gt; (Bar -&gt; Baz) -&gt; IO Baz
-
-foo'
- :: Bar
- -&gt; Baz
- -&gt; (Bar -&gt; Baz)
- -&gt; IO Baz
-</code></pre>
-
-<p>Note that the "::" then starts its own line. It is not put on the same
-line as the function name because then it would not be guaranteed to line
-up with the "-&gt;" at all tab width settings. Similarly, guards are put
-on their own lines:</p>
-
-<pre><code>splat i
- | odd i = error "splat!"
- | otherwise = i
-</code></pre>
-
-<p>Multiline lists and record syntax are written with leading commas,
-that line up with the open and close punctuation.</p>
-
-<pre><code>list =
- [ item1
- , item2
- , item3
- ]
-
-foo = DataStructure
- { name = "bar"
- , address = "baz"
- }
-</code></pre>
-
-<p>Module imports are separated into two blocks, one for third-party modules,
-and one for modules that are part of git-annex. (Additional blocks can be used
-if it makes sense.)</p>
-
-<p>Using tabs for indentation makes use of <code>let .. in</code> particularly tricky.
-There's no really good way to bind multiple names in a let clause with
-tab indentation. Instead, a where clause is typically used. To bind a single
-name in a let clause, this is sometimes used:</p>
-
-<pre><code>foo = let x = 42
- in x + (x-1) + x
-</code></pre>
-
-<hr />
-
-<p>If you feel that this coding style leads to excessive amounts of horizontal
-or vertical whitespace around your code, making it hard to fit enough of it
-on the screen, consider finding a better abstraction, so the code that
-does fit on the screen is easily understandable. ;)</p>
-
-</div>
-
-
-
-<div id="comments">
-
-
-
-
-<div class="addcomment">Comments on this page are closed.</div>
-
-</div>
-
-
-
-</div>
-
-<div id="footer" class="pagefooter">
-
-<div id="pageinfo">
-
-
-
-
-
-
-<div id="backlinks">
-Links:
-
-<a href="./download.html">download</a>
-
-
-</div>
-
-
-
-
-
-
-<div class="pagedate">
-Last edited <span class="date">Sat Mar 30 14:31:09 2013</span>
-<!-- Created <span class="date">Sat Mar 30 14:31:09 2013</span> -->
-</div>
-
-</div>
-
-
-<!-- from git-annex -->
-</div>
-
-</div>
-
-</body>
-</html>
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/comments.html b/debian/git-annex/usr/share/doc/git-annex/html/comments.html
deleted file mode 100644
index 8de77b9..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/comments.html
+++ /dev/null
@@ -1,554 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>comments</title>
-
-<link rel="stylesheet" href="style.css" type="text/css" />
-
-<link rel="stylesheet" href="local.css" type="text/css" />
-
-
-
-
-
-
-</head>
-<body>
-
-<div class="page">
-
-<div class="pageheader">
-<div class="header">
-<span>
-<span class="parentlinks">
-
-<a href="./index.html">git-annex</a>/
-
-</span>
-<span class="title">
-comments
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-
-</div>
-
-
-<div class="sidebar">
-<div class="feedlink">
-
-
-</div>
-
-
-
-<p>Comments in the moderation queue:
-0</p>
-
-</div>
-
-
-<div id="pagebody">
-
-<div id="content">
-<p>Recent comments posted to this site:</p>
-
-<div class="feedlink">
-
-
-</div>
-<div class="comment" id="comment-a7e65f545755de544dc069536c1fff4a">
-
-
-
-<div class="comment-subject">
-
-<a href="/special_remotes/xmpp.html#comment-a7e65f545755de544dc069536c1fff4a">User defined server</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>It would be nice if you could expand the XMPP setup in the assistant to support an "advanced" settings view where a custom server could be defined.</p>
-
-<p>Example: I have a google Apps domain called mytest.com, with the users bla1@mytest.com and bla2@mytest.com. When trying to add either of those accounts to the assistant XMPP will try to use mytest.com as the jabber server, and not googles server.</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawmWg4VvDTer9f49Y3z-R0AH16P4d1ygotA">Tobias</a>
-</span>
-
-
-&mdash; <span class="date">Wed Apr 17 05:45:59 2013</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-b45fd847f89e1ef6d0eefc86d0007f12">
-
-
-
-<div class="comment-subject">
-
-<a href="/install/OSX.html#comment-b45fd847f89e1ef6d0eefc86d0007f12">comment 17</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>@Bret, the assistant relies on FSEvents pretty heavily. It seems to me your best bet is to upgrade OSX to a version that supports FSEvents.</p>
-
-<p>You can certainly use the rest of git-annex on Snow Leopard without FSEvents.</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="http://joeyh.name/">joey</a>
-</span>
-
-
-&mdash; <span class="date">Tue Apr 16 16:31:10 2013</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-509b6646daee0dfe1c72f898b12532db">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant/xmpp.html#comment-509b6646daee0dfe1c72f898b12532db">Plans for two factor authentication or oath?</a>
-
-</div>
-
-<div class="inlinecontent">
-Are there plans to support google's two factor authentication? Right now I have to use an application specific password.
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawkurjhi0CRJvgm7QNaZDWS9hitBtavqIpc">Bret</a>
-</span>
-
-
-&mdash; <span class="date">Sun Apr 14 20:58:04 2013</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-1cf81a381a3b69c1e0b371b38f562e1c">
-
-
-
-<div class="comment-subject">
-
-<a href="/install/OSX.html#comment-1cf81a381a3b69c1e0b371b38f562e1c">Snow Leopard Issues</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>I was able to build snow leopard completely for the first time over last night (it took a very long time to build all the tools and dependancies). Woohoo!</p>
-
-<p>The way I was able to fully build on a 32-bit 10.6 machine was this</p>
-
-<ol>
-<li>Delete ~/.ghc and ~/.cabal. They were full of random things and were causing problems.</li>
-<li><code>brew uninstall ghc and haskell-platform</code></li>
-<li><code>brew update</code></li>
-<li><code>brew install git ossp-uuid md5sha1sum coreutils libgsasl gnutls libidn libgsasl pkg-config libxml2</code></li>
-<li><code>brew upgrade git ossp-uuid md5sha1sum coreutils libgsasl gnutls libidn libgsasl pkg-config libxml2</code> (Some of these were already installed/up to date.</li>
-<li><code>brew link libxml2</code></li>
-<li><code>brew install haskell-platform</code> (This takes a long, long time).</li>
-<li><code>cabal update</code> (assuming you have added <code>~/.cabal/bin</code> to your path</li>
-<li><code>cabal install cablal-install</code></li>
-<li><code>cabal install c2hs</code></li>
-<li><code>cabal install git-annex</code></li>
-</ol>
-
-
-<p>It also appears to be running fairly smoothly than it had in the past on a 32-bit SL system. Thats also neat.</p>
-
-<p>The problem is that it seems to not really work as git annex though, probably due to the error relating you get when you start up the webapp:
-Running
-<code>git annex webapp</code>
-The browser starts up, and I get 3 of these errors:
-<code>Watcher crashed: Need at least OSX 10.7.0 for file-level FSEvents</code></p>
-
-<p>Pairing with a local computer appears to work to systems running 10.7, but when you complete the process, they never show up in the repository list.</p>
-
-<p>Also on a side note, when running <code>git annex webapp</code> it triggers the opening of an html file in whatever the default html file handler is. I edit a lot of html, so for me that is usually a text editor. I had to change the file handler to open html files with my web browser for the <code>git annex webapp</code> to actually work. Is there a way to change that so that <code>git annex webapp</code> uses the default web browser for the system rather than the default html file handler?</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawkurjhi0CRJvgm7QNaZDWS9hitBtavqIpc">Bret</a>
-</span>
-
-
-&mdash; <span class="date">Sun Apr 14 16:17:17 2013</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-ca2ab6884c22d13e862d5099b4ac90c0">
-
-
-
-<div class="comment-subject">
-
-<a href="/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant.html#comment-ca2ab6884c22d13e862d5099b4ac90c0">comment 4</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>Like it says in the tip, <code>git annex add</code> will add the large files to git. You can add the small files with <code>git add</code>; git-annex won't do that for you.</p>
-
-<p>To automatically add both sorts of files, you can use the <code>git annex watch</code> or <code>git annex assistant</code> daemons. The latter also keeps files in sync between repositories automatically.</p>
-
-<p>(Why did the picture show up as a new file in git? Because you hadn't committed it. This is the same as when you <code>git add</code> a file;
-it's only staged in the index; <code>git status</code> will show it is new until you <code>git commit</code>)</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="http://joeyh.name/">joey</a>
-</span>
-
-
-&mdash; <span class="date">Sun Apr 14 14:37:50 2013</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-9f3ea3d7e938a485afa72fa86308f49f">
-
-
-
-<div class="comment-subject">
-
-<a href="/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant.html#comment-9f3ea3d7e938a485afa72fa86308f49f">Trying this feature</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>I just gave this feature a try, but it seems it doesn't work as expected or maybe I don't understand it:</p>
-
-<pre><code>~/annex/largefilestest % git init
-~/annex/largefilestest (git)-[master] % git annex init "test repo"
-~/annex/largefilestest (git)-[master] % git config annex.largefiles "not include=*.txt"
-</code></pre>
-
-<p>Now I copy two files to this directory and add both to the annex</p>
-
-<pre><code>~/annex/largefilestest (git)-[master] % ll
-total 100
--rw-rw-r-- 1 tobru tobru 93709 Oct 19 16:14 dpkg-get-selections.txt
--rw-rw-r-- 1 tobru tobru 7256 Jan 6 15:52 x3400.jpg
-~/annex/largefilestest (git)-[master] % git annex add .
-add x3400.jpg (checksum...) ok
-(Recording state in git...)
-~/annex/largefilestest (git)-[master] % git status
-# On branch master
-#
-# Initial commit
-#
-# Changes to be committed:
-# (use "git rm --cached &lt;file&gt;..." to unstage)
-#
-# new file: x3400.jpg
-#
-# Untracked files:
-# (use "git add &lt;file&gt;..." to include in what will be committed)
-#
-# dpkg-get-selections.txt
-~/annex/largefilestest (git)-[master] % ll
-total 96
--rw-rw-r-- 1 tobru tobru 93709 Oct 19 16:14 dpkg-get-selections.txt
-lrwxrwxrwx 1 tobru tobru 192 Jan 6 15:52 x3400.jpg -&gt; .git/annex/objects/vf/QX/SHA256E-s7256--60e5b69ade5619e37f7fcaa964626da9c415959d861241aa13e2516fffc2dddf.jpg/SHA256E-s7256--60e5b69ade5619e37f7fcaa964626da9c415959d861241aa13e2516fffc2dddf.jpg
-</code></pre>
-
-<p>So the picture is added to the annex as expected. But the .txt file is not added to git. Do I have to manually add this to git? And why is the picture seen as new file by git?</p>
-
-<p>The second question could be answered by: "run git annex sync". Is this correct? Because after running this command, git does not see this file as a new file anymore:</p>
-
-<pre><code>~/annex/largefilestest (git)-[master] % git annex sync
-commit
-[master (root-commit) a0afb14] git-annex automatic sync
- 1 file changed, 1 insertion(+)
- create mode 120000 x3400.jpg
-ok
-git-annex: no branch is checked out
-~/annex/largefilestest (git)-[master] % git status
-# On branch master
-# Untracked files:
-# (use "git add &lt;file&gt;..." to include in what will be committed)
-#
-# dpkg-get-selections.txt
-nothing added to commit but untracked files present (use "git add" to track)
-</code></pre>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawniayrgSdVLUc3c6bf93VbO-_HT4hzxmyo">Tobias</a>
-</span>
-
-
-&mdash; <span class="date">Sun Apr 14 09:04:55 2013</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-7b5aedae234ddbc43e349e18fb3c3543">
-
-
-
-<div class="comment-subject">
-
-<a href="/tips/using_the_web_as_a_special_remote.html#comment-7b5aedae234ddbc43e349e18fb3c3543">how to drop one of the urls?</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>is there a way to remove one of the urls? e.g. if I have</p>
-
-<pre><code>$&gt; git annex whereis fail2ban_logo.png
-whereis fail2ban_logo.png (1 copy)
- 00000000-0000-0000-0000-000000000001 -- web
-
- web: http://www.fail2ban.org/fail2ban_logo.png
- web: http://www.onerussian.com/tmp/statsmodes.png
-ok
-</code></pre>
-
-<p>and would like to remove the fail2ban.org one... ?</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawnx8kHW66N3BqmkVpgtXDlYMvr8TJ5VvfY">Yaroslav</a>
-</span>
-
-
-&mdash; <span class="date">Fri Apr 12 10:53:29 2013</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-18ee66a322dee292bddd66916c68ddb5">
-
-
-
-<div class="comment-subject">
-
-<a href="/special_remotes.html#comment-18ee66a322dee292bddd66916c68ddb5">Re: Webhook special remote</a>
-
-</div>
-
-<div class="inlinecontent">
-@Alex: You might see if the newly-added <span class="createlink">wishlist: allow configuration of downloader for addurl</span> could be made to do what you need... I've not played around with it yet, but perhaps you could set the downloader to be something that can sort out the various URLs and send them to the correct downloading tool?
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="Signed in">
-
-<a href="?page=andy&amp;do=goto">andy</a>
-
-</span>
-
-
-&mdash; <span class="date">Fri Apr 12 04:54:47 2013</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-0370458f6b53772c4f90859d397fc2bc">
-
-
-
-<div class="comment-subject">
-
-<a href="/tips/Using_Git-annex_as_a_web_browsing_assistant.html#comment-0370458f6b53772c4f90859d397fc2bc">comment 1</a>
-
-</div>
-
-<div class="inlinecontent">
-As of my last commit, you don't really need a separate download manager. The webapp will now display urls that <code>git annex addurl</code> is downloading in amoung the other transfers.
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="http://joeyh.name/">joey</a>
-</span>
-
-
-&mdash; <span class="date">Thu Apr 11 16:16:02 2013</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-904c03f2de30340c297379a762529702">
-
-
-
-<div class="comment-subject">
-
-<a href="/special_remotes/bup.html#comment-904c03f2de30340c297379a762529702">comment 7</a>
-
-</div>
-
-<div class="inlinecontent">
-<p><code>bup-split</code> uses a git branch to name the objects stored in the bup repository. So it will be limited by any scalability issues affecting large numbers of git branches. I don't know what those are.</p>
-
-<p>Yes, it would be possible to make git-annex store this in the git-annex branch instead.</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="http://joeyh.name/">joey</a>
-</span>
-
-
-&mdash; <span class="date">Tue Apr 2 17:24:06 2013</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-
-
-
-
-
-</div>
-
-
-
-<div id="comments">
-
-
-
-
-<div class="addcomment">Comments on this page are closed.</div>
-
-</div>
-
-
-
-</div>
-
-<div id="footer" class="pagefooter">
-
-<div id="pageinfo">
-
-
-
-
-
-
-<div id="backlinks">
-Links:
-
-<a href="./sidebar.html">sidebar</a>
-
-
-</div>
-
-
-
-
-
-
-<div class="pagedate">
-Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>
-<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->
-</div>
-
-</div>
-
-
-<!-- from git-annex -->
-</div>
-
-</div>
-
-</body>
-</html>
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/contact.html b/debian/git-annex/usr/share/doc/git-annex/html/contact.html
deleted file mode 100644
index eb4961f..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/contact.html
+++ /dev/null
@@ -1,137 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>contact</title>
-
-<link rel="stylesheet" href="style.css" type="text/css" />
-
-<link rel="stylesheet" href="local.css" type="text/css" />
-
-
-
-
-
-
-</head>
-<body>
-
-<div class="page">
-
-<div class="pageheader">
-<div class="header">
-<span>
-<span class="parentlinks">
-
-<a href="./index.html">git-annex</a>/
-
-</span>
-<span class="title">
-contact
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-
-</div>
-
-
-<div class="sidebar">
-<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>
-
-<ul>
-<li><a href="./install.html">install</a></li>
-<li><a href="./assistant.html">assistant</a></li>
-<li><a href="./walkthrough.html">walkthrough</a></li>
-<li><a href="./tips.html">tips</a></li>
-<li><span class="createlink">bugs</span></li>
-<li><span class="createlink">todo</span></li>
-<li><span class="createlink">forum</span></li>
-<li><a href="./comments.html">comments</a></li>
-<li><span class="selflink">contact</span></li>
-<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>
-</ul>
-
-
-</div>
-
-
-<div id="pagebody">
-
-<div id="content">
-<p>Joey Hess <a href="mailto:joey@kitenet.net">&#x6a;&#111;&#101;&#121;&#64;&#x6b;&#x69;&#116;&#101;&#x6e;&#x65;&#x74;&#46;&#110;&#x65;&#x74;</a> is the author of git-annex. If you need to
-talk about something privately, email me.</p>
-
-<p>The <span class="createlink">forum</span> is the best place to discuss git-annex.</p>
-
-<p>For realtime chat, use the <code>#git-annex</code> channel on irc.oftc.net.
-You can also watch incoming commits there.</p>
-
-<p>The <a href="http://lists.madduck.net/listinfo/vcs-home">VCS-home mailing list</a>
-is a good mailing list for users who want to use git-annex in the context
-of managing their large personal files.</p>
-
-</div>
-
-
-
-<div id="comments">
-
-
-
-
-<div class="addcomment">Comments on this page are closed.</div>
-
-</div>
-
-
-
-</div>
-
-<div id="footer" class="pagefooter">
-
-<div id="pageinfo">
-
-
-
-
-
-
-<div id="backlinks">
-Links:
-
-<a href="./sidebar.html">sidebar</a>
-
-
-</div>
-
-
-
-
-
-
-<div class="pagedate">
-Last edited <span class="date">Wed Apr 17 06:41:17 2013</span>
-<!-- Created <span class="date">Wed Apr 17 06:41:17 2013</span> -->
-</div>
-
-</div>
-
-
-<!-- from git-annex -->
-</div>
-
-</div>
-
-</body>
-</html>
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/copies.html b/debian/git-annex/usr/share/doc/git-annex/html/copies.html
deleted file mode 100644
index 0d7042e..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/copies.html
+++ /dev/null
@@ -1,178 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>copies</title>
-
-<link rel="stylesheet" href="style.css" type="text/css" />
-
-<link rel="stylesheet" href="local.css" type="text/css" />
-
-
-
-
-
-
-</head>
-<body>
-
-<div class="page">
-
-<div class="pageheader">
-<div class="header">
-<span>
-<span class="parentlinks">
-
-<a href="./index.html">git-annex</a>/
-
-</span>
-<span class="title">
-copies
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-
-</div>
-
-
-<div class="sidebar">
-<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>
-
-<ul>
-<li><a href="./install.html">install</a></li>
-<li><a href="./assistant.html">assistant</a></li>
-<li><a href="./walkthrough.html">walkthrough</a></li>
-<li><a href="./tips.html">tips</a></li>
-<li><span class="createlink">bugs</span></li>
-<li><span class="createlink">todo</span></li>
-<li><span class="createlink">forum</span></li>
-<li><a href="./comments.html">comments</a></li>
-<li><a href="./contact.html">contact</a></li>
-<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>
-</ul>
-
-
-</div>
-
-
-<div id="pagebody">
-
-<div id="content">
-<p>Annexed data is stored inside your git repository's <code>.git/annex</code> directory.
-Some <a href="./special_remotes.html">special remotes</a> can store annexed data elsewhere.</p>
-
-<p>It's important that data not get lost by an ill-considered <code>git annex drop</code>
-command. So, git-annex can be configured to try
-to keep N copies of a file's content available across all repositories.
-(Although <a href="./trust.html">untrusted repositories</a> don't count toward this total.)</p>
-
-<p>By default, N is 1; it is configured by annex.numcopies. This default
-can be overridden on a per-file-type basis by the annex.numcopies
-setting in <code>.gitattributes</code> files. The --numcopies switch allows
-temporarily using a different value.</p>
-
-<p><code>git annex drop</code> attempts to check with other git remotes, to check that N
-copies of the file exist. If enough repositories cannot be verified to have
-it, it will retain the file content to avoid data loss. Note that
-<a href="./trust.html">trusted repositories</a> are not explicitly checked.</p>
-
-<p>For example, consider three repositories: Server, Laptop, and USB. Both Server
-and USB have a copy of a file, and N=1. If on Laptop, you <code>git annex get
-$file</code>, this will transfer it from either Server or USB (depending on which
-is available), and there are now 3 copies of the file.</p>
-
-<p>Suppose you want to free up space on Laptop again, and you <code>git annex drop</code> the file
-there. If USB is connected, or Server can be contacted, git-annex can check
-that it still has a copy of the file, and the content is removed from
-Laptop. But if USB is currently disconnected, and Server also cannot be
-contacted, it can't verify that it is safe to drop the file, and will
-refuse to do so.</p>
-
-<p>With N=2, in order to drop the file content from Laptop, it would need access
-to both USB and Server.</p>
-
-<p>Note that different repositories can be configured with different values of
-N. So just because Laptop has N=2, this does not prevent the number of
-copies falling to 1, when USB and Server have N=1. To avoid this,
-configure it in <code>.gitattributes</code>, which is shared between repositories
-using git.</p>
-
-</div>
-
-
-
-<div id="comments">
-
-
-
-
-<div class="addcomment">Comments on this page are closed.</div>
-
-</div>
-
-
-
-</div>
-
-<div id="footer" class="pagefooter">
-
-<div id="pageinfo">
-
-
-
-
-
-
-<div id="backlinks">
-Links:
-
-<a href="./bare_repositories.html">bare repositories</a>
-
-<a href="./future_proofing.html">future proofing</a>
-
-<a href="./preferred_content.html">preferred content</a>
-
-<a href="./special_remotes/S3.html">special remotes/S3</a>
-
-<a href="./tips/using_the_web_as_a_special_remote.html">tips/using the web as a special remote</a>
-
-<a href="./trust.html">trust</a>
-
-<a href="./use_case/Bob.html">use case/Bob</a>
-
-<a href="./walkthrough/backups.html">walkthrough/backups</a>
-
-
-</div>
-
-
-
-
-
-
-<div class="pagedate">
-Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>
-<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->
-</div>
-
-</div>
-
-
-<!-- from git-annex -->
-</div>
-
-</div>
-
-</body>
-</html>
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/design.html b/debian/git-annex/usr/share/doc/git-annex/html/design.html
deleted file mode 100644
index d7c1f31..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/design.html
+++ /dev/null
@@ -1,132 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>design</title>
-
-<link rel="stylesheet" href="style.css" type="text/css" />
-
-<link rel="stylesheet" href="local.css" type="text/css" />
-
-
-
-
-
-
-</head>
-<body>
-
-<div class="page">
-
-<div class="pageheader">
-<div class="header">
-<span>
-<span class="parentlinks">
-
-<a href="./index.html">git-annex</a>/
-
-</span>
-<span class="title">
-design
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-
-</div>
-
-
-<div class="sidebar">
-<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>
-
-<ul>
-<li><a href="./install.html">install</a></li>
-<li><a href="./assistant.html">assistant</a></li>
-<li><a href="./walkthrough.html">walkthrough</a></li>
-<li><a href="./tips.html">tips</a></li>
-<li><span class="createlink">bugs</span></li>
-<li><span class="createlink">todo</span></li>
-<li><span class="createlink">forum</span></li>
-<li><a href="./comments.html">comments</a></li>
-<li><a href="./contact.html">contact</a></li>
-<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>
-</ul>
-
-
-</div>
-
-
-<div id="pagebody">
-
-<div id="content">
-<p>git-annex's high-level design is mostly inherent in the data that it
-stores in git, and alongside git. See <a href="./internals.html">internals</a> for details.</p>
-
-<p>See <a href="./design/encryption.html">encryption</a> for design of encryption elements.</p>
-
-<p>See <a href="./design/assistant.html">assistant</a> for the design site for the git-annex <a href="./assistant.html">assistant</a>.</p>
-
-</div>
-
-
-
-<div id="comments">
-
-
-
-
-<div class="addcomment">Comments on this page are closed.</div>
-
-</div>
-
-
-
-</div>
-
-<div id="footer" class="pagefooter">
-
-<div id="pageinfo">
-
-
-
-
-
-
-<div id="backlinks">
-Links:
-
-<a href="./links/the_details.html">links/the details</a>
-
-
-</div>
-
-
-
-
-
-
-<div class="pagedate">
-Last edited <span class="date">Wed Oct 24 11:31:17 2012</span>
-<!-- Created <span class="date">Wed Oct 24 11:31:17 2012</span> -->
-</div>
-
-</div>
-
-
-<!-- from git-annex -->
-</div>
-
-</div>
-
-</body>
-</html>
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/design/assistant.html b/debian/git-annex/usr/share/doc/git-annex/html/design/assistant.html
deleted file mode 100644
index 80edd6d..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/design/assistant.html
+++ /dev/null
@@ -1,756 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>assistant</title>
-
-<link rel="stylesheet" href="../style.css" type="text/css" />
-
-<link rel="stylesheet" href="../local.css" type="text/css" />
-
-
-
-
-
-
-</head>
-<body>
-
-<div class="page">
-
-<div class="pageheader">
-<div class="header">
-<span>
-<span class="parentlinks">
-
-<a href="../index.html">git-annex</a>/
-
-<a href="../design.html">design</a>/
-
-</span>
-<span class="title">
-assistant
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-
-</div>
-
-
-<div class="sidebar">
-<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>
-
-<ul>
-<li><a href="../install.html">install</a></li>
-<li><a href="../assistant.html">assistant</a></li>
-<li><a href="../walkthrough.html">walkthrough</a></li>
-<li><a href="../tips.html">tips</a></li>
-<li><span class="createlink">bugs</span></li>
-<li><span class="createlink">todo</span></li>
-<li><span class="createlink">forum</span></li>
-<li><a href="../comments.html">comments</a></li>
-<li><a href="../contact.html">contact</a></li>
-<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>
-</ul>
-
-
-</div>
-
-
-<div id="pagebody">
-
-<div id="content">
-<p>This is the design site for the git-annex <a href="../assistant.html">assistant</a>.</p>
-
-<p>Parts of the design is still being fleshed out, still many ideas
-and use cases to add. Feel free to chip in with comments! --<span class="createlink">Joey</span></p>
-
-<h2>roadmap</h2>
-
-<ul>
-<li>Month 1 "like dropbox": [[!traillink inotify]] [[!traillink syncing]]</li>
-<li>Month 2 "shiny webapp": [[!traillink webapp]] [[!traillink progressbars]]</li>
-<li>Month 3 "easy setup": [[!traillink configurators]] [[!traillink pairing]]</li>
-<li>Month 4 "cloud": [[!traillink cloud]] [[!traillink transfer_control]]</li>
-<li>Month 5 "cloud continued": [[!traillink xmpp]] [[!traillink more_cloud_providers]]</li>
-<li>Month 6 "9k bonus round": [[!traillink desymlink]]</li>
-<li>Month 7: user-driven features and polishing;
-<a href="http://mirror.linux.org.au/linux.conf.au/2013/mp4/gitannex.mp4">presentation at LCA2013</a></li>
-<li>Month 8: [[!traillink Android]]</li>
-<li>Month 9: <a href="../videos.html">screencasts</a> and polishing</li>
-</ul>
-
-
-<p>We are, approximately, here:</p>
-
-<ul>
-<li>Months 10-11: more user-driven features and polishing</li>
-<li>Month 12: "Windows purgatory" <a href="./assistant/windows.html">Windows</a></li>
-</ul>
-
-
-<h2>porting</h2>
-
-<ul>
-<li><a href="./assistant/OSX.html">OSX</a> port is in fairly good shape, but still has some room for improvement</li>
-<li><a href="./assistant/android.html">android</a> port is just getting started</li>
-<li>Windows port does not exist yet</li>
-</ul>
-
-
-<h2>not yet on the map:</h2>
-
-<ul>
-<li><a href="./assistant/rate_limiting.html">rate limiting</a></li>
-<li><a href="./assistant/partial_content.html">partial content</a></li>
-<li><a href="./assistant/encrypted_git_remotes.html">encrypted git remotes</a></li>
-<li><a href="./assistant/deltas.html">deltas</a></li>
-<li><a href="./assistant/leftovers.html">leftovers</a></li>
-<li><span class="createlink">other todo items</span></li>
-</ul>
-
-
-<h2>polls</h2>
-
-<p>I post <a href="./assistant/polls.html">polls</a> occasionally to make decisions. You can vote!</p>
-
-<h2>blog</h2>
-
-<p>I'm blogging about my progress in the <span class="createlink">blog</span> on a semi-daily basis.
-Follow along!</p>
-
-</div>
-
-
-
-<div id="comments">
-<div class="feedlink">
-
-
-</div>
-<div class="comment" id="comment-2dc9d65b6aca226e578eb7af2a8c8f3c">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant.html#comment-2dc9d65b6aca226e578eb7af2a8c8f3c">comment 1</a>
-
-</div>
-
-<div class="inlinecontent">
-Will statically linked binaries be provided for say Linux, OSX and *BSD? I think having some statically linked binaries will certainly help and appeal to a lot of users.
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus">Jimmy</a>
-</span>
-
-
-&mdash; <span class="date">Sat Jun 2 08:06:37 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-071a8a4e7402d22af45051da70f9ccae">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant.html#comment-071a8a4e7402d22af45051da70f9ccae">comment 2</a>
-
-</div>
-
-<div class="inlinecontent">
-Jimmy, I hope to make it as easy as possible to install. I've been focusing on getting it directly into popular Linux distributions, rather than shipping my own binary. The OSX binary is static, and while I lack a OSX machine, I would like to get it easier to distribute to OSX users.
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="http://joeyh.name/">joeyh.name</a>
-</span>
-
-
-&mdash; <span class="date">Mon Jun 4 15:45:00 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-5a552c09975efea1fa4d81e2722bec4d">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant.html#comment-5a552c09975efea1fa4d81e2722bec4d">comment 3</a>
-
-</div>
-
-<div class="inlinecontent">
-I'd agree getting it into the main distros is the way to go, if you need OSX binaries, I could volunteer to setup an autobuilder to generate binaries for OSX users, however it would rely on users to have macports with the correct ports installed to use it (things like coreutils etc...)
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus">Jimmy</a>
-</span>
-
-
-&mdash; <span class="date">Thu Jun 7 16:22:55 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-e56bb71b2f6a200d167ee6b1bee6587e">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant.html#comment-e56bb71b2f6a200d167ee6b1bee6587e">comment 4</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>I always appreciate your OSX work Jimmy...</p>
-
-<p>Could it be put into macports?</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="http://joeyh.name/">joeyh.name</a>
-</span>
-
-
-&mdash; <span class="date">Thu Jun 7 21:56:52 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-c8c6ecfeff30f972792690a5bef58908">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant.html#comment-c8c6ecfeff30f972792690a5bef58908">comment 5</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>In relation to macports, I often found that haskell in macports are often behind other distros, and I'm not willing to put much effort into maintaining or updating those ports. I found that to build git-annex, installing macports manually and then installing haskell-platform from the upstream to be the best way to get the most up to date dependancies for git-annex.</p>
-
-<p>fyi in macports ghc is at version 6.10.4 and haskell platform is at version 2009.2, so there are a significant number of ports to update.</p>
-
-<p>I was thinking about this a bit more and I reckon it might be easier to try and build a self contained .pkg package and have all the needed binaries in a .app styled package, that would work well when the webapp comes along. I will take a look at it in a week or two (currently moving house so I dont have much time)</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus">Jimmy</a>
-</span>
-
-
-&mdash; <span class="date">Fri Jun 8 03:22:34 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-77e54e7ebfbd944c370173014b535c91">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant.html#comment-77e54e7ebfbd944c370173014b535c91">comment 6</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>It's not much for now... but see <a href="http://www.sgenomics.org/~jtang/gitbuilder-git-annex-x00-x86_64-apple-darwin10.8.0/">http://www.sgenomics.org/~jtang/gitbuilder-git-annex-x00-x86_64-apple-darwin10.8.0/</a> I'm ignoring the debian-stable and pristine-tar branches for now, as I am just building and testing on osx 10.7.</p>
-
-<p>Hope the autobuilder will help you develop the OSX side of things without having direct access to an osx machine! I will try and get gitbuilder to spit out appropriately named tarballs of the compiled binaries in a few days when I have more time.</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus">Jimmy</a>
-</span>
-
-
-&mdash; <span class="date">Fri Jun 8 11:21:18 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-135a31b1e86ecc315f121fe53da32276">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant.html#comment-135a31b1e86ecc315f121fe53da32276">comment 7</a>
-
-</div>
-
-<div class="inlinecontent">
-Thanks, that's already been useful to me. You might as well skip the debian-specific "bpo" tags too.
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="http://joeyh.name/">joeyh.name</a>
-</span>
-
-
-&mdash; <span class="date">Sat Jun 9 14:07:51 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-f65cad7d6e0a76a18b1801d27cd8de01">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant.html#comment-f65cad7d6e0a76a18b1801d27cd8de01">macports</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>The average OSX user has a) no idea what macports is, and b) will not be able to install it. Anything that requires a user to do anything with a commandline (or really anything other than using a GUI installer) is effectively a dealbreaker. For our use cases OSX is definitely a requirement, but it must only use standard OSX installation methods in order to be usable. Being in the appstore would be ideal, but standard dmg/pkg installers are still common enough that they are also acceptable.</p>
-
-<p>FWIW this is the same reason many git GUIs were not usable for our OSX users: they required separate installation of the git commandline tools.</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="http://wiggy.net/">Wichert</a>
-</span>
-
-
-&mdash; <span class="date">Tue Jun 12 09:00:34 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-52daf652d7b7629489f942063cec87b7">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant.html#comment-52daf652d7b7629489f942063cec87b7">Watch also possible with git?</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>Hi,</p>
-
-<p>it seems that you put a lot of efforts in handling race conditions. Thats great. I wonder if the watch can also be used with git (i.e. changes are commited into git and not as annex)? I know that other projects follow this idea but why using different tools if the git-annex assistant could handle both...</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="http://www.klomp.eu/">klomp.eu</a>
-</span>
-
-
-&mdash; <span class="date">Fri Jun 15 13:25:30 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-bcf6c709883506c83aa3111cc23bc7ff">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant.html#comment-bcf6c709883506c83aa3111cc23bc7ff">Homebrew instead of MacPorts</a>
-
-</div>
-
-<div class="inlinecontent">
-<p><a href="http://mxcl.github.com/homebrew/">Homebrew</a> is a much better package manager than MacPorts IMO.</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawldKnauegZulM7X6JoHJs7Gd5PnDjcgx-E">Matt</a>
-</span>
-
-
-&mdash; <span class="date">Fri Jun 22 00:26:02 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-bbcaeb83ceffab6ec34d34db157a489e">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant.html#comment-bbcaeb83ceffab6ec34d34db157a489e">comment 11</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>Yeah definately go with homebrew rather than macports if possible. macports and fink, whilst great systems, have a tendency to sort of create their own alternative-dimension of files within the system that just dont always feel particularly well integrated. As a result "brew" has become increasingly more popular to the point its almost ubuquitous now.</p>
-
-<p>Plus its brew-doctor thing is awesome.</p>
-
-<p>The best approach though thats agnostic to distro systems is to simply go for a generic installer.</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawneJXwhacIb0YvvdYFxhlNVpz6Wpg6V7AA">Shayne</a>
-</span>
-
-
-&mdash; <span class="date">Sun Aug 12 20:37:35 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-f953069e70bcd5f6a3f05d1eb306325b">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant.html#comment-f953069e70bcd5f6a3f05d1eb306325b">Multiple annexes?</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>Thank you for this great piece of software which is now becoming even better with the assistant.</p>
-
-<p>Just one question: will one instance of the assistant be able to track multiple git annex repositories each building up their own network of annexes OR would I need to run multiple instances of the assistant?</p>
-
-<p>Thanks,
-Jörn</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawlu-fdXIt_RF9ggvg4zP0yBbtjWQwHAMS4">Jörn</a>
-</span>
-
-
-&mdash; <span class="date">Thu Sep 20 12:10:29 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-6ddc18af9685a7ddbbe6e639e7b15feb">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant.html#comment-6ddc18af9685a7ddbbe6e639e7b15feb">comment 13</a>
-
-</div>
-
-<div class="inlinecontent">
-@Jörn, two days ago I added support in the webapp for multiple independent repositories. So you can create independent repos using it, and switch between them from a menu. Under the hood there are multiple git-annex assistant daemons running, but this is an implementation detail; it's not like these use any more memory or other resources than would a single daemon that managed multiple repositories.
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="http://joeyh.name/">joeyh.name</a>
-</span>
-
-
-&mdash; <span class="date">Thu Sep 20 12:21:11 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-a38695b8a047c997862345ffe881d952">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant.html#comment-a38695b8a047c997862345ffe881d952">you rock! &#x26; roadmap update?</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>joey, you rock. I just want to push on that point - it doesn't seem like there's that many tools that do what git-annex is trying to do out there, and you seem to be doing an incredible job at doing it, so this is great, keep going!</p>
-
-<p>i was wondering - i am glad to see the progress, but it is unclear to me where you actually are in the roadmap. are things going according to plan? are we at month 3? 4? or 1-4? :) just little updates on that roadmap section above would be quite useful!</p>
-
-<p>thanks again!</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://id.koumbit.net/anarcat">anarcat [id.koumbit.net]</a>
-</span>
-
-
-&mdash; <span class="date">Fri Sep 21 00:25:58 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-269c4c315e1dac0d6c18069a9616c767">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant.html#comment-269c4c315e1dac0d6c18069a9616c767">comment 15</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>We're on month 4 of work, and most of months 1-3 is done well enough for a first pass. Very little of what's listed in month 4 has happened yet, due to my being maybe 2 weeks behind schedule, but bits of <a href="./assistant/cloud.html">cloud</a> are being planned.</p>
-
-<p>I've made a small adjustment, I think it'll make sense to spend a month on user-driven features before getting into Android.</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="http://joeyh.name/">joeyh.name</a>
-</span>
-
-
-&mdash; <span class="date">Fri Sep 21 01:25:53 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-f5af9f1fe608daa7eb6f45a4539311d0">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant.html#comment-f5af9f1fe608daa7eb6f45a4539311d0">Maybe a DEB?2</a>
-
-</div>
-
-<div class="inlinecontent">
-Month 3 was all about easy setup, so I kind of expected to download a deb package and just install it, not to download a whole bunch of haskell libraries. Is there a chance that you will release some packages?
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://launchpad.net/~gdr-go2">gdr-go2</a>
-</span>
-
-
-&mdash; <span class="date">Thu Sep 27 05:44:14 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-3f7c7b52d5fadcf2e8a38e741d44ed61">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant.html#comment-3f7c7b52d5fadcf2e8a38e741d44ed61">comment 17</a>
-
-</div>
-
-<div class="inlinecontent">
-@gdr A package with the assistant is available in Debian unstable.
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="http://joeyh.name/">joeyh.name</a>
-</span>
-
-
-&mdash; <span class="date">Thu Sep 27 14:44:11 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-
-
-
-
-<div class="addcomment">Comments on this page are closed.</div>
-
-</div>
-
-
-
-</div>
-
-<div id="footer" class="pagefooter">
-
-<div id="pageinfo">
-
-
-
-
-
-
-<div id="backlinks">
-Links:
-
-<a href="../assistant.html">assistant</a>
-
-<a href="../design.html">design</a>
-
-
-</div>
-
-
-
-
-
-
-<div class="pagedate">
-Last edited <span class="date">Tue Apr 2 17:32:07 2013</span>
-<!-- Created <span class="date">Tue Apr 2 17:32:07 2013</span> -->
-</div>
-
-</div>
-
-
-<!-- from git-annex -->
-</div>
-
-</div>
-
-</body>
-</html>
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/design/assistant/OSX.html b/debian/git-annex/usr/share/doc/git-annex/html/design/assistant/OSX.html
deleted file mode 100644
index e88b326..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/design/assistant/OSX.html
+++ /dev/null
@@ -1,196 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>OSX</title>
-
-<link rel="stylesheet" href="../../style.css" type="text/css" />
-
-<link rel="stylesheet" href="../../local.css" type="text/css" />
-
-
-
-
-
-
-</head>
-<body>
-
-<div class="page">
-
-<div class="pageheader">
-<div class="header">
-<span>
-<span class="parentlinks">
-
-<a href="../../index.html">git-annex</a>/
-
-<a href="../../design.html">design</a>/
-
-<a href="../assistant.html">assistant</a>/
-
-</span>
-<span class="title">
-OSX
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-
-</div>
-
-
-<div class="sidebar">
-<p><img src="../../logo_small.png" width="150" height="115" class="img" /></p>
-
-<ul>
-<li><a href="../../install.html">install</a></li>
-<li><a href="../../assistant.html">assistant</a></li>
-<li><a href="../../walkthrough.html">walkthrough</a></li>
-<li><a href="../../tips.html">tips</a></li>
-<li><span class="createlink">bugs</span></li>
-<li><span class="createlink">todo</span></li>
-<li><span class="createlink">forum</span></li>
-<li><a href="../../comments.html">comments</a></li>
-<li><a href="../../contact.html">contact</a></li>
-<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>
-</ul>
-
-
-</div>
-
-
-<div id="pagebody">
-
-<div id="content">
-<p>Misc OSX porting things:</p>
-
-<ul>
-<li>autostart the assistant on OSX, using launchd <strong>done</strong></li>
-<li>icon to start webapp <strong>done</strong></li>
-<li>use FSEvents to detect file changes (better than kqueue) <strong>done</strong></li>
-<li>Use OSX's "network reachability functionality" to detect when on a network
-<a href="http://developer.apple.com/library/mac/#documentation/Networking/Conceptual/SystemConfigFrameworks/SC_Intro/SC_Intro.html#//apple_ref/doc/uid/TP40001065">http://developer.apple.com/library/mac/#documentation/Networking/Conceptual/SystemConfigFrameworks/SC_Intro/SC_Intro.html#//apple_ref/doc/uid/TP40001065</a></li>
-</ul>
-
-
-<p>Bugs:</p>
-
-<div class="feedlink">
-
-
-</div>
-
-
-
-
-
-</div>
-
-
-
-<div id="comments">
-<div class="feedlink">
-
-
-</div>
-<div class="comment" id="comment-7295a75b6b4af9abb6a6437381580f2f">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant/OSX.html#comment-7295a75b6b4af9abb6a6437381580f2f">Mount detection</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>regarding the current mount polling on OSX: why not use the NSNotificationCenter for being notified on mount events on OSX?</p>
-
-<p>Details see:</p>
-
-<ol>
-<li><a href="http://stackoverflow.com/questions/12409458/detect-when-a-volume-is-mounted-on-os-x">http://stackoverflow.com/questions/12409458/detect-when-a-volume-is-mounted-on-os-x</a></li>
-<li><a href="http://stackoverflow.com/questions/6062299/how-to-add-an-observer-to-nsnotificationcenter-in-a-c-class-using-objective-c">http://stackoverflow.com/questions/6062299/how-to-add-an-observer-to-nsnotificationcenter-in-a-c-class-using-objective-c</a></li>
-<li><a href="https://developer.apple.com/library/mac/#documentation/CoreFoundation/Reference/CFNotificationCenterRef/Reference/reference.html#//apple_ref/doc/uid/20001438">https://developer.apple.com/library/mac/#documentation/CoreFoundation/Reference/CFNotificationCenterRef/Reference/reference.html#//apple_ref/doc/uid/20001438</a></li>
-</ol>
-
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawlu-fdXIt_RF9ggvg4zP0yBbtjWQwHAMS4">Jörn</a>
-</span>
-
-
-&mdash; <span class="date">Fri Sep 21 05:23:34 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-
-
-
-
-<div class="addcomment">Comments on this page are closed.</div>
-
-</div>
-
-
-
-</div>
-
-<div id="footer" class="pagefooter">
-
-<div id="pageinfo">
-
-
-
-
-
-
-<div id="backlinks">
-Links:
-
-<a href="../assistant.html">assistant</a>
-
-
-</div>
-
-
-
-
-
-
-<div class="pagedate">
-Last edited <span class="date">Wed Mar 27 17:32:15 2013</span>
-<!-- Created <span class="date">Wed Mar 27 17:32:15 2013</span> -->
-</div>
-
-</div>
-
-
-<!-- from git-annex -->
-</div>
-
-</div>
-
-</body>
-</html>
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/design/assistant/cloud.html b/debian/git-annex/usr/share/doc/git-annex/html/design/assistant/cloud.html
deleted file mode 100644
index ef0f182..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/design/assistant/cloud.html
+++ /dev/null
@@ -1,324 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>cloud</title>
-
-<link rel="stylesheet" href="../../style.css" type="text/css" />
-
-<link rel="stylesheet" href="../../local.css" type="text/css" />
-
-
-
-
-
-
-</head>
-<body>
-
-<div class="page">
-
-<div class="pageheader">
-<div class="header">
-<span>
-<span class="parentlinks">
-
-<a href="../../index.html">git-annex</a>/
-
-<a href="../../design.html">design</a>/
-
-<a href="../assistant.html">assistant</a>/
-
-</span>
-<span class="title">
-cloud
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-
-</div>
-
-
-<div class="sidebar">
-<p><img src="../../logo_small.png" width="150" height="115" class="img" /></p>
-
-<ul>
-<li><a href="../../install.html">install</a></li>
-<li><a href="../../assistant.html">assistant</a></li>
-<li><a href="../../walkthrough.html">walkthrough</a></li>
-<li><a href="../../tips.html">tips</a></li>
-<li><span class="createlink">bugs</span></li>
-<li><span class="createlink">todo</span></li>
-<li><span class="createlink">forum</span></li>
-<li><a href="../../comments.html">comments</a></li>
-<li><a href="../../contact.html">contact</a></li>
-<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>
-</ul>
-
-
-</div>
-
-
-<div id="pagebody">
-
-<div id="content">
-<p>The <a href="./syncing.html">syncing</a> design assumes the network is connected. But it's often
-not in these pre-IPV6 days, so the cloud needs to be used to bridge between
-LANS.</p>
-
-<h2>The cloud notification problem (<strong>done</strong>)</h2>
-
-<p>Alice and Bob have repos, and there is a cloud remote they both share.
-Alice adds a file; the assistant transfers it to the cloud remote.
-How does Bob find out about it?</p>
-
-<p>There are two parts to this problem. Bob needs to find out that there's
-been a change to Alice's git repo. Then he needs to pull from Alice's git repo,
-or some other repo in the cloud she pushed to. Once both steps are done,
-the assistant will transfer the file from the cloud to Bob.</p>
-
-<ul>
-<li>dvcs-autosync uses xmppp; all repos need to have the same xmpp account
-configured, and send self-messages. An alternative would be to have
-different accounts that join a channel or message each other. Still needs
-account configuration.</li>
-<li>irc could be used. With a default irc network, and an agreed-upon channel,
-no configuration should be needed. IRC might be harder to get through
-some firewalls, and is prone to netsplits, etc. IRC networks have reasons
-to be wary of bots using them. Only basic notifications could be done over
-irc, as it has little security.</li>
-<li>When there's a ssh server involved, code could be run on it to notify
-logged-in clients. But this is not a general solution to this problem.</li>
-<li>pubsubhubbub does not seem like an option; its hubs want to pull down
-a feed over http.</li>
-</ul>
-
-
-<p>See <a href="./xmpp.html">xmpp</a> for design of git-annex's use of xmpp for push notifications.</p>
-
-<h2>storing git repos in the cloud <strong>done for XMPP</strong></h2>
-
-<p>Of course, one option is to just use github etc to store the git repo.</p>
-
-<p>Two things can store git repos in Amazon S3:
-* <a href="http://gabrito.com/post/storing-git-repositories-in-amazon-s3-for-high-availability">http://gabrito.com/post/storing-git-repositories-in-amazon-s3-for-high-availability</a>
-* <a href="http://wiki.cs.pdx.edu/oss2009/index/projects/gits3.html">http://wiki.cs.pdx.edu/oss2009/index/projects/gits3.html</a></p>
-
-<p>Another option is to not store the git repo in the cloud, but push/pull
-peer-to-peer. When peers cannot directly talk to one-another, this could be
-bounced through something like XMPP. This is <strong>done</strong> for <a href="./xmpp.html">xmpp</a>!</p>
-
-<p>Another option: Use <a href="https://github.com/blake2-ppc/git-remote-gcrypt">https://github.com/blake2-ppc/git-remote-gcrypt</a> to store
-git repo encrypted on cloud storage.</p>
-
-</div>
-
-
-
-<div id="comments">
-<div class="feedlink">
-
-
-</div>
-<div class="comment" id="comment-bff38388465cb7c83fd1440853a45410">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant/cloud.html#comment-bff38388465cb7c83fd1440853a45410">is ftp an option?</a>
-
-</div>
-
-<div class="inlinecontent">
-for people only having ftp-access to there storage.
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawn7Oyqusvn0oONFtVhCx5gRAcvPjyRMcBI">Michaël</a>
-</span>
-
-
-&mdash; <span class="date">Wed May 30 06:44:12 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-5aea3eb7e8aec1e2110b6a4f1a843433">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant/cloud.html#comment-5aea3eb7e8aec1e2110b6a4f1a843433">Cloud Service Limitations</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>Hey Joey!</p>
-
-<p>I'm not very tech savvy, but here is my question.
-I think for all cloud service providers, there is an upload limitation on how big one file may be.
-For example, I can't upload a file bigger than 100 MB on box.net.
-Does this affect git-annex at all? Will git-annex automatically split the file depending on the cloud provider or will I have to create small RAR archives of one large file to upload them?</p>
-
-<p>Thanks!
-James</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawkq0-zRhubO6kR9f85-5kALszIzxIokTUw">James</a>
-</span>
-
-
-&mdash; <span class="date">Sun Jun 10 22:15:04 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-c0b4e1ebdb4ac122b1b1e8723336544e">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant/cloud.html#comment-c0b4e1ebdb4ac122b1b1e8723336544e">re: cloud</a>
-
-</div>
-
-<div class="inlinecontent">
-Yes, git-annex has to split files for certian providers. I already added support for this as part of my first pass at supporting box.com, see <a href="../../tips/using_box.com_as_a_special_remote.html">using box.com as a special remote</a>.
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="http://joeyh.name/">joeyh.name</a>
-</span>
-
-
-&mdash; <span class="date">Mon Jun 11 00:48:08 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-5e27fcb1377b57315d90fc31268e4abb">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant/cloud.html#comment-5e27fcb1377b57315d90fc31268e4abb">OwnCloud</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>“Google drive (attractive because it's free, only 5 gb tho)”</p>
-
-<p>Just in case somebody also wants their 5GB of disk space in the cloud, consider using some of the <a href="http://owncloud.org/providers/">owncloud providers</a>. They also offer that amount, but they use free software for everything, using standard protocols (WebDav mostly, because is well supported in all OS).</p>
-
-<p>Git Annex works with them through davfs2, but it would be great if it could support this other program/protocol (OwnCloud/WebDAV) in a more integrated way.</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawk9XEh8pxrJxZxIkyK7lWaA7QG1UWt9lgU">Gugelplus</a>
-</span>
-
-
-&mdash; <span class="date">Mon Aug 27 16:43:19 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-
-
-
-
-<div class="addcomment">Comments on this page are closed.</div>
-
-</div>
-
-
-
-</div>
-
-<div id="footer" class="pagefooter">
-
-<div id="pageinfo">
-
-
-
-
-
-
-<div id="backlinks">
-Links:
-
-<a href="./comment_15_68c98a27083567f20c2e6bc2a760991b.html">comment 15 68c98a27083567f20c2e6bc2a760991b</a>
-
-<a href="./polls/prioritizing_special_remotes.html">polls/prioritizing special remotes</a>
-
-<a href="./xmpp.html">xmpp</a>
-
-
-</div>
-
-
-
-
-
-
-<div class="pagedate">
-Last edited <span class="date">Tue Jan 29 17:30:51 2013</span>
-<!-- Created <span class="date">Tue Jan 29 17:30:51 2013</span> -->
-</div>
-
-</div>
-
-
-<!-- from git-annex -->
-</div>
-
-</div>
-
-</body>
-</html>
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/design/assistant/deltas.html b/debian/git-annex/usr/share/doc/git-annex/html/design/assistant/deltas.html
deleted file mode 100644
index a6b7aaa..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/design/assistant/deltas.html
+++ /dev/null
@@ -1,176 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>deltas</title>
-
-<link rel="stylesheet" href="../../style.css" type="text/css" />
-
-<link rel="stylesheet" href="../../local.css" type="text/css" />
-
-
-
-
-
-
-</head>
-<body>
-
-<div class="page">
-
-<div class="pageheader">
-<div class="header">
-<span>
-<span class="parentlinks">
-
-<a href="../../index.html">git-annex</a>/
-
-<a href="../../design.html">design</a>/
-
-<a href="../assistant.html">assistant</a>/
-
-</span>
-<span class="title">
-deltas
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-
-</div>
-
-
-<div class="sidebar">
-<p><img src="../../logo_small.png" width="150" height="115" class="img" /></p>
-
-<ul>
-<li><a href="../../install.html">install</a></li>
-<li><a href="../../assistant.html">assistant</a></li>
-<li><a href="../../walkthrough.html">walkthrough</a></li>
-<li><a href="../../tips.html">tips</a></li>
-<li><span class="createlink">bugs</span></li>
-<li><span class="createlink">todo</span></li>
-<li><span class="createlink">forum</span></li>
-<li><a href="../../comments.html">comments</a></li>
-<li><a href="../../contact.html">contact</a></li>
-<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>
-</ul>
-
-
-</div>
-
-
-<div id="pagebody">
-
-<div id="content">
-<p>Speed up syncing of modified versions of existing files.</p>
-
-<p>One simple way is to find the key of the old version of a file that's
-being transferred, so it can be used as the basis for rsync, or any
-other similar transfer protocol.</p>
-
-<p>For remotes that don't use rsync, a poor man's version could be had by
-chunking each object into multiple parts. Only modified parts need be
-transferred. Sort of sub-keys to the main key being stored.</p>
-
-</div>
-
-
-
-<div id="comments">
-<div class="feedlink">
-
-
-</div>
-<div class="comment" id="comment-16106e3d96459d2de00f385071acaff5">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant/deltas.html#comment-16106e3d96459d2de00f385071acaff5">zsync?</a>
-
-</div>
-
-<div class="inlinecontent">
-zsync.moria.org.uk may have broken some of the ground here.
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawkfHTPsiAcHEEN7Xl7WxiZmYq-vX7azxFY">Vincent</a>
-</span>
-
-
-&mdash; <span class="date">Mon Sep 10 08:35:45 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-
-
-
-
-<div class="addcomment">Comments on this page are closed.</div>
-
-</div>
-
-
-
-</div>
-
-<div id="footer" class="pagefooter">
-
-<div id="pageinfo">
-
-
-
-
-
-
-<div id="backlinks">
-Links:
-
-<a href="../assistant.html">assistant</a>
-
-<a href="./polls/goals_for_April.html">polls/goals for April</a>
-
-
-</div>
-
-
-
-
-
-
-<div class="pagedate">
-Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>
-<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->
-</div>
-
-</div>
-
-
-<!-- from git-annex -->
-</div>
-
-</div>
-
-</body>
-</html>
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/design/assistant/polls.html b/debian/git-annex/usr/share/doc/git-annex/html/design/assistant/polls.html
deleted file mode 100644
index 27d4404..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/design/assistant/polls.html
+++ /dev/null
@@ -1,333 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>polls</title>
-
-<link rel="stylesheet" href="../../style.css" type="text/css" />
-
-<link rel="stylesheet" href="../../local.css" type="text/css" />
-
-
-
-
-
-
-</head>
-<body>
-
-<div class="page">
-
-<div class="pageheader">
-<div class="header">
-<span>
-<span class="parentlinks">
-
-<a href="../../index.html">git-annex</a>/
-
-<a href="../../design.html">design</a>/
-
-<a href="../assistant.html">assistant</a>/
-
-</span>
-<span class="title">
-polls
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-
-</div>
-
-
-<div class="sidebar">
-<p><img src="../../logo_small.png" width="150" height="115" class="img" /></p>
-
-<ul>
-<li><a href="../../install.html">install</a></li>
-<li><a href="../../assistant.html">assistant</a></li>
-<li><a href="../../walkthrough.html">walkthrough</a></li>
-<li><a href="../../tips.html">tips</a></li>
-<li><span class="createlink">bugs</span></li>
-<li><span class="createlink">todo</span></li>
-<li><span class="createlink">forum</span></li>
-<li><a href="../../comments.html">comments</a></li>
-<li><a href="../../contact.html">contact</a></li>
-<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>
-</ul>
-
-
-</div>
-
-
-<div id="pagebody">
-
-<div id="content">
-<div class="feedlink">
-
-
-</div>
-<div class="inlinepage">
-
-<div class="inlineheader">
-
-<span class="header">
-
-<a href="./polls/what_is_preventing_me_from_using_git-annex_assistant.html">what is preventing me from using git-annex assistant</a>
-
-</span>
-</div>
-
-<div class="inlinecontent">
-<p>My goal for this month is to get more people using the git-annex assistant,
-and fix issues that might be blocking you from using it. To do this,
-I'd like to get an idea about whether you're already using it,
-or what's keeping you from using it.</p>
-
-<p>If you use <code>git-annex</code> at the command line and have no reason to use the
-assistant, please instead fill in this poll on behalf of less technically
-adept friends or family -- what's preventing you from introducing them to
-the assistant?</p>
-
-<p>[[!poll open=yes expandable=yes 8 "I'm using the assistant!" 27 "I need a Windows port" 30 "I need an Android port" 3 "I need an IPhone port (not holding my breath)" 2 "Well, it's still in beta..." 11 "I want to, but have not had the time to try it" 5 "Just inertia. I've got this dropbox/whatever that already works.." 3 "It's too hard to install (please say why in comments)" 2 "Perceived recent increase of bug reports and thus sitting it out." 25 "Initially the lack of direct-mode. Now concerns about the safety of direct mode. Perhaps after the next release." 9 "I haven't always well understood the differences between commandline operation &amp; the assistant, so the differences would confuse me, and I found the command line more understandable &amp; less scary. Now trying to learn to like &amp; trust the assistant. :)" 21 "An Ubuntu PPA would be supercool! Thanks for your great work!!" 18 "Not yet in Debian sid amd64" 6 "Waiting for Fedora/CentOS rpm repository." 2 "throttling transfers, it upsets people when I saturate the connection" 2 "partial content" 1 "Not yet available in macports" 4 "No build yet for Nokia N9" 3 "Using only git-annex webapp to config does not seem to work: Create walkthough?" 5 "No build for OSX 10.6" 5 "Needs more focus on the UI." 1 "Just inertia. I don't have a Dropbox/whatever." 4 "Replaces files with a symlink mess." 2 "configurable option to only annex files meeting certian size or filename criteria" 4 "I'm really confused about how to make it sync with a remote NON-bare repository. I'm even afraid to try <code>git remote add</code>, since there is no clear method to completely forget a git-annex remote..." 5 "A build for te raspberry pi would be supercol!" 1 "Would be nice to exclude subfolders from the gui or through a config file" 1 "I wish I had transparently encrypted git repos in the cloud available, like jgit." 1 "too many inodes used in direct mode. maybe it's possible to keep more info as git objects instead?" 2 "I need to be able to restrict in which repo dirs changes get auto-committed" 1 "Provide .deb package" 1 "Better documentation/walkthroughs on using git-annex within an existing git repo. AKA mixed use" 1 "Union mounts to have a single view of file collection on the network" 1 "Ubuntu PPA does not build with webapp" 1 "I set it up, but am confused about what I set up! It would be great to be able to start from scratch."]]</p>
-
-<p>Feel free to write in your own reasons, or add a comment to give me more info.</p>
-
-</div>
-
-<div class="inlinefooter">
-
-<span class="pagedate">
-Posted <span class="date">Tue Apr 16 13:31:48 2013</span>
-</span>
-
-
-
-
-
-
-
-
-
-</div>
-
-</div>
-<div class="inlinepage">
-
-<div class="inlineheader">
-
-<span class="header">
-
-<a href="./polls/goals_for_April.html">goals for April</a>
-
-</span>
-</div>
-
-<div class="inlinecontent">
-<p>What should I work on in April? I expect I could get perhaps two of these
-features done in a month if I'm lucky. I have only 3 more funded months,
-and parts of one will be spent working on porting to Windows, so choose wisely!
---<span class="createlink">Joey</span></p>
-
-<p>[[!poll open=yes expandable=yes 4 "upload and download rate limiting" 15 "get webapp working on Android" 5 "deltas: speed up syncing modified versions of existing files" 8 "encrypted git remotes using git-remote-gcrypt" 0 "add support for more cloud storage remotes" 19 "don't work on features, work on making it easier to install and use" 2 "Handle duplicate files" 6 "direct mode (aka real files instead of symlinks) [already done --joey]" 3 "start windows port now"]]</p>
-
-<p>References:</p>
-
-<ul>
-<li><a href="./rate_limiting.html">rate limiting</a></li>
-<li><a href="./polls/Android.html">Android</a></li>
-<li><a href="./deltas.html">deltas</a> to speed up syncing modified files (at least for remotes using rsync)</li>
-<li><a href="./encrypted_git_remotes.html">encrypted git remotes</a></li>
-<li><a href="./more_cloud_providers.html">more cloud providers</a> (OpenStack Swift, Owncloud, Google drive,
-Dropbox, Mediafire, nimbus.io, Mega, etc.)</li>
-<li><a href="./polls/what_is_preventing_me_from_using_git-annex_assistant.html">old poll on "what is preventing me from using git-annex assistant"</a>
-(many of the items on it should be fixed now, but I have plenty of bug reports to chew on still)</li>
-</ul>
-
-
-</div>
-
-<div class="inlinefooter">
-
-<span class="pagedate">
-Posted <span class="date">Wed Apr 3 00:33:16 2013</span>
-</span>
-
-
-
-
-
-
-
-
-
-</div>
-
-</div>
-<div class="inlinepage">
-
-<div class="inlineheader">
-
-<span class="header">
-
-<a href="./polls/prioritizing_special_remotes.html">prioritizing special remotes</a>
-
-</span>
-</div>
-
-<div class="inlinecontent">
-<p>Background: git-annex supports storing data in various <a href="../../special_remotes.html">special remotes</a>.
-The git-annex assistant will make it easy to configure these, and easy
-configurators have already been built for a few: removable drives, rsync.net,
-locally paired systems, and remote servers with rsync.</p>
-
-<p>Help me prioritize my work: What special remote would you most like
-to use with the git-annex assistant?</p>
-
-<p>[[!poll open=yes 15 "Amazon S3 (done)" 12 "Amazon Glacier (done)" 9 "Box.com (done)" 70 "My phone (or MP3 player)" 18 "Tahoe-LAFS" 7 "OpenStack SWIFT" 28 "Google Drive"]]</p>
-
-<p>This poll is ordered with the options I consider easiest to build
-listed first. Mostly because git-annex already supports them and they
-only need an easy configurator. The ones at the bottom are likely to need
-significant work. See <a href="./cloud.html">cloud</a> for detailed discussion.</p>
-
-<p>Have another idea? Absolutely need two or more? Post comments..</p>
-
-</div>
-
-<div class="inlinefooter">
-
-<span class="pagedate">
-Posted <span class="date">Fri Feb 22 04:35:00 2013</span>
-</span>
-
-
-
-
-
-
-
-
-
-</div>
-
-</div>
-<div class="inlinepage">
-
-<div class="inlineheader">
-
-<span class="header">
-
-<a href="./polls/Android.html">Android</a>
-
-</span>
-</div>
-
-<div class="inlinecontent">
-<p>Help me choose a goal for the month of December. The last poll showed
-a lot of interest in using the git-annex assistant with phones, etc.</p>
-
-<p>Background: git-annex uses symbolic links in its repositories. This makes it
-hard to use with filesystems, such as FAT, that do not support symbolic links.
-FAT filesystems are the main storage available on some Android devices that
-have a micro-SD card. Other, newer Android devices don't have a SD card and so
-avoid this problem.</p>
-
-<p>I can either work on the idea described in
-<a href="./desymlink.html">desymlink</a>, which could solve the symlink problem and
-also could lead to a nicer workflow to editing files that are stored in
-git-annex.</p>
-
-<p>Or, I can work on <a href="./android.html">Android porting</a>, and try to
-get the assistant working on Android's built-in storage.</p>
-
-<p>[[!poll open=no 81 "solve the symlink problem first" 17 "port to Android first" 1 "other"]]</p>
-
-</div>
-
-<div class="inlinefooter">
-
-<span class="pagedate">
-Posted <span class="date">Thu Dec 6 00:33:02 2012</span>
-</span>
-
-
-
-
-
-
-
-
-
-</div>
-
-</div>
-
-
-
-
-
-</div>
-
-
-
-<div id="comments">
-
-
-
-
-<div class="addcomment">Comments on this page are closed.</div>
-
-</div>
-
-
-
-</div>
-
-<div id="footer" class="pagefooter">
-
-<div id="pageinfo">
-
-
-
-
-
-
-<div id="backlinks">
-Links:
-
-<a href="../assistant.html">assistant</a>
-
-
-</div>
-
-
-
-
-
-
-<div class="pagedate">
-Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>
-<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->
-</div>
-
-</div>
-
-
-<!-- from git-annex -->
-</div>
-
-</div>
-
-</body>
-</html>
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/design/assistant/webapp.html b/debian/git-annex/usr/share/doc/git-annex/html/design/assistant/webapp.html
deleted file mode 100644
index c7caeae..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/design/assistant/webapp.html
+++ /dev/null
@@ -1,344 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>webapp</title>
-
-<link rel="stylesheet" href="../../style.css" type="text/css" />
-
-<link rel="stylesheet" href="../../local.css" type="text/css" />
-
-
-
-
-
-
-</head>
-<body>
-
-<div class="page">
-
-<div class="pageheader">
-<div class="header">
-<span>
-<span class="parentlinks">
-
-<a href="../../index.html">git-annex</a>/
-
-<a href="../../design.html">design</a>/
-
-<a href="../assistant.html">assistant</a>/
-
-</span>
-<span class="title">
-webapp
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-
-</div>
-
-
-<div class="sidebar">
-<p><img src="../../logo_small.png" width="150" height="115" class="img" /></p>
-
-<ul>
-<li><a href="../../install.html">install</a></li>
-<li><a href="../../assistant.html">assistant</a></li>
-<li><a href="../../walkthrough.html">walkthrough</a></li>
-<li><a href="../../tips.html">tips</a></li>
-<li><span class="createlink">bugs</span></li>
-<li><span class="createlink">todo</span></li>
-<li><span class="createlink">forum</span></li>
-<li><a href="../../comments.html">comments</a></li>
-<li><a href="../../contact.html">contact</a></li>
-<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>
-</ul>
-
-
-</div>
-
-
-<div id="pagebody">
-
-<div id="content">
-<p>The webapp is a web server that displays a shiny interface.</p>
-
-<h2>performance</h2>
-
-<p>Having the webapp open while transfers are
-running uses significant CPU just for the browser to update the progress
-bar. Unsurprising, since the webapp is sending the browser a new <code>&lt;div&gt;</code>
-each time. Updating the DOM instead from javascript would avoid that;
-the webapp just needs to send the javascript either a full <code>&lt;div&gt;</code> or a
-changed percentage and quantity complete to update a single progress bar.</p>
-
-<p>(Another reason to do this is it'll cut down on the refreshes, which
-sometimes make browsers ignore clicks on UI elements like the pause button,
-if the transfer display refreshes just as the click is made.)</p>
-
-<h2>other features</h2>
-
-<ul>
-<li>there could be a UI to export a file, which would make it be served up
-over http by the web app</li>
-<li>there could be a UI (some javascript thing) in the web browser to
-submit urls to the web app to be added to the annex and downloaded.
-See: <span class="createlink">wishlist: an &#34;assistant&#34; for web-browsing -- tracking the sources of the downloads</span></li>
-<li>Display the <code>inotify max_user_watches</code> exceeded message. <strong>done</strong></li>
-<li>Display something sane when kqueue runs out of file descriptors.</li>
-<li>allow removing git remotes <strong>done</strong></li>
-<li>allow disabling syncing to here, which should temporarily disable all
-local syncing. <strong>done</strong></li>
-</ul>
-
-
-<h2>better headless support</h2>
-
-<p><code>--listen</code> is insecure, and using HTTPS would still not make it 100% secure
-as there would be no way for the browser to verify its certificate.</p>
-
-<p>I do have a better idea, but it'd be hard to implement.
-<code>git annex webapp --remote user@host:dir</code> could ssh to the remote host,
-run the webapp there, listening only on localhost, and then send the
-port the webapp chose back over the ssh connection. Then the same
-ssh connection could be reused (using ssh connection caching) to set up
-port forwarding from a port on the local host to the remote webapp.</p>
-
-<p>This would need to handle the first run case too, which would require
-forwarding a second port once the webapp made the repository and
-the second webapp started up.</p>
-
-<h2>first start <strong>done</strong></h2>
-
-<ul>
-<li>make git repo <strong>done</strong></li>
-<li>generate a nice description like "joey@hostname Desktop/annex" <strong>done</strong></li>
-<li>record repository that was made, and use it next time run <strong>done</strong></li>
-<li>write a pid file, to prevent more than one first-start process running
-at once <strong>done</strong></li>
-</ul>
-
-
-<h2>security <strong>acceptable/done</strong></h2>
-
-<ul>
-<li>Listen only to localhost. <strong>done</strong></li>
-<li>Instruct the user's web browser to open an url that contains a secret
-token. This guards against other users on the same system. <strong>done</strong>
-(I would like to avoid passwords or other authentication methods,
-it's your local system.)</li>
-<li>Don't pass the url with secret token directly to the web browser,
-as that exposes it to <code>ps</code>. Instead, write a html file only the user can read,
-that redirects to the webapp. <strong>done</strong></li>
-<li>Alternative for Linux at least would be to write a small program using
-GTK+ Webkit, that runs the webapp, and can know what user ran it, avoiding
-needing authentication.</li>
-</ul>
-
-
-</div>
-
-
-
-<div id="comments">
-<div class="feedlink">
-
-
-</div>
-<div class="comment" id="comment-66f9834d5ad31c3d31c2078845cc6a0f">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant/webapp.html#comment-66f9834d5ad31c3d31c2078845cc6a0f">Secret URL token</a>
-
-</div>
-
-<div class="inlinecontent">
-<blockquote><p>Instruct the user's web browser to open an url that contains a secret token. This guards against other users on the same system.</p></blockquote>
-
-<p>How will you implement that? Running "sensible-browser URL" would be the obvious way, but the secret URL would show up in a well timed ps listing. (And depending on the browser, ps may show the URL the entire time it's running.)</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="Signed in">
-
-<a href="?page=yatesa&amp;do=goto">yatesa</a>
-
-</span>
-
-
-&mdash; <span class="date">Mon Jun 18 23:41:16 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-ded5c5608cbc936a6e5575e52e4744dd">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant/webapp.html#comment-ded5c5608cbc936a6e5575e52e4744dd">ARM support</a>
-
-</div>
-
-<div class="inlinecontent">
-The closure of <a href="http://hackage.haskell.org/trac/ghc/ticket/5839">this</a> ticket hopefully marks the end of TH issues on ARM. As of 7.4.2, GHC's linker has enough ARM support to allow a selection of common packages compile on my PandaBoard. That being said, it hasn't had a whole lot of testing so it's possible I still need to implement a few relocation types.
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawlup4hyZo4eCjF8T85vfRXMKBxGj9bMdl0">Ben</a>
-</span>
-
-
-&mdash; <span class="date">Fri Jul 13 12:51:15 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-4af69b775df8a89c570165f608b29672">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant/webapp.html#comment-4af69b775df8a89c570165f608b29672">comment 3</a>
-
-</div>
-
-<div class="inlinecontent">
-Using twitter-bootstrap for the webapp - this might be a wishlist item, but would it be possible to ensure that the webapp's css uses twitter-bootstrap classes. It would make theming much easier in the long run and it would give you a nice modern look with a low amount of effort.
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="Signed in">
-
-<a href="?page=jtang&amp;do=goto">jtang</a>
-
-</span>
-
-
-&mdash; <span class="date">Thu Jul 26 13:35:18 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-3a63f1e7dcdd65b98769280dc73a3d59">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant/webapp.html#comment-3a63f1e7dcdd65b98769280dc73a3d59">comment 4</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>So, Yesod's scaffolded site actually does use bootstrap, but I didn't use the scaffolded site so don't have it. I am not quite to the point of doing any theming of the webapp, but I do have this nice example of how to put in bootstrap right here..</p>
-
-<p>By the way, if anyone would like to play with the html templates for the webapp, the main html template is <code>templates/default-layout.hamlet</code>. Uses a slightly weird template markup, but plain html will also work. And there's also the <code>static/</code> directory; every file in there will be compiled directly into the git-annex binary, and is available at <code>http://localhost:port/static/$file</code> in the webapp. See the favicon link in <code>default-layout.hamlet</code> of how to construct a type-safe link to a static file: <code>href=@{StaticR favicon_ico}</code>. That's all you really need to theme the webapp, without doing any real programming!</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="http://joeyh.name/">joeyh.name</a>
-</span>
-
-
-&mdash; <span class="date">Thu Jul 26 13:45:28 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-
-
-
-
-<div class="addcomment">Comments on this page are closed.</div>
-
-</div>
-
-
-
-</div>
-
-<div id="footer" class="pagefooter">
-
-<div id="pageinfo">
-
-
-
-
-
-
-<div id="backlinks">
-Links:
-
-<a href="./configurators.html">configurators</a>
-
-<a href="./progressbars.html">progressbars</a>
-
-
-</div>
-
-
-
-
-
-
-<div class="pagedate">
-Last edited <span class="date">Mon Apr 8 17:31:47 2013</span>
-<!-- Created <span class="date">Mon Apr 8 17:31:47 2013</span> -->
-</div>
-
-</div>
-
-
-<!-- from git-annex -->
-</div>
-
-</div>
-
-</body>
-</html>
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/design/assistant/xmpp.html b/debian/git-annex/usr/share/doc/git-annex/html/design/assistant/xmpp.html
deleted file mode 100644
index 5bc9e2c..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/design/assistant/xmpp.html
+++ /dev/null
@@ -1,345 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>xmpp</title>
-
-<link rel="stylesheet" href="../../style.css" type="text/css" />
-
-<link rel="stylesheet" href="../../local.css" type="text/css" />
-
-
-
-
-
-
-</head>
-<body>
-
-<div class="page">
-
-<div class="pageheader">
-<div class="header">
-<span>
-<span class="parentlinks">
-
-<a href="../../index.html">git-annex</a>/
-
-<a href="../../design.html">design</a>/
-
-<a href="../assistant.html">assistant</a>/
-
-</span>
-<span class="title">
-xmpp
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-
-</div>
-
-
-<div class="sidebar">
-<p><img src="../../logo_small.png" width="150" height="115" class="img" /></p>
-
-<ul>
-<li><a href="../../install.html">install</a></li>
-<li><a href="../../assistant.html">assistant</a></li>
-<li><a href="../../walkthrough.html">walkthrough</a></li>
-<li><a href="../../tips.html">tips</a></li>
-<li><span class="createlink">bugs</span></li>
-<li><span class="createlink">todo</span></li>
-<li><span class="createlink">forum</span></li>
-<li><a href="../../comments.html">comments</a></li>
-<li><a href="../../contact.html">contact</a></li>
-<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>
-</ul>
-
-
-</div>
-
-
-<div id="pagebody">
-
-<div id="content">
-<p>The git-annex assistant uses XMPP to communicate between peers that
-cannot directly talk to one-another. A typical scenario is two users
-who share a repository, that is stored in the <a href="./cloud.html">cloud</a>.</p>
-
-<h3>TODO</h3>
-
-<ul>
-<li>Prevent idle disconnection. Probably means sending or receiving pings,
-but would prefer to avoid eg pinging every 60 seconds as some clients do.</li>
-<li>Do git-annex clients sharing an account with regular clients cause confusing
-things to happen?
-See <a href="http://git-annex.branchable.com/design/assistant/blog/day_114__xmpp/#comment-aaba579f92cb452caf26ac53071a6788">http://git-annex.branchable.com/design/assistant/blog/day_114__xmpp/#comment-aaba579f92cb452caf26ac53071a6788</a></li>
-<li>Support use of a single XMPP account with several separate and
-independant git-annex repos. This probably works for the simple
-push notification use of XMPP, since unknown UUIDs will just be ignored.
-But XMPP pairing and the pushes over XMPP assume that anyone you're
-paired with is intending to sync to your repository.</li>
-</ul>
-
-
-<h2>design goals</h2>
-
-<ol>
-<li><p>Avoid user-visible messages. dvcs-autosync uses XMPP similarly, but
-sends user-visible messages. Avoiding user-visible messages lets
-the user configure git-annex to use his existing XMPP account
-(eg, Google Talk).</p></li>
-<li><p>Send notifications to buddies. dvcs-autosync sends only self-messages,
-but that requires every node have the same XMPP account configured.
-git-annex should support that mode, but it should also send notifications
-to a user's buddies. (This will also allow for using XMPP for pairing
-in the future.)</p></li>
-<li><p>Don't make account appear active. Just because git-annex is being an XMPP
-client, it doesn't mean that it wants to get chat messages, or make the
-user appear active when he's not using his chat program.</p></li>
-</ol>
-
-
-<h2>protocol</h2>
-
-<p>To avoid relying on XMPP extensions, git-annex communicates
-using presence messages, and chat messages (with empty body tags,
-so clients don't display them).</p>
-
-<p>git-annex sets a negative presence priority, to avoid any regular messages
-getting eaten by its clients. It also sets itself extended away.
-Note that this means that chat messages always have to be directed at
-specific git-annex clients.</p>
-
-<p>To the presence and chat messages, it adds its own tag as
-<a href="http://xmpp.org/rfcs/rfc6121.html#presence-extended">extended content</a>.
-The xml namespace is "git-annex" (not an URL because I hate wasting bandwidth).</p>
-
-<p>To indicate it's pushed changes to a git repo with a given UUID, a message
-that is sent to all buddies and other clients using the account (no
-explicit pairing needed), it uses a broadcast presence message containing:</p>
-
-<pre><code>&lt;git-annex xmlns='git-annex' push="uuid[,uuid...]" /&gt;
-</code></pre>
-
-<p>Multiple UUIDs can be listed when multiple clients were pushed. If the
-git repo does not have a git-annex UUID, an empty string is used.</p>
-
-<p>To query if other git-annex clients are around, a presence message is used,
-containing:</p>
-
-<pre><code>&lt;git-annex xmlns='git-annex' query="" /&gt;
-</code></pre>
-
-<p>For pairing, a chat message is sent to every known git-annex client,
-containing:</p>
-
-<pre><code>&lt;git-annex xmlns='git-annex' pairing="PairReq|PairAck|PairDone uuid" /&gt;
-</code></pre>
-
-<h3>git push over XMPP</h3>
-
-<p>To indicate that we could push over XMPP, a chat message is sent,
-to each known client of each XMPP remote.</p>
-
-<pre><code>&lt;git-annex xmlns='git-annex' canpush="" /&gt;
-</code></pre>
-
-<p>To request that a remote push to us, a chat message can be sent.</p>
-
-<pre><code>&lt;git-annex xmlns='git-annex' pushrequest="" /&gt;
-</code></pre>
-
-<p>When replying to an canpush message, this is directed at the specific
-client that indicated it could push. To solicit pushes from all clients,
-the message has to be sent directed individually to each client.</p>
-
-<p>When a peer is ready to send a git push, it sends:</p>
-
-<pre><code>&lt;git-annex xmlns='git-annex' startingpush="" /&gt;
-</code></pre>
-
-<p>The receiver runs <code>git receive-pack</code>, and sends back its output in
-one or more chat messages, directed to the client that is pushing:</p>
-
-<pre><code>&lt;git-annex xmlns='git-annex' rp="N"&gt;
-007b27ca394d26a05d9b6beefa1b07da456caa2157d7 refs/heads/git-annex report-status delete-refs side-band-64k quiet ofs-delta
-&lt;/git-annex&gt;
-</code></pre>
-
-<p>The sender replies with the data from <code>git push</code>, in
-one or more chat messages, directed to the receiver:</p>
-
-<pre><code>&lt;git-annex xmlns='git-annex' sp="N"&gt;
-data
-&lt;/git-annex&gt;
-</code></pre>
-
-<p>The value of rp and sp used to be empty, but now it's a sequence number.
-This indicates the sequence of this packet, counting from 1. The receiver
-and sender each have their own sequence numbers. These sequence numbers
-are not really used yet, but are available for debugging.</p>
-
-<p>When <code>git receive-pack</code> exits, the receiver indicates its exit
-status with a chat message, directed at the sender:</p>
-
-<pre><code>&lt;git-annex xmlns='git-annex' rpdone="0" /&gt;
-</code></pre>
-
-<h3>security</h3>
-
-<p>Data git-annex sends over XMPP will be visible to the XMPP
-account's buddies, to the XMPP server, and quite likely to other interested
-parties. So it's important to consider the security exposure of using it.</p>
-
-<p>Even if git-annex sends only a single bit notification, this lets attackers
-know when the user is active and changing files. Although the assistant's other
-syncing activities can somewhat mask this.</p>
-
-<p>As soon as git-annex does anything unlike any other client, an attacker can
-see how many clients are connected for a user, and fingerprint the ones
-running git-annex, and determine how many clients are running git-annex.</p>
-
-<p>If git-annex sent the UUID of the remote it pushed to, this would let
-attackers determine how many different remotes are being used,
-and map some of the connections between clients and remotes.</p>
-
-<p>An attacker could replay push notification messages, reusing UUIDs it's
-observed. This would make clients pull repeatedly, perhaps as a DOS.</p>
-
-</div>
-
-
-
-<div id="comments">
-<div class="feedlink">
-
-
-</div>
-<div class="comment" id="comment-9f0899c3cbe02e70727bdf53dcf7d187">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant/xmpp.html#comment-9f0899c3cbe02e70727bdf53dcf7d187">xmlns</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>A minor point, but is saving a couple of bytes per message worth using a <a href="http://www.w3.org/TR/REC-xml-names/#iri-use">deprecated feature</a> of the namespaces specification? This is not technically <em>breaking</em> the current specification, since "git-annex" is of course still a (relative) URI reference; and anyway chances of problems are, I guess, slim. But is it the lesser of two bugs?</p>
-
-<p>The shortest moderately sane absolute URI containing "git-annex" would probably be "data:,git-annex".</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="http://meep.pl/">meep.pl</a>
-</span>
-
-
-&mdash; <span class="date">Sun Nov 11 05:00:01 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-509b6646daee0dfe1c72f898b12532db">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/assistant/xmpp.html#comment-509b6646daee0dfe1c72f898b12532db">Plans for two factor authentication or oath?</a>
-
-</div>
-
-<div class="inlinecontent">
-Are there plans to support google's two factor authentication? Right now I have to use an application specific password.
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawkurjhi0CRJvgm7QNaZDWS9hitBtavqIpc">Bret</a>
-</span>
-
-
-&mdash; <span class="date">Sun Apr 14 20:58:04 2013</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-
-
-
-
-<div class="addcomment">Comments on this page are closed.</div>
-
-</div>
-
-
-
-</div>
-
-<div id="footer" class="pagefooter">
-
-<div id="pageinfo">
-
-
-
-
-
-
-<div id="backlinks">
-Links:
-
-<a href="./cloud.html">cloud</a>
-
-<a href="../../special_remotes/xmpp.html">special remotes/xmpp</a>
-
-
-</div>
-
-
-
-
-
-
-<div class="pagedate">
-Last edited <span class="date">Wed Apr 10 20:33:24 2013</span>
-<!-- Created <span class="date">Wed Apr 10 20:33:24 2013</span> -->
-</div>
-
-</div>
-
-
-<!-- from git-annex -->
-</div>
-
-</div>
-
-</body>
-</html>
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/design/encryption.html b/debian/git-annex/usr/share/doc/git-annex/html/design/encryption.html
deleted file mode 100644
index 5c29ce7..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/design/encryption.html
+++ /dev/null
@@ -1,524 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>encryption</title>
-
-<link rel="stylesheet" href="../style.css" type="text/css" />
-
-<link rel="stylesheet" href="../local.css" type="text/css" />
-
-
-
-
-
-
-</head>
-<body>
-
-<div class="page">
-
-<div class="pageheader">
-<div class="header">
-<span>
-<span class="parentlinks">
-
-<a href="../index.html">git-annex</a>/
-
-<a href="../design.html">design</a>/
-
-</span>
-<span class="title">
-encryption
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-
-</div>
-
-
-<div class="sidebar">
-<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>
-
-<ul>
-<li><a href="../install.html">install</a></li>
-<li><a href="../assistant.html">assistant</a></li>
-<li><a href="../walkthrough.html">walkthrough</a></li>
-<li><a href="../tips.html">tips</a></li>
-<li><span class="createlink">bugs</span></li>
-<li><span class="createlink">todo</span></li>
-<li><span class="createlink">forum</span></li>
-<li><a href="../comments.html">comments</a></li>
-<li><a href="../contact.html">contact</a></li>
-<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>
-</ul>
-
-
-</div>
-
-
-<div id="pagebody">
-
-<div id="content">
-<p>This was the design doc for <a href="../encryption.html">encryption</a> and is preserved for
-the curious. For an example of using git-annex with an encrypted S3 remote,
-see <a href="../tips/using_Amazon_S3.html">using Amazon S3</a>.</p>
-
-<div class="toc">
- <ol>
- <li class="L2"><a href="#index1h2">encryption backends</a>
- </li>
- <li class="L2"><a href="#index2h2">encryption key management</a>
- </li>
- <li class="L2"><a href="#index3h2">filename enumeration</a>
- </li>
- <li class="L2"><a href="#index4h2">other use of the symmetric cipher</a>
- </li>
- <li class="L2"><a href="#index5h2">risks</a>
- </li>
- </ol>
-</div>
-
-
-<h2><a name="index1h2"></a>encryption backends</h2>
-
-<p>It makes sense to support multiple encryption backends. So, there
-should be a way to tell what backend is responsible for a given filename
-in an encrypted remote. (And since special remotes can also store files
-unencrypted, differentiate from those as well.)</p>
-
-<p>The rest of this page will describe a single encryption backend using GPG.
-Probably only one will be needed, but who knows? Maybe that backend will
-turn out badly designed, or some other encryptor needed. Designing
-with more than one encryption backend in mind helps future-proofing.</p>
-
-<h2><a name="index2h2"></a>encryption key management</h2>
-
-<p>[[!template <span class="error">Error: failed to process template <span class="createlink">note</span> </span>]]</p>
-
-<p>Data is encrypted by GnuPG, using a symmetric cipher. The cipher is
-generated by GnuPG when the special remote is created. By default the
-best entropy pool is used, hence the generation may take a while; One
-can use <code>initremote</code> with <code>highRandomQuality=false</code> or <code>--fast</code> options
-to speed up things, but at the expense of using random numbers of a
-lower quality. The generated cipher is then checked into your git
-repository, encrypted using one or more OpenPGP public keys. This scheme
-allows new OpenPGP private keys to be given access to content that has
-already been stored in the remote.</p>
-
-<p>Different encrypted remotes need to be able to each use different ciphers.
-Allowing multiple ciphers to be used within a single remote would add a lot
-of complexity, so is not planned to be supported.
-Instead, if you want a new cipher, create a new S3 bucket, or whatever.
-There does not seem to be much benefit to using the same cipher for
-two different encrypted remotes.</p>
-
-<p>So, the encrypted cipher could just be stored with the rest of a remote's
-configuration in <code>remotes.log</code> (see <a href="../internals.html">internals</a>). When <code>git
-annex intiremote</code> makes a remote, it can generate a random symmetric
-cipher, and encrypt it with the specified gpg key. To allow another gpg
-public key access, update the encrypted cipher to be encrypted to both gpg
-keys.</p>
-
-<h2><a name="index3h2"></a>filename enumeration</h2>
-
-<p>If the names of files are encrypted or securely hashed, or whatever is
-chosen, this makes it harder for git-annex (let alone untrusted third parties!)
-to get a list of the files that are stored on a given enrypted remote.
-But, does git-annex really ever need to do such an enumeration?</p>
-
-<p>Apparently not. <code>git annex unused --from remote</code> can now check for
-unused data that is stored on a remote, and it does so based only on
-location log data for the remote. This assumes that the location log is
-kept accurately.</p>
-
-<p>What about <code>git annex fsck --from remote</code>? Such a command should be able to,
-for each file in the repository, contact the encrypted remote to check
-if it has the file. This can be done without enumeration, although it will
-mean running gpg once per file fscked, to get the encrypted filename.</p>
-
-<p>So, the files stored in the remote should be encrypted. But, it needs to
-be a repeatable encryption, so they cannot just be gpg encrypted, that
-would yeild a new name each time. Instead, HMAC is used. Any hash could
-be used with HMAC. SHA-1 is the default, but <a href="../encryption.html">other hashes</a>
-can be chosen for new remotes.</p>
-
-<p>It was suggested that it might not be wise to use the same cipher for both
-gpg and HMAC. Being paranoid, it's best not to tie the security of one
-to the security of the other. So, the encrypted cipher described above is
-actually split in two; half is used for HMAC, and half for gpg.</p>
-
-<hr />
-
-<p>Does the HMAC cipher need to be gpg encrypted? Imagine if it were
-stored in plainext in the git repository. Anyone who can access
-the git repository already knows the actual filenames, and typically also
-the content hashes of annexed content. Having access to the HMAC cipher
-could perhaps be said to only let them verify that data they already
-know.</p>
-
-<p>While this seems a pretty persuasive argument, I'm not 100% convinced, and
-anyway, most times that the HMAC cipher is needed, the gpg cipher is also
-needed. Keeping the HMAC cipher encrypted does slow down two things:
-dropping content from encrypted remotes, and checking if encrypted remotes
-really have content. If it's later determined to be safe to not encrypt the
-HMAC cipher, the current design allows changing that, even for existing
-remotes.</p>
-
-<h2><a name="index4h2"></a>other use of the symmetric cipher</h2>
-
-<p>The symmetric cipher can be used to encrypt other content than the content
-sent to the remote. In particular, it may make sense to encrypt whatever
-access keys are used by the special remote with the cipher, and store that
-in remotes.log. This way anyone whose gpg key has been given access to
-the cipher can get access to whatever other credentials are needed to
-use the special remote.</p>
-
-<h2><a name="index5h2"></a>risks</h2>
-
-<p>A risk of this scheme is that, once the symmetric cipher has been obtained, it
-allows full access to all the encrypted content. This scheme does not allow
-revoking a given gpg key access to the cipher, since anyone with such a key
-could have already decrypted the cipher and stored a copy.</p>
-
-<p>If git-annex stores the decrypted symmetric cipher in memory, then there
-is a risk that it could be intercepted from there by an attacker. Gpg
-amelorates these type of risks by using locked memory. For git-annex, note
-that an attacker with local machine access can tell at least all the
-filenames and metadata of files stored in the encrypted remote anyway,
-and can access whatever content is stored locally.</p>
-
-<p>This design does not support obfuscating the size of files by chunking
-them, as that would have added a lot of complexity, for dubious benefits.
-If the untrusted party running the encrypted remote wants to know file sizes,
-they could correlate chunks that are accessed together. Encrypting data
-changes the original file size enough to avoid it being used as a direct
-fingerprint at least.</p>
-
-</div>
-
-
-
-<div id="comments">
-<div class="feedlink">
-
-
-</div>
-<div class="comment" id="comment-4675041b2a74c1d27846f59c6d281880">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/encryption.html#comment-4675041b2a74c1d27846f59c6d281880">comment 1</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>New encryption keys could be used for different directories/files/patterns/times/whatever. One could then encrypt this new key for the public keys of other people/machines and push them out along with the actual data. This would allow some level of access restriction or future revocation. git-annex would need to keep track of which files can be decrypted with which keys. I am undecided if that information needs to be encrypted or not.</p>
-
-<p>Encrypted object files should be checksummed in encrypted form so that it's possible to verify integrity without knowing any keys. Same goes for encrypted keys, etc.</p>
-
-<p>Chunking files in this context seems like needless overkill. This might make sense to store a DVD image on CDs or similar, at some point. But not for encryption, imo. Coming up with sane chunk sizes for all use cases is literally impossible and as you pointed out, correlation by the remote admin is trivial.</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U">Richard</a>
-</span>
-
-
-&mdash; <span class="date">Sun Apr 3 16:03:14 2011</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-cc025ab2686094fb313a0f96e2ddd64f">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/encryption.html#comment-cc025ab2686094fb313a0f96e2ddd64f">comment 2</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>I see no use case for verifying encrypted object files w/o access to the encryption key. And possible use cases for not allowing anyone to verify your data.</p>
-
-<p>If there are to be multiple encryption keys usable within a single encrypted remote, than they would need to be given some kind of name (a since symmetric key is used, there is no pubkey to provide a name), and the name encoded in the files stored in the remote. While certainly doable I'm not sold that adding a layer of indirection is worthwhile. It only seems it would be worthwhile if setting up a new encrypted remote was expensive to do. Perhaps that could be the case for some type of remote other than S3 buckets.</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="http://joey.kitenet.net/">joey</a>
-</span>
-
-
-&mdash; <span class="date">Tue Apr 5 14:41:49 2011</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-4f78277c4847fbb12575162da684d130">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/encryption.html#comment-4f78277c4847fbb12575162da684d130">comment 3</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>Assuming you're storing your encrypted annex with me and I with you, our regular cron jobs to verify all data will catch corruption in each other's annexes.</p>
-
-<p>Checksums of the encrypted objects could be optional, mitigating any potential attack scenarios.</p>
-
-<p>It's not only about the cost of setting up new remotes. It would also be a way to keep data in one annex while making it accessible only in a subset of them. For example, I might need some private letters at work, but I don't want my work machine to be able to access them all.</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U">Richard</a>
-</span>
-
-
-&mdash; <span class="date">Tue Apr 5 19:24:17 2011</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-f5f2ec243a7a1034cc52b894df78c290">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/encryption.html#comment-f5f2ec243a7a1034cc52b894df78c290">comment 4</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>@Richard the easy way to deal with that scenario is to set up a remote that work can access, and only put in it files work should be able to see. Needing to specify which key a file should be encrypted to when putting it in a remote that supported multiple keys would add another level of complexity which that avoids.</p>
-
-<p>Of course, the right approach is probably to have a separate repository for work. If you don't trust it with seeing file contents, you probably also don't trust it with the contents of your git repository.</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="http://joey.kitenet.net/">joey</a>
-</span>
-
-
-&mdash; <span class="date">Thu Apr 7 15:59:30 2011</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-f5cd94e227a4b70e41048e3b420e96dd">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/encryption.html#comment-f5cd94e227a4b70e41048e3b420e96dd">using sshfs + cryptmount is more secure</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>"For git-annex, note that an attacker with local machine access can tell at least all the filenames and metadata of files stored in the encrypted remote anyway, and can access whatever content is stored locally."</p>
-
-<p>Better security is given by sshfs + cryptmount, which I used when I recently setup a git-annex repository on a free shell account from a provider I do not trust.</p>
-
-<p>See http://code.cjb.net/free-secure-online-backup.html for what I did to get a really secure solution.</p>
-
-<p>Kind regards,</p>
-
-<p>Hans Ekbrand</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawkS6aFVrEwOrDuQBTMXxtGHtueA69NS_jo">Hans</a>
-</span>
-
-
-&mdash; <span class="date">Tue Aug 14 09:41:47 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-a035b1698e1253e7a5244721d73c71cf">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/encryption.html#comment-a035b1698e1253e7a5244721d73c71cf">comment 6</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>Hans,</p>
-
-<p>You are misunderstanding how git-annex encryption works. The "untrusted host" and the "local machine" are not the same machine. git-annex only transfers pre-encrypted files to the "untrusted host".</p>
-
-<p>You should setup a git-annex encrypted remote and watch how it works so you can see for yourself that it is not insecure.</p>
-
-<p>Your solution does not provide better security, it accomplishes the same thing as git-annex in a more complicated way. In addition, since you are mounting the image from the client your solution will not work with multiple clients.</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawmBUR4O9mofxVbpb8JV9mEbVfIYv670uJo">Justin</a>
-</span>
-
-
-&mdash; <span class="date">Tue Aug 14 10:10:40 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-802a6776b0b661fc53c68a3c489f09d6">
-
-
-
-<div class="comment-subject">
-
-<a href="/design/encryption.html#comment-802a6776b0b661fc53c68a3c489f09d6">comment 7</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>Justin,</p>
-
-<p>thanks for clearing that up. It's great that git-annex has implemented mechanisms to work securely on untrusted hosts. My solution is thus only interesting for files that are impractical to manage with git-annex (e.g. data for/from applications that need rw-access to a large number of files). And, possibly, for providers that do not provide rsync.</p>
-
-<p>Your remark that my solution does not work with more than one client, is not entirely accurate. No more than one client can access the repository at any given time, but as long as access is not simultaneous, any number of clients can access the repository. Still, your point is taken, it's a limitation I should mention.</p>
-
-<p>It would be interesting to compare the performance of individually encrypted files to encrypted image-file. My intuition says that encrypted image-file should be faster, but that's just a guess.</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawkS6aFVrEwOrDuQBTMXxtGHtueA69NS_jo">Hans</a>
-</span>
-
-
-&mdash; <span class="date">Wed Aug 15 15:16:10 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-
-
-
-
-<div class="addcomment">Comments on this page are closed.</div>
-
-</div>
-
-
-
-</div>
-
-<div id="footer" class="pagefooter">
-
-<div id="pageinfo">
-
-
-
-
-
-
-<div id="backlinks">
-Links:
-
-<a href="../design.html">design</a>
-
-<a href="../encryption.html">encryption</a>
-
-
-</div>
-
-
-
-
-
-
-<div class="pagedate">
-Last edited <span class="date">Sat Apr 6 16:34:38 2013</span>
-<!-- Created <span class="date">Sat Apr 6 16:34:38 2013</span> -->
-</div>
-
-</div>
-
-
-<!-- from git-annex -->
-</div>
-
-</div>
-
-</body>
-</html>
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/direct_mode.html b/debian/git-annex/usr/share/doc/git-annex/html/direct_mode.html
deleted file mode 100644
index 95dc5ee..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/direct_mode.html
+++ /dev/null
@@ -1,355 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>direct mode</title>
-
-<link rel="stylesheet" href="style.css" type="text/css" />
-
-<link rel="stylesheet" href="local.css" type="text/css" />
-
-
-
-
-
-
-</head>
-<body>
-
-<div class="page">
-
-<div class="pageheader">
-<div class="header">
-<span>
-<span class="parentlinks">
-
-<a href="./index.html">git-annex</a>/
-
-</span>
-<span class="title">
-direct mode
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-
-</div>
-
-
-<div class="sidebar">
-<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>
-
-<ul>
-<li><a href="./install.html">install</a></li>
-<li><a href="./assistant.html">assistant</a></li>
-<li><a href="./walkthrough.html">walkthrough</a></li>
-<li><a href="./tips.html">tips</a></li>
-<li><span class="createlink">bugs</span></li>
-<li><span class="createlink">todo</span></li>
-<li><span class="createlink">forum</span></li>
-<li><a href="./comments.html">comments</a></li>
-<li><a href="./contact.html">contact</a></li>
-<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>
-</ul>
-
-
-</div>
-
-
-<div id="pagebody">
-
-<div id="content">
-<p>Normally, git-annex repositories consist of symlinks that are checked into
-git, and in turn point at the content of large files that is stored in
-<code>.git/annex/objects/</code>. Direct mode gets rid of the symlinks.</p>
-
-<p>The advantage of direct mode is that you can access files directly,
-including modifying them. The disadvantage is that most regular git
-commands cannot safely be used, and only a subset of git-annex commands
-can be used.</p>
-
-<p>Normally, git-annex repositories start off in indirect mode. With some
-exceptions:</p>
-
-<ul>
-<li>Repositories created by the <a href="./assistant.html">assistant</a> use direct mode by default.</li>
-<li>Repositories on FAT and other less than stellar filesystems
-that don't support things like symlinks will be automatically put
-into direct mode.</li>
-</ul>
-
-
-<h2>enabling (and disabling) direct mode</h2>
-
-<p>Any repository can be converted to use direct mode at any time, and if you
-decide not to use it, you can convert back to indirect mode just as easily.
-Also, you can have one clone of a repository using direct mode, and another
-using indirect mode; direct mode interoperates.</p>
-
-<p>To start using direct mode:</p>
-
-<pre><code>git annex direct
-</code></pre>
-
-<p>To stop using direct mode:</p>
-
-<pre><code>git annex indirect
-</code></pre>
-
-<h2>safety of using direct mode</h2>
-
-<p>With direct mode, you're operating without large swathes of git-annex's
-carefully constructed safety net, which ensures that past versions of
-files are preserved and can be accessed (until you dropunused them).
-With direct mode, any file can be edited directly, or deleted at any time,
-and there's no guarantee that the old version is backed up somewhere else.</p>
-
-<p>So if you care about preserving the history of files, you're strongly
-encouraged to tell git-annex that your direct mode repository cannot be
-trusted to retain the content of a file. To do so:</p>
-
-<pre><code>git annex untrust .
-</code></pre>
-
-<p>On the other hand, if you only care about the current versions of files,
-and are using git-annex with direct mode to keep files synchronised between
-computers, and manage your files, this should not be a concern for you.</p>
-
-<h2>use a direct mode repository</h2>
-
-<p>You can use most git-annex commands as usual in a direct mode repository.
-A very few commands don't work in direct mode, and will refuse to do anything.</p>
-
-<p>Direct mode also works well with the git-annex assistant.</p>
-
-<p>You can use <code>git commit --staged</code>, or plain <code>git commit</code>.
-But not <code>git commit -a</code>, or <code>git commit &lt;file&gt;</code> ..
-that'd commit whole large files into git!</p>
-
-<h2>what doesn't work in direct mode</h2>
-
-<p><code>git annex status</code> shows incomplete information. A few other commands,
-like <code>git annex unlock</code> don't make sense in direct mode and will refuse to
-run.</p>
-
-<p>As for git commands, you can probably use some git working tree
-manipulation commands, like <code>git checkout</code> and <code>git revert</code> in useful
-ways... But beware, these commands can replace files that are present in
-your repository with broken symlinks. If that file was the only copy you
-had of something, it'll be lost.</p>
-
-<p>This is one more reason it's wise to make git-annex untrust your direct mode
-repositories. Still, you can lose data using these sort of git commands, so
-use extreme caution.</p>
-
-</div>
-
-
-
-<div id="comments">
-<div class="feedlink">
-
-
-</div>
-<div class="comment" id="comment-e2f32651b81efbf28c21647fbe2ec5f9">
-
-
-
-<div class="comment-subject">
-
-<a href="/direct_mode.html#comment-e2f32651b81efbf28c21647fbe2ec5f9">comment 1</a>
-
-</div>
-
-<div class="inlinecontent">
-So, just which git commands <em>are</em> safe? It seems like I'm going to have to use direct mode, so it'd be nice to know just what I'm allowed to do, and what the workflow should be.
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawl2Jj8q2upJL4ZQAc2lp7ugTxJiGtcICv8">Michael</a>
-</span>
-
-
-&mdash; <span class="date">Mon Feb 18 19:24:11 2013</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-57bb6513674551d20b8d382c1cf991c7">
-
-
-
-<div class="comment-subject">
-
-<a href="/direct_mode.html#comment-57bb6513674551d20b8d382c1cf991c7">safe and unsafe commands</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>All git commands that do not change files in the work tee (and do not stage files from the work tree), are safe. I don't have a complete list; it includes <code>git log</code>, <code>git show</code>, <code>git diff</code>, <code>git commit</code> (but not -a or with a file as a parameter), <code>git branch</code>, <code>git fetch</code>, <code>git push</code>, <code>git grep</code>, <code>git status</code>, <code>git tag</code>, <code>git mv</code> (this one is somewhat surprising, but I've tested it and it's ok)</p>
-
-<p>git commands that change files in the work tree will replace your data with dangling symlinks. This includes things like <code>git revert</code>, <code>git checkout</code>, <code>git merge</code>, <code>git pull</code>, <code>git reset</code></p>
-
-<p>git commands that stage files from the work tree will commit your data to git directly. This includes <code>git add</code>, <code>git commit -a</code>, and <code>git commit file</code></p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="http://joeyh.name/">joeyh.name</a>
-</span>
-
-
-&mdash; <span class="date">Mon Feb 18 22:55:13 2013</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-6f97f966cdafd65509aa68ab6096dd69">
-
-
-
-<div class="comment-subject">
-
-<a href="/direct_mode.html#comment-6f97f966cdafd65509aa68ab6096dd69">comment 3</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>So, if I edit a "content file" (change a music file's metadata, say), what's the workflow to record that fact and then synchronise it to other repositories?</p>
-
-<p>I can't do a <code>git add</code>, so I don't understand what has to happen as a first step. (Thanks for your quick reply above, BTW.)</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawl2Jj8q2upJL4ZQAc2lp7ugTxJiGtcICv8">Michael</a>
-</span>
-
-
-&mdash; <span class="date">Mon Feb 18 23:03:14 2013</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-7f6b16c9fca70ac26b57542a956fd968">
-
-
-
-<div class="comment-subject">
-
-<a href="/direct_mode.html#comment-7f6b16c9fca70ac26b57542a956fd968">comment 4</a>
-
-</div>
-
-<div class="inlinecontent">
-<pre>
-git annex add $file
-git commit -m changed
-git annex sync
-git annex copy $file --to otherrepo
-</pre>
-
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="http://joeyh.name/">joeyh.name</a>
-</span>
-
-
-&mdash; <span class="date">Mon Feb 18 23:05:35 2013</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-
-
-
-
-<div class="addcomment">Comments on this page are closed.</div>
-
-</div>
-
-
-
-</div>
-
-<div id="footer" class="pagefooter">
-
-<div id="pageinfo">
-
-
-
-
-
-
-<div id="backlinks">
-Links:
-
-<a href="./internals.html">internals</a>
-
-<a href="./links/key_concepts.html">links/key concepts</a>
-
-<a href="./upgrades.html">upgrades</a>
-
-
-</div>
-
-
-
-
-
-
-<div class="pagedate">
-Last edited <span class="date">Fri Feb 15 18:30:55 2013</span>
-<!-- Created <span class="date">Fri Feb 15 18:30:55 2013</span> -->
-</div>
-
-</div>
-
-
-<!-- from git-annex -->
-</div>
-
-</div>
-
-</body>
-</html>
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/download.html b/debian/git-annex/usr/share/doc/git-annex/html/download.html
deleted file mode 100644
index 97bea34..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/download.html
+++ /dev/null
@@ -1,246 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>download</title>
-
-<link rel="stylesheet" href="style.css" type="text/css" />
-
-<link rel="stylesheet" href="local.css" type="text/css" />
-
-
-
-
-
-
-</head>
-<body>
-
-<div class="page">
-
-<div class="pageheader">
-<div class="header">
-<span>
-<span class="parentlinks">
-
-<a href="./index.html">git-annex</a>/
-
-</span>
-<span class="title">
-download
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-
-</div>
-
-
-<div class="sidebar">
-<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>
-
-<ul>
-<li><a href="./install.html">install</a></li>
-<li><a href="./assistant.html">assistant</a></li>
-<li><a href="./walkthrough.html">walkthrough</a></li>
-<li><a href="./tips.html">tips</a></li>
-<li><span class="createlink">bugs</span></li>
-<li><span class="createlink">todo</span></li>
-<li><span class="createlink">forum</span></li>
-<li><a href="./comments.html">comments</a></li>
-<li><a href="./contact.html">contact</a></li>
-<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>
-</ul>
-
-
-</div>
-
-
-<div id="pagebody">
-
-<div id="content">
-<p>The main git repository for git-annex is <code>git://git-annex.branchable.com/</code></p>
-
-<p>(You can push changes to this wiki from that anonymous git checkout.)</p>
-
-<p>Other mirrors of the git repository:</p>
-
-<ul>
-<li><code>git://git.kitenet.net/git-annex</code> [<a href="http://git.kitenet.net/?p=git-annex.git;a=summary">gitweb</a>]</li>
-<li><a href="https://github.com/joeyh/git-annex">at github</a></li>
-</ul>
-
-
-<p>Releases of git-annex are uploaded
-<a href="http://hackage.haskell.org/package/git-annex">to hackage</a>. Get your
-tarballs there, if you need them.</p>
-
-<p>Some operating systems include git-annex in easily prepackaged form and
-others need some manual work. See <a href="./install.html">install</a> for details.</p>
-
-<h2>git branches</h2>
-
-<p>The git repository has some branches:</p>
-
-<ul>
-<li><code>ghc7.0</code> supports versions of ghc older than 7.4, which
-had a major change to filename encoding.</li>
-<li><code>old-monad-control</code> is for systems that don't have a newer monad-control
-library.</li>
-<li><code>no-ifelse</code> avoids using the IFelse library
-(merge it into master if you need it)</li>
-<li><code>no-bloom</code> avoids using bloom filters. (merge it into master if you need it)</li>
-<li><code>no-s3</code> avoids using the S3 library (merge it into master if you need it)</li>
-<li><code>debian-stable</code> contains the latest backport of git-annex to Debian
-stable.</li>
-<li><code>tweak-fetch</code> adds support for the git tweak-fetch hook, which has
-been proposed and implemented but not yet accepted into git.</li>
-<li><code>setup</code> contains configuration for this website</li>
-<li><code>pristine-tar</code> contains <a href="http://kitenet.net/~joey/code/pristine-tar">pristine-tar</a>
-data to create tarballs of any past git-annex release.</li>
-</ul>
-
-
-<hr />
-
-<p>Developing git-annex? Patches are very welcome.
-You should read <a href="./coding_style.html">coding style</a>.</p>
-
-</div>
-
-
-
-<div id="comments">
-<div class="feedlink">
-
-
-</div>
-<div class="comment" id="comment-48efe492343c27a89c035c03da473d38">
-
-
-
-<div class="comment-subject">
-
-<a href="/download.html#comment-48efe492343c27a89c035c03da473d38">git clone git://git-annex.branchable.com/ gives an error</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>Thought you would want to know</p>
-
-<p>error: unable to create file doc/forum/<strong>91</strong>Installation<strong>93</strong><em>base-3.0.3.2_requires_syb</em><strong>61</strong><strong>61</strong>0.1.0.2_however_syb-0.1.0.2_was_excluded_because_json-0.5_requires_syb<em><strong>62</strong><strong>61</strong>0.3.3.mdwn (File name too long)
-fatal: cannot create directory at 'doc/forum/<strong>91</strong>Installation<strong>93</strong></em>base-3.0.3.2_requires_syb<em><strong>61</strong><strong>61</strong>0.1.0.2_however_syb-0.1.0.2_was_excluded_because_json-0.5_requires_syb</em><strong>62</strong><strong>61</strong>0.3.3': File name too long</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="https://www.google.com/accounts/o8/id?id=AItOawm3uJkdiJJejvqix9dULvw_Ma7DCtB-6zA">Ian</a>
-</span>
-
-
-&mdash; <span class="date">Mon Aug 13 16:57:34 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-<div class="comment" id="comment-2e374c18fcc0aae22c79b090509965c7">
-
-
-
-<div class="comment-subject">
-
-<a href="/download.html#comment-2e374c18fcc0aae22c79b090509965c7">comment 2</a>
-
-</div>
-
-<div class="inlinecontent">
-Ok, I've renamed that long-ish filename.
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="OpenID">
-<a href="http://joeyh.name/">joeyh.name</a>
-</span>
-
-
-&mdash; <span class="date">Thu Aug 16 19:28:30 2012</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-
-
-
-
-<div class="addcomment">Comments on this page are closed.</div>
-
-</div>
-
-
-
-</div>
-
-<div id="footer" class="pagefooter">
-
-<div id="pageinfo">
-
-
-
-
-
-
-<div id="backlinks">
-Links:
-
-<a href="./install.html">install</a>
-
-<a href="./install/cabal.html">install/cabal</a>
-
-<a href="./install/fromscratch.html">install/fromscratch</a>
-
-
-</div>
-
-
-
-
-
-
-<div class="pagedate">
-Last edited <span class="date">Sun Oct 28 21:30:34 2012</span>
-<!-- Created <span class="date">Sun Oct 28 21:30:34 2012</span> -->
-</div>
-
-</div>
-
-
-<!-- from git-annex -->
-</div>
-
-</div>
-
-</body>
-</html>
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/encryption.html b/debian/git-annex/usr/share/doc/git-annex/html/encryption.html
deleted file mode 100644
index a0834cf..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/encryption.html
+++ /dev/null
@@ -1,240 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>encryption</title>
-
-<link rel="stylesheet" href="style.css" type="text/css" />
-
-<link rel="stylesheet" href="local.css" type="text/css" />
-
-
-
-
-
-
-</head>
-<body>
-
-<div class="page">
-
-<div class="pageheader">
-<div class="header">
-<span>
-<span class="parentlinks">
-
-<a href="./index.html">git-annex</a>/
-
-</span>
-<span class="title">
-encryption
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-
-</div>
-
-
-<div class="sidebar">
-<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>
-
-<ul>
-<li><a href="./install.html">install</a></li>
-<li><a href="./assistant.html">assistant</a></li>
-<li><a href="./walkthrough.html">walkthrough</a></li>
-<li><a href="./tips.html">tips</a></li>
-<li><span class="createlink">bugs</span></li>
-<li><span class="createlink">todo</span></li>
-<li><span class="createlink">forum</span></li>
-<li><a href="./comments.html">comments</a></li>
-<li><a href="./contact.html">contact</a></li>
-<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>
-</ul>
-
-
-</div>
-
-
-<div id="pagebody">
-
-<div id="content">
-<p>git-annex mostly does not use encryption. Anyone with access to a git
-repository can see all the filenames in it, its history, and can access
-any annexed file contents.</p>
-
-<p>Encryption is needed when using <a href="./special_remotes.html">special remotes</a> like Amazon S3, where
-file content is sent to an untrusted party who does not have access to the
-git repository.</p>
-
-<p>Such an encrypted remote uses strong GPG encryption on the contents of files,
-as well as HMAC hashing of the filenames. The size of the encrypted files,
-and access patterns of the data, should be the only clues to what is
-stored in such a remote.</p>
-
-<p>You should decide whether to use encryption with a special remote before
-any data is stored in it. So, <code>git annex initremote</code> requires you
-to specify "encryption=none" when first setting up a remote in order
-to disable encryption.</p>
-
-<p>If you want to use encryption, run <code>git annex initremote</code> with
-"encryption=USERID". The value will be passed to <code>gpg</code> to find encryption keys.
-Typically, you will say "encryption=2512E3C7" to use a specific gpg key.
-Or, you might say "encryption=joey@kitenet.net" to search for matching keys.</p>
-
-<p>The default MAC algorithm to be applied on the filenames is HMACSHA1. A
-stronger one, for instance HMACSHA512, one can be chosen upon creation
-of the special remote with the option <code>mac=HMACSHA512</code>. The available
-MAC algorithms are HMACSHA1, HMACSHA224, HMACSHA256, HMACSHA384, and
-HMACSHA512. Note that it is not possible to change algorithm for a
-non-empty remote.</p>
-
-<p>The <a href="./design/encryption.html">encryption design</a> allows additional encryption keys
-to be added on to a special remote later. Once a key is added, it is able
-to access content that has already been stored in the special remote.
-To add a new key, just run <code>git annex initremote</code> again, specifying the
-new encryption key:</p>
-
-<pre><code>git annex initremote myremote encryption=788A3F4C
-</code></pre>
-
-<p>Note that once a key has been given access to a remote, it's not
-possible to revoke that access, short of deleting the remote. See
-<a href="./design/encryption.html">encryption design</a> for other security risks
-associated with encryption.</p>
-
-<h2>shared cipher mode</h2>
-
-<p>Alternatively, you can configure git-annex to use a shared cipher to
-encrypt data stored in a remote. This shared cipher is stored,
-<strong>unencrypted</strong> in the git repository. So it's shared amoung every
-clone of the git repository. The advantage is you don't need to set up gpg
-keys. The disadvantage is that this is <strong>insecure</strong> unless you
-trust every clone of the git repository with access to the encrypted data
-stored in the special remote.</p>
-
-<p>To use shared encryption, specify "encryption=shared" when first setting
-up a special remote.</p>
-
-</div>
-
-
-
-<div id="comments">
-<div class="feedlink">
-
-
-</div>
-<div class="comment" id="comment-e676b9d3a2afeac2140a508745729db3">
-
-
-
-<div class="comment-subject">
-
-<a href="/encryption.html#comment-e676b9d3a2afeac2140a508745729db3">Tahoe-LAFS comes with encryption</a>
-
-</div>
-
-<div class="inlinecontent">
-<p>The Tahoe-LAFS special remote automatically encrypts and adds cryptography integrity checks/digital signatures. For that special remote you should not use the git-annex encryption scheme.</p>
-
-<p>Tahoe-LAFS encryption generates a new independent key for each file. This means that you can share access to one of the files without thereby sharing access to all of them, and it means that individual files can be deduplicated among multiple users.</p>
-
-
-</div>
-
-<div class="comment-header">
-
-Comment by
-
-<span class="author" title="Signed in">
-
-<a href="?page=zooko&amp;do=goto">zooko</a>
-
-</span>
-
-
-&mdash; <span class="date">Wed May 18 00:32:14 2011</span>
-</div>
-
-
-
-<div style="clear: both"></div>
-</div>
-
-
-
-
-<div class="addcomment">Comments on this page are closed.</div>
-
-</div>
-
-
-
-</div>
-
-<div id="footer" class="pagefooter">
-
-<div id="pageinfo">
-
-
-
-
-
-
-<div id="backlinks">
-Links:
-
-<a href="./design/encryption.html">design/encryption</a>
-
-<a href="./internals.html">internals</a>
-
-<a href="./links/the_details.html">links/the details</a>
-
-<a href="./special_remotes/S3.html">special remotes/S3</a>
-
-<a href="./special_remotes/bup.html">special remotes/bup</a>
-
-<a href="./special_remotes/directory.html">special remotes/directory</a>
-
-<a href="./special_remotes/glacier.html">special remotes/glacier</a>
-
-<a href="./special_remotes/hook.html">special remotes/hook</a>
-
-<a href="./special_remotes/rsync.html">special remotes/rsync</a>
-
-<a href="./special_remotes/webdav.html">special remotes/webdav</a>
-
-
-</div>
-
-
-
-
-
-
-<div class="pagedate">
-Last edited <span class="date">Fri Mar 29 18:30:34 2013</span>
-<!-- Created <span class="date">Fri Mar 29 18:30:34 2013</span> -->
-</div>
-
-</div>
-
-
-<!-- from git-annex -->
-</div>
-
-</div>
-
-</body>
-</html>
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/favicon.ico b/debian/git-annex/usr/share/doc/git-annex/html/favicon.ico
deleted file mode 100644
index 5bb4059..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/feeds.html b/debian/git-annex/usr/share/doc/git-annex/html/feeds.html
deleted file mode 100644
index 7079e4c..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/feeds.html
+++ /dev/null
@@ -1,133 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>feeds</title>
-
-<link rel="stylesheet" href="style.css" type="text/css" />
-
-<link rel="stylesheet" href="local.css" type="text/css" />
-
-
-
-
-
-
-</head>
-<body>
-
-<div class="page">
-
-<div class="pageheader">
-<div class="header">
-<span>
-<span class="parentlinks">
-
-<a href="./index.html">git-annex</a>/
-
-</span>
-<span class="title">
-feeds
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-
-</div>
-
-
-<div class="sidebar">
-<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>
-
-<ul>
-<li><a href="./install.html">install</a></li>
-<li><a href="./assistant.html">assistant</a></li>
-<li><a href="./walkthrough.html">walkthrough</a></li>
-<li><a href="./tips.html">tips</a></li>
-<li><span class="createlink">bugs</span></li>
-<li><span class="createlink">todo</span></li>
-<li><span class="createlink">forum</span></li>
-<li><a href="./comments.html">comments</a></li>
-<li><a href="./contact.html">contact</a></li>
-<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>
-</ul>
-
-
-</div>
-
-
-<div id="pagebody">
-
-<div id="content">
-<p>Aggregating git-annex mentions from elsewhere on the net..</p>
-
-<ul>
-<li>[[!aggregate expirecount=25 name="identica" feedurl="http://identi.ca/api/statusnet/tags/timeline/gitannex.rss" url="http://identi.ca/tag/gitannex"]]</li>
-<li>[[!aggregate expirecount=25 name="twitter" feedurl="http://search.twitter.com/search.atom?q=git-annex" url="http://twitter.com/"]]</li>
-</ul>
-
-
-</div>
-
-
-
-<div id="comments">
-
-
-
-
-<div class="addcomment">Comments on this page are closed.</div>
-
-</div>
-
-
-
-</div>
-
-<div id="footer" class="pagefooter">
-
-<div id="pageinfo">
-
-
-
-
-
-
-<div id="backlinks">
-Links:
-
-<a href="./index.html">index</a>
-
-
-</div>
-
-
-
-
-
-
-<div class="pagedate">
-Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>
-<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->
-</div>
-
-</div>
-
-
-<!-- from git-annex -->
-</div>
-
-</div>
-
-</body>
-</html>
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/footer/column_a.html b/debian/git-annex/usr/share/doc/git-annex/html/footer/column_a.html
deleted file mode 100644
index cbe42f0..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/footer/column_a.html
+++ /dev/null
@@ -1,131 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>column a</title>
-
-<link rel="stylesheet" href="../style.css" type="text/css" />
-
-<link rel="stylesheet" href="../local.css" type="text/css" />
-
-
-
-
-
-
-</head>
-<body>
-
-<div class="page">
-
-<div class="pageheader">
-<div class="header">
-<span>
-<span class="parentlinks">
-
-<a href="../index.html">git-annex</a>/
-
-<a href="../index.html">footer</a>/
-
-</span>
-<span class="title">
-column a
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-
-</div>
-
-
-<div class="sidebar">
-<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>
-
-<ul>
-<li><a href="../install.html">install</a></li>
-<li><a href="../assistant.html">assistant</a></li>
-<li><a href="../walkthrough.html">walkthrough</a></li>
-<li><a href="../tips.html">tips</a></li>
-<li><span class="createlink">bugs</span></li>
-<li><span class="createlink">todo</span></li>
-<li><span class="createlink">forum</span></li>
-<li><a href="../comments.html">comments</a></li>
-<li><a href="../contact.html">contact</a></li>
-<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>
-</ul>
-
-
-</div>
-
-
-<div id="pagebody">
-
-<div id="content">
-<h3>Recent <a href="../news.html">news</a></h3>
-
-
-
-
-<h3><span class="createlink">Dev blog</span></h3>
-
-
-
-
-
-
-</div>
-
-
-
-<div id="comments">
-
-
-
-
-<div class="addcomment">Comments on this page are closed.</div>
-
-</div>
-
-
-
-</div>
-
-<div id="footer" class="pagefooter">
-
-<div id="pageinfo">
-
-
-
-
-
-
-
-
-
-
-
-<div class="pagedate">
-Last edited <span class="date">Mon Mar 11 18:30:33 2013</span>
-<!-- Created <span class="date">Mon Mar 11 18:30:33 2013</span> -->
-</div>
-
-</div>
-
-
-<!-- from git-annex -->
-</div>
-
-</div>
-
-</body>
-</html>
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/footer/column_b.html b/debian/git-annex/usr/share/doc/git-annex/html/footer/column_b.html
deleted file mode 100644
index dd2ef07..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/footer/column_b.html
+++ /dev/null
@@ -1,149 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>column b</title>
-
-<link rel="stylesheet" href="../style.css" type="text/css" />
-
-<link rel="stylesheet" href="../local.css" type="text/css" />
-
-
-
-
-
-
-</head>
-<body>
-
-<div class="page">
-
-<div class="pageheader">
-<div class="header">
-<span>
-<span class="parentlinks">
-
-<a href="../index.html">git-annex</a>/
-
-<a href="../index.html">footer</a>/
-
-</span>
-<span class="title">
-column b
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-
-</div>
-
-
-<div class="sidebar">
-<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>
-
-<ul>
-<li><a href="../install.html">install</a></li>
-<li><a href="../assistant.html">assistant</a></li>
-<li><a href="../walkthrough.html">walkthrough</a></li>
-<li><a href="../tips.html">tips</a></li>
-<li><span class="createlink">bugs</span></li>
-<li><span class="createlink">todo</span></li>
-<li><span class="createlink">forum</span></li>
-<li><a href="../comments.html">comments</a></li>
-<li><a href="../contact.html">contact</a></li>
-<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>
-</ul>
-
-
-</div>
-
-
-<div id="pagebody">
-
-<div id="content">
-<h3>Recent <a href="../videos.html">videos</a></h3>
-
-<div class="archivepage">
-
-<a href="../videos/git-annex_assistant_archiving.html">git-annex assistant archiving</a><br />
-
-<span class="archivepagedate">
-Posted <span class="date">Tue Apr 2 17:32:07 2013</span>
-
-</span>
-</div>
-<div class="archivepage">
-
-<a href="../videos/git-annex_assistant_remote_sharing.html">git-annex assistant remote sharing</a><br />
-
-<span class="archivepagedate">
-Posted <span class="date">Tue Apr 2 17:32:07 2013</span>
-
-</span>
-</div>
-
-
-
-<h3>Recent <span class="createlink">forum posts</span></h3>
-
-
-
-
-
-
-</div>
-
-
-
-<div id="comments">
-
-
-
-
-<div class="addcomment">Comments on this page are closed.</div>
-
-</div>
-
-
-
-</div>
-
-<div id="footer" class="pagefooter">
-
-<div id="pageinfo">
-
-
-
-
-
-
-
-
-
-
-
-<div class="pagedate">
-Last edited <span class="date">Mon Mar 11 18:30:33 2013</span>
-<!-- Created <span class="date">Mon Mar 11 18:30:33 2013</span> -->
-</div>
-
-</div>
-
-
-<!-- from git-annex -->
-</div>
-
-</div>
-
-</body>
-</html>
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/future_proofing.html b/debian/git-annex/usr/share/doc/git-annex/html/future_proofing.html
deleted file mode 100644
index c2b11b3..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/future_proofing.html
+++ /dev/null
@@ -1,165 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>future proofing</title>
-
-<link rel="stylesheet" href="style.css" type="text/css" />
-
-<link rel="stylesheet" href="local.css" type="text/css" />
-
-
-
-
-
-
-</head>
-<body>
-
-<div class="page">
-
-<div class="pageheader">
-<div class="header">
-<span>
-<span class="parentlinks">
-
-<a href="./index.html">git-annex</a>/
-
-</span>
-<span class="title">
-future proofing
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-
-</div>
-
-
-<div class="sidebar">
-<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>
-
-<ul>
-<li><a href="./install.html">install</a></li>
-<li><a href="./assistant.html">assistant</a></li>
-<li><a href="./walkthrough.html">walkthrough</a></li>
-<li><a href="./tips.html">tips</a></li>
-<li><span class="createlink">bugs</span></li>
-<li><span class="createlink">todo</span></li>
-<li><span class="createlink">forum</span></li>
-<li><a href="./comments.html">comments</a></li>
-<li><a href="./contact.html">contact</a></li>
-<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>
-</ul>
-
-
-</div>
-
-
-<div id="pagebody">
-
-<div id="content">
-<p>Imagine putting a git-annex drive in a time capsule. In 20, or 50, or 100
-years, you'd like its contents to be as accessible as possible to whoever
-digs it up.</p>
-
-<p>This is a hard problem. git-annex cannot completly solve it, but it does
-its best to not contribute to the problem. Here are some aspects of the
-problem:</p>
-
-<ul>
-<li><p>How are files accessed? Git-annex carefully adds minimal complexity
-to access files in a repository. Nothing needs to be done to extract
-files from the repository; they are there on disk in the usual way,
-with just some symlinks pointing at the annexed file contents.
-Neither git-annex nor git is needed to get at the file contents.</p>
-
-<p>(Also, git-annex provides an "uninit" command that moves everything out
-of the annex, if you should ever want to stop using it.)</p></li>
-<li><p>What file formats are used? Will they still be readable? To deal with
-this, it's best to stick to plain text files, and the most common
-image, sound, etc formats. Consider storing the same content in multiple
-formats.</p></li>
-<li><p>What filesystem is used on the drive? Will that filesystem still be
-available? Whatever you choose to use, git-annex can put files on it.
-Even if you choose (ugh) FAT.</p></li>
-<li><p>What is the hardware interface of the drive? Will hardware still exist
-to talk to it?</p></li>
-<li><p>What if some of the data is damaged? git-annex facilitates storing a
-configurable number of <a href="./copies.html">copies</a> of the file contents. The metadata
-about your files is stored in git, and so every clone of the repository
-means another copy of that is stored. Also, git-annex uses filenames
-for the data that encode everything needed to match it back to the
-metadata. So if a filesystem is badly corrupted and all your annexed
-files end up in <code>lost+found</code>, they can easily be lifted back out into
-another clone of the repository. Even if the filenames are lost,
-it's possible to <a href="./tips/recover_data_from_lost+found.html">recover data from lost+found</a>.</p></li>
-</ul>
-
-
-</div>
-
-
-
-<div id="comments">
-
-
-
-
-<div class="addcomment">Comments on this page are closed.</div>
-
-</div>
-
-
-
-</div>
-
-<div id="footer" class="pagefooter">
-
-<div id="pageinfo">
-
-
-
-
-
-
-<div id="backlinks">
-Links:
-
-<a href="./special_remotes/S3/comment_8_0fa68d584ee7f6b5c9058fba7e911a11.html">special remotes/S3/comment 8 0fa68d584ee7f6b5c9058fba7e911a11</a>
-
-<a href="./use_case/Bob.html">use case/Bob</a>
-
-
-</div>
-
-
-
-
-
-
-<div class="pagedate">
-Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>
-<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->
-</div>
-
-</div>
-
-
-<!-- from git-annex -->
-</div>
-
-</div>
-
-</body>
-</html>
diff --git a/debian/git-annex/usr/share/doc/git-annex/html/git-annex-shell.html b/debian/git-annex/usr/share/doc/git-annex/html/git-annex-shell.html
deleted file mode 100644
index 3844ed2..0000000
--- a/debian/git-annex/usr/share/doc/git-annex/html/git-annex-shell.html
+++ /dev/null
@@ -1,248 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>git-annex-shell</title>
-
-<link rel="stylesheet" href="style.css" type="text/css" />
-
-<link rel="stylesheet" href="local.css" type="text/css" />
-
-
-
-
-
-
-</head>
-<body>
-
-<div class="page">
-
-<div class="pageheader">
-<div class="header">
-<span>
-<span class="parentlinks">
-
-<a href="./index.html">git-annex</a>/
-
-</span>
-<span class="title">
-git-annex-shell
-
-</span>
-</span>
-
-</div>
-
-
-
-
-
-
-
-</div>
-
-
-<div class="sidebar">
-<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>
-
-<ul>
-<li><a href="./install.html">install</a></li>
-<li><a href="./assistant.html">assistant</a></li>
-<li><a href="./walkthrough.html">walkthrough</a></li>
-<li><a href="./tips.html">tips</a></li>
-<li><span class="createlink">bugs</span></li>
-<li><span class="createlink">todo</span></li>
-<li><span class="createlink">forum</span></li>
-<li><a href="./comments.html">comments</a></li>
-<li><a href="./contact.html">contact</a></li>
-<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>
-</ul>
-
-
-</div>
-
-
-<div id="pagebody">
-
-<div id="content">
-<h1>NAME</h1>
-
-<p>git-annex-shell - Restricted login shell for git-annex only SSH access</p>
-
-<h1>SYNOPSIS</h1>
-
-<p>git-annex-shell [-c] command [params ...]</p>
-
-<h1>DESCRIPTION</h1>
-
-<p>git-annex-shell is a restricted shell, similar to git-shell, which
-can be used as a login shell for SSH accounts.</p>
-
-<p>Since its syntax is identical to git-shell's, it can be used as a drop-in
-replacement anywhere git-shell is used. For example it can be used as a
-user's restricted login shell.</p>
-
-<h1>COMMANDS</h1>
-
-<p>Any command not listed below is passed through to git-shell.</p>
-
-<p>Note that the directory parameter should be an absolute path, otherwise
-it is assumed to be relative to the user's home directory. Also the
-first "/~/" or "/~user/" is expanded to the specified home directory.</p>
-
-<ul>
-<li><p>configlist directory</p>
-
-<p>This outputs a subset of the git configuration, in the same form as
-<code>git config --list</code></p></li>
-<li><p>inannex directory [key ...]</p>
-
-<p>This checks if all specified keys are present in the annex,
-and exits zero if so.</p></li>
-<li><p>dropkey directory [key ...]</p>
-
-<p>This drops the annexed data for the specified keys.</p></li>
-<li><p>recvkey directory key</p>
-
-<p>This runs rsync in server mode to receive the content of a key,
-and stores the content in the annex.</p></li>
-<li><p>sendkey directory key</p>
-
-<p>This runs rsync in server mode to transfer out the content of a key.</p></li>
-<li><p>transferinfo directory key</p>
-
-<p>This is typically run at the same time as sendkey is sending a key
-to the remote. Using it is optional, but is used to update
-progress information for the transfer of the key.</p>
-
-<p>It reads lines from standard input, each giving the number of bytes
-that have been received so far.</p></li>
-<li><p>commit directory</p>
-
-<p>This commits any staged changes to the git-annex branch.
-It also runs the annex-content hook.</p></li>
-</ul>
-
-
-<h1>OPTIONS</h1>
-
-<p>Most options are the same as in git-annex. The ones specific
-to git-annex-shell are:</p>
-
-<ul>
-<li><p>--uuid=UUID</p>
-
-<p>git-annex uses this to specify the UUID of the repository it was expecting
-git-annex-shell to access, as a sanity check.</p></li>
-<li><p>-- fields=val fields=val.. --</p>
-
-<p>Additional fields may be specified this way, to retain compatability with
-past versions of git-annex-shell (that ignore these, but would choke
-on new dashed options).</p>
-
-<p>Currently used fields include remoteuuid=, associatedfile=,
-and direct=</p></li>
-</ul>
-
-
-<h1>HOOK</h1>
-
-<p>After content is received or dropped from the repository by git-annex-shell,
-it runs a hook, <code>.git/hooks/annex-content</code> (or <code>hooks/annex-content</code> on a bare
-repository). The hook is not currently passed any information about what
-changed.</p>
-
-<h1>ENVIRONMENT</h1>
-
-<ul>
-<li><p>GIT_ANNEX_SHELL_READONLY</p>
-
-<p>If set, disallows any command that could modify the repository.</p></li>
-<li><p>GIT_ANNEX_SHELL_LIMITED</p>
-
-<p>If set, disallows running git-shell to handle unknown commands.</p></li>
-<li><p>GIT_ANNEX_SHELL_DIRECTORY</p>
-
-<p>If set, git-annex-shell will refuse to run commands that do not operate
-on the specified directory.</p></li>
-</ul>
-
-
-<h1>SEE ALSO</h1>
-
-<p><a href="./git-annex.html">git-annex</a>(1)</p>
-
-<p>git-shell(1)</p>
-
-<h1>AUTHOR</h1>
-
-<p>Joey Hess <a href="mailto:joey@kitenet.net">&#x6a;&#111;&#101;&#x79;&#64;&#x6b;&#x69;&#x74;&#x65;&#110;&#101;&#x74;&#46;&#110;&#x65;&#x74;</a></p>
-
-<p><a href="http://git-annex.branchable.com/">http://git-annex.branchable.com/</a></p>
-
-<p>Warning: Automatically converted into a man page by mdwn2man. Edit with care</p>
-
-</div>
-
-
-
-<div id="comments">
-
-
-
-
-<div class="addcomment">Comments on thi