aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Annex/Direct.hs2
-rw-r--r--Assistant/DeleteRemote.hs13
-rw-r--r--Assistant/MakeRemote.hs2
-rw-r--r--Assistant/Threads/MountWatcher.hs6
-rw-r--r--Build/BundledPrograms.hs1
-rw-r--r--Build/Configure.hs1
-rwxr-xr-xBuild/mdwn2man2
-rw-r--r--Command.hs2
-rw-r--r--Command/AddUrl.hs2
-rw-r--r--Command/Fsck.hs4
-rw-r--r--Command/Merge.hs3
-rw-r--r--Command/Remotes.hs64
-rw-r--r--Command/Status.hs78
-rw-r--r--Command/Sync.hs6
-rw-r--r--Config.hs7
-rw-r--r--Git/FileMode.hs20
-rw-r--r--Git/GCrypt.hs32
-rw-r--r--Git/Remote.hs19
-rw-r--r--GitAnnex.hs2
-rw-r--r--Makefile5
-rw-r--r--Remote/Bup.hs4
-rw-r--r--Remote/Directory.hs4
-rw-r--r--Remote/GCrypt.hs96
-rw-r--r--Remote/Git.hs6
-rw-r--r--Remote/Glacier.hs4
-rw-r--r--Remote/Hook.hs4
-rw-r--r--Remote/List.hs9
-rw-r--r--Remote/Rsync.hs4
-rw-r--r--Remote/S3.hs4
-rw-r--r--Remote/Web.hs4
-rw-r--r--Remote/WebDAV.hs4
-rw-r--r--Types/Key.hs2
-rw-r--r--Types/Remote.hs2
-rw-r--r--Utility/Format.hs11
-rw-r--r--Utility/Gpg.hs65
-rw-r--r--Utility/SRV.hs8
-rw-r--r--debian/changelog29
-rw-r--r--debian/control2
-rw-r--r--doc/assistant/encryptdrive.pngbin0 -> 42725 bytes
-rw-r--r--doc/assistant/genkey.pngbin0 -> 27854 bytes
-rw-r--r--doc/assistant/repoinfo.pngbin0 -> 7603 bytes
-rw-r--r--doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux.mdwn73
-rw-r--r--doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_1_6a60c23850a5e2a7bba355e1317abc69._comment13
-rw-r--r--doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_2_90b6ed232b2917b9fe041532284e1212._comment10
-rw-r--r--doc/bugs/Failed_to_make_repository___40__calling_nonexistant_shell__41__.mdwn2
-rw-r--r--doc/bugs/Huge_annex_out_of_memory_on_switch_to_indirect_mode_and_status.mdwn2
-rw-r--r--doc/bugs/On_Windows__44___can__39__t_use_a_USB_disk_annex_created_on_Linux.mdwn2
-rw-r--r--doc/bugs/On_Windows__44___can__39__t_use_repository_that_has_a_unix-style_local_remote_configured.mdwn2
-rw-r--r--doc/bugs/On_Windows__44___can__39__t_use_repository_that_has_a_unix-style_local_remote_configured/comment_1_95655915ff6ba9fb5d873358ff047496._comment10
-rw-r--r--doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone..mdwn230
-rw-r--r--doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_1_3a3891c9d7ee808f6a71780cb628f23d._comment12
-rw-r--r--doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_2_2bc6efb1d9e872cc5d4fbfbaaf5cc10e._comment27
-rw-r--r--doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_3_fff1e778a6334258c173a96e6bf7ef6a._comment10
-rw-r--r--doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_4_2a86da97a89e28f0a0f5e160d4932ae6._comment19
-rw-r--r--doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_5_41b8e8e58025cc8c8f12efb9a51acd29._comment50
-rw-r--r--doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_6_38afcd8e7fb278ca0ee2e9e0c9f6883e._comment10
-rw-r--r--doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_7_06de36dcde4c52ab74c8134f3242ac02._comment9
-rw-r--r--doc/bugs/Out_of_memory_error_in_fsck_whereis_find_and_status_cmds/comment_6_9e3300b223dd54a3f07c650f5cf70ae0._comment8
-rw-r--r--doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__.txt46
-rw-r--r--doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/comment_1_00b52dba3bc30516e06c44cbfd3a05a2._comment17
-rw-r--r--doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/comment_2_8f5fa659c2ab91b1757bac31cd3b15eb._comment10
-rw-r--r--doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/comment_3_ccf9623d60c58d036d8bf24757e50de3._comment10
-rw-r--r--doc/bugs/Windows_build_test_failures.mdwn2
-rw-r--r--doc/bugs/Windows_build_test_failures/comment_1_ea7523fdbafdc8be2971df52d9038826._comment10
-rw-r--r--doc/bugs/Windows_installer_includes_curl_and_wget__44___but_not_required_DLLs.mdwn2
-rw-r--r--doc/bugs/Windows_to_Linux_clone_-_Windows_drive_letters_cause_git_annex_get_to_fail.mdwn2
-rw-r--r--doc/bugs/Windows_to_Linux_clone_-_Windows_drive_letters_cause_git_annex_get_to_fail/comment_4_c4249f32d65594d79ea01145b93ec948._comment9
-rw-r--r--doc/bugs/assistant_does_not_allow_adding_an_existing_repo.mdwn8
-rw-r--r--doc/bugs/assistant_does_not_allow_adding_an_existing_repo/comment_1_87e84d56d56abefe8cac8a52b76c9003._comment8
-rw-r--r--doc/bugs/assistant_doesn__39__t_sync_empty_directories/comment_3_f9b2a700c060707fae1bcb2ec0e4e4dc._comment9
-rw-r--r--doc/bugs/assistant_doesn__39__t_sync_empty_directories/comment_4_014d213a959dd7993bdd247722a8817e._comment8
-rw-r--r--doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual.mdwn2
-rw-r--r--doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_5_eda947eb7f8c46b9a61d6430b5f9ebfd._comment25
-rw-r--r--doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_3_51da7f5881f65422328d341e5ab0d250._comment33
-rw-r--r--doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_4_ba384314c1e47ec4b72e1843e0500df9._comment10
-rw-r--r--doc/bugs/box.com_never_stops_syncing..mdwn63
-rw-r--r--doc/bugs/box.com_never_stops_syncing./comment_1_124a5edcd89cc6b61e1a41f5b4d640d7._comment10
-rw-r--r--doc/bugs/box.com_never_stops_syncing./comment_2_42574181aa721319ba54eadf0a15ddff._comment11
-rw-r--r--doc/bugs/box.com_never_stops_syncing./comment_3_2ad727849070cfd52d6c719478e9cce3._comment8
-rw-r--r--doc/bugs/box.com_never_stops_syncing./comment_4_83ce23e45f5a5845d4f04519ee14ec65._comment9
-rw-r--r--doc/bugs/box.com_never_stops_syncing./comment_5_ef1c9d87b04db5047ab72167d3269687._comment8
-rw-r--r--doc/bugs/box.com_never_stops_syncing./comment_6_c9cb39eba941678035f9b2888da1085c._comment10
-rw-r--r--doc/bugs/box.com_never_stops_syncing./comment_7_4b0632a4e37c96959a8e6434e9fd86fb._comment17
-rw-r--r--doc/bugs/box.com_never_stops_syncing./comment_8_d9d318b8c958de6031ae323da20af625._comment55
-rw-r--r--doc/bugs/cabal_install_fails_to_install_manpage.mdwn26
-rw-r--r--doc/bugs/can__39__t_annex_get_from_annex_in_direct_mode.mdwn2
-rw-r--r--doc/bugs/gcrypt_initremote_pushes_git-annex_but_not_master.mdwn19
-rw-r--r--doc/bugs/git-annex:_Argument_list_too_long.mdwn40
-rw-r--r--doc/bugs/git-annex:_Argument_list_too_long/comment_1_3f83ea525436b2379ab29a0f860c4669._comment8
-rw-r--r--doc/bugs/git-annex:_Argument_list_too_long/comment_2_b417c94169378ef7d0d278ebae517fa1._comment8
-rw-r--r--doc/bugs/git-annex:_Argument_list_too_long/comment_3_fa925cca216cb810ad80482b19fc6053._comment8
-rw-r--r--doc/bugs/git-annex:_Argument_list_too_long/comment_4_8bd2996107b2d272c32810658e07e715._comment8
-rw-r--r--doc/bugs/git-annex:_Argument_list_too_long/comment_5_378de7d7503a64611eab62f2f5cffef3._comment15
-rw-r--r--doc/bugs/git-annex:_Argument_list_too_long/comment_6_a94e17151348d02999442dd1219babfb._comment10
-rw-r--r--doc/bugs/git-annex:_fd:14:_hGetLine:_end_of_file.mdwn2
-rw-r--r--doc/bugs/git-annex_broken_on_Android_4.3/comment_6_5741b6a5997328fdcd5cc99f841b18d3._comment8
-rw-r--r--doc/bugs/git-annex_opens_too_many_files.mdwn2
-rw-r--r--doc/bugs/git-annex_sync_may_fail_when_the_directory_I__39__m_in_disepeared.mdwn1
-rw-r--r--doc/bugs/git_annex_copy_trying_to_connect_to_remotes_uninvolved.mdwn2
-rw-r--r--doc/bugs/git_annex_indirect_can_fail_catastrophically.mdwn69
-rw-r--r--doc/bugs/immediately_drops_files/comment_4_425b79865eb77d69d0b7a71a14639f81._comment10
-rw-r--r--doc/bugs/immediately_drops_files/comment_5_7c9f660b6bcec31827a44a650e9d4622._comment10
-rw-r--r--doc/bugs/importfeed_fails__44___bad_feed_content.mdwn2
-rw-r--r--doc/bugs/manpage_has_slight_indentation_error.mdwn2
-rw-r--r--doc/bugs/merge_causes_out_of_memory_on_large_repos/comment_2_06723d13ecdaf87de5ff2b209e3c5198._comment10
-rw-r--r--doc/bugs/unfinished_repos_in_webapp.mdwn4
-rw-r--r--doc/bugs/utf8.mdwn5
-rw-r--r--doc/bugs/windows_fails_test___34__recoverEncode__34__.mdwn39
-rw-r--r--doc/bugs/windows_fails_test___34__recoverEncode__34__/comment_1_424b3536e21e02f192f7f2b8e833ed18._comment67
-rw-r--r--doc/bugs/windows_fails_test___34__recoverEncode__34__/comment_2_78db183aa401e2023d7faec5f7a4a573._comment10
-rw-r--r--doc/bugs/windows_fails_test___34__recoverEncode__34__/comment_3_ed2da19eaf0bd0864f6b28816a79bc23._comment8
-rw-r--r--doc/bugs/youtube_support_suddenly_stopped_working.mdwn62
-rw-r--r--doc/builds.mdwn20
-rw-r--r--doc/contact/comment_2_95b6d868b913418de50ba121d71d2390._comment10
-rw-r--r--doc/design/assistant/blog/day_18__merging/comment_1_7a553ad559519f3b3e3cd20115b4c44e._comment15
-rw-r--r--doc/design/assistant/gpgkeys.mdwn19
-rw-r--r--doc/design/assistant/polls/Android_default_directory.mdwn2
-rw-r--r--doc/devblog/day_10__lazy_Sunday.mdwn23
-rw-r--r--doc/devblog/day_11__webapp_encrypted_drives.mdwn12
-rw-r--r--doc/devblog/day_12__gpg_key_generation.mdwn35
-rw-r--r--doc/devblog/day_12__gpg_key_generation/comment_1_48cdfe3bd71fb348ae05fd90e8cf1dab._comment8
-rw-r--r--doc/devblog/day_13__encrypted_sneakernet_working.mdwn13
-rw-r--r--doc/devblog/day_6__gcrypt_fully_working/comment_1_136bb7537a9ba93d400ce6f6ea1932ac._comment8
-rw-r--r--doc/devblog/day_6__gcrypt_fully_working/comment_2_1f8faa65bbd56a12588b43a5bc822d96._comment10
-rw-r--r--doc/devblog/day_8__ill.mdwn20
-rw-r--r--doc/devblog/day_9__Friday_the_13th.mdwn21
-rw-r--r--doc/devblog/day_9__Friday_the_13th/comment_1_07195b4ec399ba1be6c8bdb3ae0fa50b._comment12
-rw-r--r--doc/forum/Annex_dropping_files/comment_1_62fbea95248fda2ff075b5a8952a728f._comment8
-rw-r--r--doc/forum/Forcing_one_repo_to_contain_a_copy_of_all_files.mdwn1
-rw-r--r--doc/forum/Forcing_one_repo_to_contain_a_copy_of_all_files/comment_1_702b1b94c735f1b9cde16daa77a80c12._comment8
-rw-r--r--doc/forum/Git_annex_on_Windows/comment_4_b9232deab6bc5036d7339aa202013218._comment12
-rw-r--r--doc/forum/Git_annex_on_Windows/comment_5_27af3c431b50b540d2bd1d3af3f21080._comment8
-rw-r--r--doc/forum/Links_or_actual_files__63___Confused__33__.mdwn21
-rw-r--r--doc/forum/Links_or_actual_files__63___Confused__33__/comment_1_779cee2448d7070b1dd636d01296c01e._comment8
-rw-r--r--doc/forum/Links_or_actual_files__63___Confused__33__/comment_2_bccda88697ab7beec0b9fe9ee0230688._comment18
-rw-r--r--doc/forum/Links_or_actual_files__63___Confused__33__/comment_3_c2a9da3f03b55ff294dc0d2010380119._comment8
-rw-r--r--doc/forum/My_first_impressions_after_some_weeks_with_git-annex_assistant/comment_2_109534a45881ce94a4586c8a83945f9f._comment85
-rw-r--r--doc/forum/Permission_denied___40__publickey__41___On_second_Step_...___63__.mdwn36
-rw-r--r--doc/forum/Running_out_of__inodes.mdwn17
-rw-r--r--doc/forum/Running_out_of__inodes/comment_1_abc73d9ad662ef642337b683bf0a0253._comment12
-rw-r--r--doc/forum/Share_with_friend_copies_only_sym_links.mdwn38
-rw-r--r--doc/forum/Share_with_friend_copies_only_sym_links/comment_1_a8d22dfefb219f0c9130cc294364b198._comment17
-rw-r--r--doc/forum/Slightly_finer_control_over_file_whereabouts.mdwn18
-rw-r--r--doc/forum/Slightly_finer_control_over_file_whereabouts/comment_1_6236bcfa9beba705ead3ec2141c5d835._comment8
-rw-r--r--doc/forum/Sync_with_one_offline_peer/comment_2_c9ba3983b37b0c1868269616fd81e518._comment14
-rw-r--r--doc/forum/Sync_with_one_offline_peer/comment_3_28b9c003b4560c3ce90c9ebf808b091b._comment10
-rw-r--r--doc/forum/Use_case_with_syncing_only_a_subset_possible__63__.mdwn13
-rw-r--r--doc/forum/Use_case_with_syncing_only_a_subset_possible__63__/comment_1_a0a272a0931b27e5c94b93e42656b62c._comment10
-rw-r--r--doc/forum/can_I_only_add_my_own_files__63__.mdwn27
-rw-r--r--doc/forum/git-annex:_status:_1_failed/comment_3_4bf55320439de152a65e2f21d4a0604b._comment14
-rw-r--r--doc/forum/git-annex:_status:_1_failed/comment_4_cb2cfb798c6171f77eb7c4c4061c0f0c._comment8
-rw-r--r--doc/forum/git-annex_on_archlinuxarm__44___armv6.mdwn20
-rw-r--r--doc/forum/git-annex_on_archlinuxarm__44___armv6/comment_1_88fa644df8614c2db0d092b3eb1d3156._comment10
-rw-r--r--doc/forum/git-annex_pre-commit_eats_all_my_4GB_of_ram.mdwn24
-rw-r--r--doc/forum/git-annex_pre-commit_eats_all_my_4GB_of_ram/comment_1_ff16c7932b60b85c744bafc48bb040e4._comment13
-rw-r--r--doc/forum/git-annex_pre-commit_eats_all_my_4GB_of_ram/comment_2_5599cddf579d18f70cab6e48d04ae99d._comment12
-rw-r--r--doc/forum/git-annex_unused_not_dropping_deleted_files.mdwn34
-rw-r--r--doc/forum/git-annex_unused_not_dropping_deleted_files/comment_1_2152cfb09675e46e7492e198dd3ea094._comment8
-rw-r--r--doc/forum/git-annex_unused_not_dropping_deleted_files/comment_2_97e666dbac9de2a5e688921cba8a42e9._comment20
-rw-r--r--doc/forum/git-annex_unused_not_dropping_deleted_files/comment_3_d7b0e9515bface28f3650b8aa20ec2f4._comment8
-rw-r--r--doc/forum/git-annex_unused_not_dropping_deleted_files/comment_4_5816f6cab42e27e724e735368f693b09._comment8
-rw-r--r--doc/forum/git-annex_unused_not_dropping_deleted_files/comment_5_8e97f39225515f0bf8b168dfd6a0efab._comment10
-rw-r--r--doc/forum/git-annex_unused_not_dropping_deleted_files/comment_6_bef37f8ec9c337387b79ffd6d56fe425._comment10
-rw-r--r--doc/forum/manual_update_of_.git__47__annex__47__objects/comment_1_ea6ec91150c8962e2711631f2422bf3a._comment10
-rw-r--r--doc/forum/nntp__47__usenet_special_remote/comment_2_48736ed17c98ffcfb13ec00b901b2dd6._comment13
-rw-r--r--doc/forum/purge_files_with_no_copies.mdwn3
-rw-r--r--doc/forum/ui/comment_2_b493ee97eb2378e72c12f3d137109580._comment15
-rw-r--r--doc/git-annex.mdwn198
-rw-r--r--doc/install.mdwn4
-rw-r--r--doc/install/Android.mdwn3
-rw-r--r--doc/install/ArchLinux/comment_2_e5f923e6d81cfb3fba7a72f60baaf4ab._comment16
-rw-r--r--doc/install/ArchLinux/comment_3_8e607cd883ec174571e9dfe3b25bfd05._comment8
-rw-r--r--doc/install/ArchLinux/comment_4_a378391dd218859f381c479259dd8fe3._comment10
-rw-r--r--doc/install/Linux_standalone.mdwn3
-rw-r--r--doc/install/OSX/comment_23_3d82a270dd4b0159f4aab5675166e1e3._comment30
-rw-r--r--doc/install/OSX/comment_24_b9d3563a2cc3d769f27876e028dc344d._comment12
-rw-r--r--doc/install/cabal/comment_19_74639fe525042aca12f9557d5d6a4f98._comment8
-rw-r--r--doc/install/fromscratch.mdwn2
-rw-r--r--doc/related_software.mdwn1
-rw-r--r--doc/special_remotes/xmpp/comment_3_48ddbba1402d89acaea07cff747c48e0._comment28
-rw-r--r--doc/tips/flickrannex.mdwn37
-rw-r--r--doc/tips/flickrannex/comment_13_1596e70dca71c853fd1d6fc9bde02b18._comment12
-rw-r--r--doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant/comment_6_6a5d6af107b297afd008b021f73d787b._comment8
-rw-r--r--doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant/comment_7_74d57cf503a86d8f7ace2d769dbb58be._comment10
-rw-r--r--doc/tips/using_the_web_as_a_special_remote.mdwn2
-rw-r--r--doc/todo/__96__git_annex_status__47__version__96___should_print_the_local_OS.mdwn6
-rw-r--r--doc/todo/faster_rsync_remotes.mdwn3
-rw-r--r--doc/todo/http_git_annex_404_retry.mdwn (renamed from doc/bugs/http_git_annex_404_retry.mdwn)0
-rw-r--r--doc/todo/importfeed:_allow___36____123__itemdate__125___with_--template.mdwn5
-rw-r--r--doc/todo/importfeed:_allow___36____123__itemdate__125___with_--template/comment_1_62752c760fc12eca0c34d67d58753d00._comment10
-rw-r--r--doc/todo/importfeed:_allow___36____123__itemdate__125___with_--template/comment_2_21672360060f48bc2eacfa535ff4c94d._comment11
-rw-r--r--doc/todo/makefile:_respect___36__PREFIX.mdwn25
-rw-r--r--doc/todo/mdwn2man:_make_backticks_bold.mdwn2
-rw-r--r--doc/todo/nicer_whereis_output.mdwn29
-rw-r--r--doc/todo/support_for_lossy_remotes.mdwn6
-rw-r--r--doc/todo/wishlist:___34__quiet__34___annex_get_for_centralized_use_case.mdwn5
-rw-r--r--doc/todo/wishlist:_allow_the_same_remote_to_be_accissable_via_different_methods.mdwn2
-rw-r--r--doc/todo/wishlist:_allow_users_to_provide_UUID_when_running___96__git_annex_init__96__.mdwn (renamed from doc/bugs/wishlist:_allow_users_to_provide_UUID_when_running___96__git_annex_init__96__.mdwn)0
-rw-r--r--doc/todo/wishlist:_archive_from_remote_with_the_least_free_space.mdwn1
-rw-r--r--doc/todo/wishlist:_display_name_of_object_when_addWatcher_gets_a_permission_denied.mdwn1
-rw-r--r--doc/todo/wishlist:_display_status_of_remotes_in_the_webapp.mdwn1
-rw-r--r--doc/todo/wishlist:_generic_annex.cost-command.mdwn (renamed from doc/bugs/wishlist:_generic_annex.cost-command.mdwn)0
-rw-r--r--doc/todo/wishlist:_make_git_annex_reinject_work_in_direct_mode.mdwn (renamed from doc/bugs/wishlist:_make_git_annex_reinject_work_in_direct_mode.mdwn)0
-rw-r--r--doc/todo/wishlist:_more_descriptive_commit_messages_in_git-annex_branch.mdwn (renamed from doc/bugs/wishlist:_more_descriptive_commit_messages_in_git-annex_branch.mdwn)0
-rw-r--r--doc/todo/wishlist:_option_to_print_more_info_with___39__unused__39__.mdwn (renamed from doc/bugs/wishlist:_option_to_print_more_info_with___39__unused__39__.mdwn)0
-rw-r--r--doc/todo/wishlist:_query_things_like_description__44___trust_level.mdwn (renamed from doc/bugs/wishlist:_query_things_like_description__44___trust_level.mdwn)0
-rw-r--r--doc/todo/wishlist:_query_things_like_description__44___trust_level/comment_1_14311384788312b96e550749ab7de9ea._comment (renamed from doc/bugs/wishlist:_query_things_like_description__44___trust_level/comment_1_14311384788312b96e550749ab7de9ea._comment)0
-rw-r--r--doc/todo/wishlist:_query_things_like_description__44___trust_level/comment_2_342d1ac07573c7ef4e27f003a692e261._comment (renamed from doc/bugs/wishlist:_query_things_like_description__44___trust_level/comment_2_342d1ac07573c7ef4e27f003a692e261._comment)0
-rw-r--r--doc/todo/wishlist:_simple_url_for_webapp.mdwn (renamed from doc/bugs/wishlist:_simple_url_for_webapp.mdwn)0
-rw-r--r--doc/todo/wishlist:_simple_url_for_webapp/comment_1_552aad504fbb68d1f85abfde8c535e69._comment (renamed from doc/bugs/wishlist:_simple_url_for_webapp/comment_1_552aad504fbb68d1f85abfde8c535e69._comment)0
-rw-r--r--doc/todo/wishlist:_support_drop__44___find_on_special_remotes.mdwn (renamed from doc/bugs/wishlist:_support_drop__44___find_on_special_remotes.mdwn)0
-rw-r--r--doc/todo/wishlist:_support_drop__44___find_on_special_remotes/comment_1_f11ed642a83d965076778a162f701e84._comment (renamed from doc/bugs/wishlist:_support_drop__44___find_on_special_remotes/comment_1_f11ed642a83d965076778a162f701e84._comment)0
-rw-r--r--doc/users/tobiastheviking.mdwn20
-rw-r--r--git-annex.cabal2
-rw-r--r--standalone/licences.gzbin60510 -> 60519 bytes
-rwxr-xr-xstandalone/linux/runshell3
-rwxr-xr-xstandalone/osx/git-annex.app/Contents/MacOS/runshell3
217 files changed, 3044 insertions, 229 deletions
diff --git a/Annex/Direct.hs b/Annex/Direct.hs
index d2e2cdc00..b66b2fdfd 100644
--- a/Annex/Direct.hs
+++ b/Annex/Direct.hs
@@ -15,7 +15,7 @@ import qualified Git.DiffTree as DiffTree
import Git.Sha
import Git.Types
import Annex.CatFile
-import Utility.FileMode
+import Git.FileMode
import qualified Annex.Queue
import Logs.Location
import Backend
diff --git a/Assistant/DeleteRemote.hs b/Assistant/DeleteRemote.hs
index 2e06d52cd..6a77eedc6 100644
--- a/Assistant/DeleteRemote.hs
+++ b/Assistant/DeleteRemote.hs
@@ -17,8 +17,7 @@ import Logs.Location
import Assistant.DaemonStatus
import qualified Remote
import Remote.List
-import qualified Git.Command
-import qualified Git.BuildVersion
+import qualified Git.Remote
import Logs.Trust
import qualified Annex
@@ -35,15 +34,7 @@ disableRemote uuid = do
remote <- fromMaybe (error "unknown remote")
<$> liftAnnex (Remote.remoteFromUUID uuid)
liftAnnex $ do
- inRepo $ Git.Command.run
- [ Param "remote"
- -- name of this subcommand changed
- , Param $
- if Git.BuildVersion.older "1.8.0"
- then "rm"
- else "remove"
- , Param (Remote.name remote)
- ]
+ inRepo $ Git.Remote.remove (Remote.name remote)
void $ remoteListRefresh
updateSyncRemotes
return remote
diff --git a/Assistant/MakeRemote.hs b/Assistant/MakeRemote.hs
index fa662babd..4b0a4c7d9 100644
--- a/Assistant/MakeRemote.hs
+++ b/Assistant/MakeRemote.hs
@@ -27,8 +27,6 @@ import Creds
import qualified Data.Text as T
import qualified Data.Map as M
-type RemoteName = String
-
{- Sets up and begins syncing with a new ssh or rsync remote. -}
makeSshRemote :: Bool -> SshData -> Maybe Cost -> Assistant Remote
makeSshRemote forcersync sshdata mcost = do
diff --git a/Assistant/Threads/MountWatcher.hs b/Assistant/Threads/MountWatcher.hs
index 143ae9cee..970585b42 100644
--- a/Assistant/Threads/MountWatcher.hs
+++ b/Assistant/Threads/MountWatcher.hs
@@ -174,14 +174,14 @@ remotesUnder dir = do
pairs <- liftAnnex $ mapM (checkremote repotop) rs
let (waschanged, rs') = unzip pairs
when (any id waschanged) $ do
- liftAnnex $ Annex.changeState $ \s -> s { Annex.remotes = rs' }
+ liftAnnex $ Annex.changeState $ \s -> s { Annex.remotes = catMaybes rs' }
updateSyncRemotes
- return $ map snd $ filter fst pairs
+ return $ catMaybes $ map snd $ filter fst pairs
where
checkremote repotop r = case Remote.localpath r of
Just p | dirContains dir (absPathFrom repotop p) ->
(,) <$> pure True <*> updateRemote r
- _ -> return (False, r)
+ _ -> return (False, Just r)
type MountPoints = S.Set Mntent
diff --git a/Build/BundledPrograms.hs b/Build/BundledPrograms.hs
index 9a50778d4..7ce3900c1 100644
--- a/Build/BundledPrograms.hs
+++ b/Build/BundledPrograms.hs
@@ -35,6 +35,7 @@ bundledPrograms = catMaybes
, ifset SysConfig.wget "wget"
, ifset SysConfig.bup "bup"
, SysConfig.lsof
+ , SysConfig.gcrypt
, SysConfig.sha1
, SysConfig.sha256
, SysConfig.sha512
diff --git a/Build/Configure.hs b/Build/Configure.hs
index 31fbbf1dd..9caff6c08 100644
--- a/Build/Configure.hs
+++ b/Build/Configure.hs
@@ -38,6 +38,7 @@ tests =
[ ("gpg", "--version >/dev/null")
, ("gpg2", "--version >/dev/null") ]
, TestCase "lsof" $ findCmdPath "lsof" "lsof"
+ , TestCase "gcrypt" $ findCmdPath "gcrypt" "git-remote-gcrypt"
, TestCase "ssh connection caching" getSshConnectionCaching
] ++ shaTestCases
[ (1, "da39a3ee5e6b4b0d3255bfef95601890afd80709")
diff --git a/Build/mdwn2man b/Build/mdwn2man
index 7f819adf7..aadb13cdf 100755
--- a/Build/mdwn2man
+++ b/Build/mdwn2man
@@ -26,7 +26,7 @@ while (<>) {
$inlist=1;
$spippara=0;
}
- elsif (/.SH/) {
+ elsif (/^.SH/) {
$skippara=0;
$inlist=0;
}
diff --git a/Command.hs b/Command.hs
index fec733f72..2c157304f 100644
--- a/Command.hs
+++ b/Command.hs
@@ -111,7 +111,7 @@ numCopies file = do
Just n -> return $ Just n
Nothing -> readish <$> checkAttr "annex.numcopies" file
-numCopiesCheck :: FilePath -> Key -> (Int -> Int -> Bool) -> Annex Bool
+numCopiesCheck :: FilePath -> Key -> (Int -> Int -> v) -> Annex v
numCopiesCheck file key vs = do
numcopiesattr <- numCopies file
needed <- getNumCopies numcopiesattr
diff --git a/Command/AddUrl.hs b/Command/AddUrl.hs
index 21cb83f7e..8ac0e342f 100644
--- a/Command/AddUrl.hs
+++ b/Command/AddUrl.hs
@@ -64,7 +64,7 @@ start relaxed optfile pathdepth s = go $ fromMaybe bad $ parseURI s
go url = case downloader of
QuviDownloader -> usequvi
DefaultDownloader ->
-#ifdef WITH_QIVI
+#ifdef WITH_QUVI
ifM (liftIO $ Quvi.supported s')
( usequvi
, regulardownload url
diff --git a/Command/Fsck.hs b/Command/Fsck.hs
index 35d6fc7b6..5e150f936 100644
--- a/Command/Fsck.hs
+++ b/Command/Fsck.hs
@@ -271,7 +271,7 @@ verifyDirectMapping key file = do
{- Ensures that files whose content is available are in direct mode. -}
verifyDirectMode :: Key -> FilePath -> Annex Bool
verifyDirectMode key file = do
- whenM (isDirect <&&> islink) $ do
+ whenM (isDirect <&&> isJust <$> isAnnexLink file) $ do
v <- toDirectGen key file
case v of
Nothing -> noop
@@ -279,8 +279,6 @@ verifyDirectMode key file = do
showNote "fixing direct mode"
a
return True
- where
- islink = liftIO $ isSymbolicLink <$> getSymbolicLinkStatus file
{- The size of the data for a key is checked against the size encoded in
- the key's metadata, if available.
diff --git a/Command/Merge.hs b/Command/Merge.hs
index 659f14080..5d6b2ffd2 100644
--- a/Command/Merge.hs
+++ b/Command/Merge.hs
@@ -11,7 +11,7 @@ import Common.Annex
import Command
import qualified Annex.Branch
import qualified Git.Branch
-import Command.Sync (mergeLocal)
+import Command.Sync (prepMerge, mergeLocal)
def :: [Command]
def = [command "merge" paramNothing seek SectionMaintenance
@@ -35,4 +35,5 @@ mergeBranch = do
mergeSynced :: CommandStart
mergeSynced = do
branch <- inRepo Git.Branch.current
+ prepMerge
maybe stop mergeLocal branch
diff --git a/Command/Remotes.hs b/Command/Remotes.hs
new file mode 100644
index 000000000..f9ae9b3cd
--- /dev/null
+++ b/Command/Remotes.hs
@@ -0,0 +1,64 @@
+{- git-annex command
+ -
+ - Copyright 2013 Joey Hess <joey@kitenet.net>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Command.Remotes where
+
+import qualified Data.Set as S
+
+import Common.Annex
+import Command
+import Remote
+import Logs.Trust
+import Annex.UUID
+
+def :: [Command]
+def = [noCommit $ command "remotes" paramPaths seek
+ SectionQuery "show which remotes contain files"]
+
+seek :: [CommandSeek]
+seek =
+ [ withValue getList $ \l -> withNothing $ startHeader l
+ , withValue getList $ \l -> withFilesInGit $ whenAnnexed $ start l
+ ]
+
+getList :: Annex [(UUID, RemoteName, TrustLevel)]
+getList = do
+ rs <- remoteList
+ ts <- mapM (lookupTrust . uuid) rs
+ hereu <- getUUID
+ heretrust <- lookupTrust hereu
+ return $ (hereu, "here", heretrust) : zip3 (map uuid rs) (map name rs) ts
+
+startHeader :: [(UUID, RemoteName, TrustLevel)] -> CommandStart
+startHeader l = do
+ liftIO $ putStrLn $ header $ map (\(_, n, t) -> (n, t)) l
+ stop
+
+start :: [(UUID, RemoteName, TrustLevel)] -> FilePath -> (Key, Backend) -> CommandStart
+start l file (key, _) = do
+ ls <- S.fromList <$> keyLocations key
+ liftIO $ putStrLn $ format (map (\(u, _, t) -> (t, S.member u ls)) l) file
+ stop
+
+type RemoteName = String
+type Present = Bool
+
+header :: [(RemoteName, TrustLevel)] -> String
+header remotes = (unlines $ zipWith formatheader [0..] remotes) ++ (pipes (length remotes))
+ where
+ formatheader n (remotename, trustlevel) = (pipes n) ++ remotename ++ (trust trustlevel)
+ pipes = flip replicate '|'
+ trust UnTrusted = " (untrusted)"
+ trust _ = ""
+
+format :: [(TrustLevel, Present)] -> FilePath -> String
+format remotes file = thereMap ++ " " ++ file
+ where
+ thereMap = concatMap there remotes
+ there (UnTrusted, True) = "x"
+ there (_, True) = "X"
+ there (_, False) = "_"
diff --git a/Command/Status.hs b/Command/Status.hs
index af85fcc2a..8872747fb 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 Data.Ord
import System.PosixCompat.Files
import Common.Annex
@@ -49,10 +50,23 @@ data KeyData = KeyData
, backendsKeys :: M.Map String Integer
}
+data NumCopiesStats = NumCopiesStats
+ { numCopiesVarianceMap :: M.Map Variance Integer
+ }
+
+newtype Variance = Variance Int
+ deriving (Eq, Ord)
+
+instance Show Variance where
+ show (Variance n)
+ | n >= 0 = "numcopies +" ++ show n
+ | otherwise = "numcopies " ++ show n
+
-- cached info that multiple Stats use
data StatInfo = StatInfo
{ presentData :: Maybe KeyData
, referencedData :: Maybe KeyData
+ , numCopiesStats :: Maybe NumCopiesStats
}
-- a state monad for running Stats in
@@ -77,19 +91,25 @@ start ps = do
globalStatus :: Annex ()
globalStatus = do
- fast <- Annex.getState Annex.fast
- let stats = if fast
- then global_fast_stats
- else global_fast_stats ++ global_slow_stats
+ stats <- selStats global_fast_stats global_slow_stats
showCustom "status" $ do
- evalStateT (mapM_ showStat stats) (StatInfo Nothing Nothing)
+ evalStateT (mapM_ showStat stats) (StatInfo Nothing Nothing Nothing)
return True
localStatus :: FilePath -> Annex ()
localStatus dir = showCustom (unwords ["status", dir]) $ do
- let stats = map (\s -> s dir) local_stats
+ stats <- selStats (tostats local_fast_stats) (tostats local_slow_stats)
evalStateT (mapM_ showStat stats) =<< getLocalStatInfo dir
return True
+ where
+ tostats = map (\s -> s dir)
+
+selStats :: [Stat] -> [Stat] -> Annex [Stat]
+selStats fast_stats slow_stats = do
+ fast <- Annex.getState Annex.fast
+ return $ if fast
+ then fast_stats
+ else fast_stats ++ slow_stats
{- Order is significant. Less expensive operations, and operations
- that share data go together.
@@ -116,14 +136,18 @@ global_slow_stats =
, bloom_info
, backend_usage
]
-local_stats :: [FilePath -> Stat]
-local_stats =
+local_fast_stats :: [FilePath -> Stat]
+local_fast_stats =
[ local_dir
, const local_annex_keys
, const local_annex_size
, const known_annex_keys
, const known_annex_size
]
+local_slow_stats :: [FilePath -> Stat]
+local_slow_stats =
+ [ const numcopies_stats
+ ]
stat :: String -> (String -> StatState String) -> Stat
stat desc a = return $ Just (desc, a desc)
@@ -255,6 +279,14 @@ backend_usage = stat "backend usage" $ nojson $
reverse $ sort $ map swap $ M.toList $
M.unionWith (+) x y
+numcopies_stats :: Stat
+numcopies_stats = stat "numcopies stats" $ nojson $
+ calc <$> (maybe M.empty numCopiesVarianceMap <$> cachedNumCopiesStats)
+ where
+ calc = multiLine
+ . map (\(variance, count) -> show variance ++ ": " ++ show count)
+ . reverse . sortBy (comparing snd) . M.toList
+
cachedPresentData :: StatState KeyData
cachedPresentData = do
s <- get
@@ -276,29 +308,40 @@ cachedReferencedData = do
put s { referencedData = Just v }
return v
+-- currently only available for local status
+cachedNumCopiesStats :: StatState (Maybe NumCopiesStats)
+cachedNumCopiesStats = numCopiesStats <$> get
+
getLocalStatInfo :: FilePath -> Annex StatInfo
getLocalStatInfo dir = do
+ fast <- Annex.getState Annex.fast
matcher <- Limit.getMatcher
- (presentdata, referenceddata) <-
+ (presentdata, referenceddata, numcopiesstats) <-
Command.Unused.withKeysFilesReferencedIn dir initial
- (update matcher)
- return $ StatInfo (Just presentdata) (Just referenceddata)
+ (update matcher fast)
+ return $ StatInfo (Just presentdata) (Just referenceddata) (Just numcopiesstats)
where
- initial = (emptyKeyData, emptyKeyData)
- update matcher key file vs@(presentdata, referenceddata) =
+ initial = (emptyKeyData, emptyKeyData, emptyNumCopiesStats)
+ update matcher fast key file vs@(presentdata, referenceddata, numcopiesstats) =
ifM (matcher $ FileInfo file file)
- ( (,)
+ ( (,,)
<$> ifM (inAnnex key)
( return $ addKey key presentdata
, return presentdata
)
<*> pure (addKey key referenceddata)
+ <*> if fast
+ then return numcopiesstats
+ else updateNumCopiesStats key file numcopiesstats
, return vs
)
emptyKeyData :: KeyData
emptyKeyData = KeyData 0 0 0 M.empty
+emptyNumCopiesStats :: NumCopiesStats
+emptyNumCopiesStats = NumCopiesStats $ M.empty
+
foldKeys :: [Key] -> KeyData
foldKeys = foldl' (flip addKey) emptyKeyData
@@ -314,6 +357,13 @@ addKey key (KeyData count size unknownsize backends) =
!unknownsize' = maybe (unknownsize + 1) (const unknownsize) ks
ks = keySize key
+updateNumCopiesStats :: Key -> FilePath -> NumCopiesStats -> Annex NumCopiesStats
+updateNumCopiesStats key file stats = do
+ variance <- Variance <$> numCopiesCheck file key (-)
+ return $ stats { numCopiesVarianceMap = update (numCopiesVarianceMap stats) variance }
+ where
+ update m variance = M.insertWith' (+) variance 1 m
+
showSizeKeys :: KeyData -> String
showSizeKeys d = total ++ missingnote
where
diff --git a/Command/Sync.hs b/Command/Sync.hs
index e7da229a0..ca823c736 100644
--- a/Command/Sync.hs
+++ b/Command/Sync.hs
@@ -39,6 +39,7 @@ def = [command "sync" (paramOptional (paramRepeating paramRemote))
-- syncing involves several operations, any of which can independently fail
seek :: CommandSeek
seek rs = do
+ prepMerge
branch <- fromMaybe nobranch <$> inRepo Git.Branch.current
remotes <- syncRemotes rs
return $ concat
@@ -52,6 +53,11 @@ seek rs = do
where
nobranch = error "no branch is checked out"
+{- Merging may delete the current directory, so go to the top
+ - of the repo. -}
+prepMerge :: Annex ()
+prepMerge = liftIO . setCurrentDirectory =<< fromRepo Git.repoPath
+
syncBranch :: Git.Ref -> Git.Ref
syncBranch = Git.Ref.under "refs/heads/synced/"
diff --git a/Config.hs b/Config.hs
index 1e4d6caec..ac251983a 100644
--- a/Config.hs
+++ b/Config.hs
@@ -36,8 +36,11 @@ setConfig (ConfigKey key) value = do
{- Unsets a git config setting. (Leaves it in state currently.) -}
unsetConfig :: ConfigKey -> Annex ()
-unsetConfig (ConfigKey key) = inRepo $ Git.Command.run
- [Param "config", Param "--unset", Param key]
+unsetConfig ck@(ConfigKey key) = ifM (isJust <$> getConfigMaybe ck)
+ ( inRepo $ Git.Command.run
+ [Param "config", Param "--unset", Param key]
+ , noop -- avoid unsetting something not set; that would fail
+ )
{- A per-remote config setting in git config. -}
remoteConfig :: Git.Repo -> UnqualifiedConfigKey -> ConfigKey
diff --git a/Git/FileMode.hs b/Git/FileMode.hs
new file mode 100644
index 000000000..d42df9833
--- /dev/null
+++ b/Git/FileMode.hs
@@ -0,0 +1,20 @@
+{- git file modes
+ -
+ - Copyright 2013 Joey Hess <joey@kitenet.net>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+{-# LANGUAGE CPP #-}
+
+module Git.FileMode where
+
+import Utility.FileMode
+
+import System.PosixCompat.Types
+
+{- Git uses a special file mode to indicate a symlink. This is the case
+ - even on Windows, so we hard code the valuse here, rather than using
+ - System.Posix.Files.symbolicLinkMode. -}
+isSymLink :: FileMode -> Bool
+isSymLink = checkMode 40960
diff --git a/Git/GCrypt.hs b/Git/GCrypt.hs
index 18d8fa771..f2f38dfa4 100644
--- a/Git/GCrypt.hs
+++ b/Git/GCrypt.hs
@@ -13,6 +13,7 @@ import Common
import Git.Types
import Git.Construct
import qualified Git.Config as Config
+import qualified Git.Command as Command
import Utility.Gpg
urlPrefix :: String
@@ -31,8 +32,8 @@ isEncrypted _ = False
- Throws an exception if an url is invalid or the repo does not use
- gcrypt.
-}
-encryptedRepo :: Repo -> Repo -> IO Repo
-encryptedRepo baserepo = go
+encryptedRemote :: Repo -> Repo -> IO Repo
+encryptedRemote baserepo = go
where
go Repo { location = Url url }
| urlPrefix `isPrefixOf` u =
@@ -44,12 +45,34 @@ encryptedRepo baserepo = go
go _ = notencrypted
notencrypted = error "not a gcrypt encrypted repository"
+data ProbeResult = Decryptable | NotDecryptable | NotEncrypted
+
+{- Checks if the git repo at a location uses gcrypt.
+ -
+ - Rather expensive -- many need to fetch the entire repo contents.
+ - (Which is fine if the repo is going to be added as a remote..)
+ -}
+probeRepo :: String -> Repo -> IO ProbeResult
+probeRepo loc baserepo = do
+ let p = proc "git" $ toCommand $ Command.gitCommandLine
+ [ Param "remote-gcrypt"
+ , Param "--check"
+ , Param loc
+ ] baserepo
+ (_, _, _, pid) <- createProcess p
+ code <- waitForProcess pid
+ return $ case code of
+ ExitSuccess -> Decryptable
+ ExitFailure 1 -> NotDecryptable
+ ExitFailure _ -> NotEncrypted
+
type RemoteName = String
+type GCryptId = String
{- gcrypt gives each encrypted repository a uique gcrypt-id,
- which is stored in the repository (in encrypted form)
- and cached in a per-remote gcrypt-id configuration setting. -}
-remoteRepoId :: Repo -> Maybe RemoteName -> Maybe String
+remoteRepoId :: Repo -> Maybe RemoteName -> Maybe GCryptId
remoteRepoId = getRemoteConfig "gcrypt-id"
getRemoteConfig :: String -> Repo -> Maybe RemoteName -> Maybe String
@@ -74,5 +97,8 @@ getParticiantList globalconfigrepo repo remotename = KeyIds $ parse $ firstJust
remoteParticipantConfigKey :: RemoteName -> String
remoteParticipantConfigKey = remoteConfigKey "gcrypt-participants"
+remoteSigningKey :: RemoteName -> String
+remoteSigningKey = remoteConfigKey "gcrypt-signingkey"
+
remoteConfigKey :: String -> RemoteName -> String
remoteConfigKey key remotename = "remote." ++ remotename ++ "." ++ key
diff --git a/Git/Remote.hs b/Git/Remote.hs
index 5640e9ff2..e853e53cb 100644
--- a/Git/Remote.hs
+++ b/Git/Remote.hs
@@ -8,15 +8,21 @@
module Git.Remote where
import Common
+import Git
+import qualified Git.Command
+import qualified Git.BuildVersion
+
import Data.Char
+type RemoteName = String
+
{- Construct a legal git remote name out of an arbitrary input string.
-
- There seems to be no formal definition of this in the git source,
- just some ad-hoc checks, and some other things that fail with certian
- types of names (like ones starting with '-').
-}
-makeLegalName :: String -> String
+makeLegalName :: String -> RemoteName
makeLegalName s = case filter legal $ replace "/" "_" s of
-- it can't be empty
[] -> "unnamed"
@@ -31,3 +37,14 @@ makeLegalName s = case filter legal $ replace "/" "_" s of
legal '_' = True
legal '.' = True
legal c = isAlphaNum c
+
+remove :: RemoteName -> Repo -> IO ()
+remove remotename = Git.Command.run
+ [ Param "remote"
+ -- name of this subcommand changed
+ , Param $
+ if Git.BuildVersion.older "1.8.0"
+ then "rm"
+ else "remove"
+ , Param remotename
+ ]
diff --git a/GitAnnex.hs b/GitAnnex.hs
index 1212edf9f..ab1e8c3d0 100644
--- a/GitAnnex.hs
+++ b/GitAnnex.hs
@@ -42,6 +42,7 @@ import qualified Command.Lock
import qualified Command.PreCommit
import qualified Command.Find
import qualified Command.Whereis
+import qualified Command.Remotes
import qualified Command.Log
import qualified Command.Merge
import qualified Command.Status
@@ -132,6 +133,7 @@ cmds = concat
, Command.AddUnused.def
, Command.Find.def
, Command.Whereis.def
+ , Command.Remotes.def
, Command.Log.def
, Command.Merge.def
, Command.Status.def
diff --git a/Makefile b/Makefile
index 4d3542f13..5b1a6d467 100644
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,7 @@ all=git-annex $(mans) docs
GHC?=ghc
GHCMAKE=$(GHC) $(GHCFLAGS) --make
-PREFIX=/usr
+PREFIX?=/usr
CABAL?=cabal # set to "./Setup" if you lack a cabal program
# Am I typing :make in vim? Do a fast build.
@@ -76,7 +76,8 @@ clean:
doc/.ikiwiki html dist tags Build/SysConfig.hs build-stamp \
Setup Build/InstallDesktopFile Build/EvilSplicer \
Build/Standalone Build/OSXMkLibs
- find -name \*.o -or -name \*.hi -exec rm {} \;
+ find -name \*.o -exec rm {} \;
+ find -name \*.hi -exec rm {} \;
Build/InstallDesktopFile: Build/InstallDesktopFile.hs
$(GHC) --make $@
diff --git a/Remote/Bup.hs b/Remote/Bup.hs
index 09e89e38f..960ed4ada 100644
--- a/Remote/Bup.hs
+++ b/Remote/Bup.hs
@@ -42,7 +42,7 @@ remote = RemoteType {
setup = bupSetup
}
-gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex Remote
+gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)
gen r u c gc = do
bupr <- liftIO $ bup2GitRemote buprepo
cst <- remoteCost gc $
@@ -72,7 +72,7 @@ gen r u c gc = do
, globallyAvailable = not $ bupLocal buprepo
, readonly = False
}
- return $ encryptableRemote c
+ return $ Just $ encryptableRemote c
(storeEncrypted new buprepo)
(retrieveEncrypted buprepo)
new
diff --git a/Remote/Directory.hs b/Remote/Directory.hs
index 8eb317418..1c09e0e3c 100644
--- a/Remote/Directory.hs
+++ b/Remote/Directory.hs
@@ -37,11 +37,11 @@ remote = RemoteType {
setup = directorySetup
}
-gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex Remote
+gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)
gen r u c gc = do
cst <- remoteCost gc cheapRemoteCost
let chunksize = chunkSize c
- return $ encryptableRemote c
+ return $ Just $ encryptableRemote c
(storeEncrypted dir (getGpgEncParams (c,gc)) chunksize)
(retrieveEncrypted dir chunksize)
Remote {
diff --git a/Remote/GCrypt.hs b/Remote/GCrypt.hs
index 3c0706989..27d368690 100644
--- a/Remote/GCrypt.hs
+++ b/Remote/GCrypt.hs
@@ -5,7 +5,7 @@
- Licensed under the GNU GPL version 3 or higher.
-}
-module Remote.GCrypt (remote, gen) where
+module Remote.GCrypt (remote, gen, getGCryptId) where
import qualified Data.Map as M
import qualified Data.ByteString.Lazy as L
@@ -18,6 +18,7 @@ import qualified Git
import qualified Git.Command
import qualified Git.Config
import qualified Git.GCrypt
+import qualified Git.Construct
import qualified Git.Types as Git ()
import qualified Annex.Branch
import qualified Annex.Content
@@ -32,6 +33,8 @@ import Annex.UUID
import Annex.Ssh
import qualified Remote.Rsync
import Utility.Rsync
+import Logs.Remote
+import Utility.Gpg
remote :: RemoteType
remote = RemoteType {
@@ -43,19 +46,50 @@ remote = RemoteType {
setup = gCryptSetup
}
-gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex Remote
+gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)
gen gcryptr u c gc = do
g <- gitRepo
-- get underlying git repo with real path, not gcrypt path
- r <- liftIO $ Git.GCrypt.encryptedRepo g gcryptr
+ r <- liftIO $ Git.GCrypt.encryptedRemote g gcryptr
let r' = r { Git.remoteName = Git.remoteName gcryptr }
- -- read config of underlying repo if it's local
- r'' <- if Git.repoIsLocalUnknown r'
- then liftIO $ catchDefaultIO r' $ Git.Config.read r'
- else return r'
- gen' r'' u c gc
+ (mgcryptid, r'') <- liftIO $ getGCryptId r'
+ -- doublecheck that local cache matches underlying repo's gcrypt-id
+ -- (which might not be set)
+ case (mgcryptid, Git.GCrypt.remoteRepoId g (Git.remoteName gcryptr)) of
+ (Just gcryptid, Just cachedgcryptid)
+ | gcryptid /= cachedgcryptid -> resetup gcryptid r''
+ _ -> gen' r'' u c gc
+ where
+ -- A different drive may have been mounted, making a different
+ -- gcrypt remote available. So need to set the cached
+ -- gcrypt-id and annex-uuid of the remote to match the remote
+ -- that is now available. Also need to set the gcrypt particiants
+ -- correctly.
+ resetup gcryptid r = do
+ let u' = genUUIDInNameSpace gCryptNameSpace gcryptid
+ v <- (M.lookup u' <$> readRemoteLog)
+ case (Git.remoteName gcryptr, v) of
+ (Just remotename, Just c') -> do
+ setGcryptEncryption c' remotename
+ setConfig (remoteConfig gcryptr "uuid") (fromUUID u')
+ setConfig (ConfigKey $ Git.GCrypt.remoteConfigKey "gcrypt-id" remotename) gcryptid
+ gen' r u' c' gc
+ _ -> do
+ warning $ "not using unknown gcrypt repository pointed to by remote " ++ Git.repoDescribe r
+ return Nothing
+
+{- gcrypt repos set up by git-annex as special remotes have a
+ - core.gcrypt-id setting in their config, which can be mapped back to
+ - the remote's UUID. This only works for local repos.
+ - (Also returns a version of input repo with its config read.) -}
+getGCryptId :: Git.Repo -> IO (Maybe Git.GCrypt.GCryptId, Git.Repo)
+getGCryptId r
+ | Git.repoIsLocalUnknown r = do
+ r' <- catchDefaultIO r $ Git.Config.read r
+ return (Git.Config.getMaybe "core.gcrypt-id" r', r')
+ | otherwise = return (Nothing, r)
-gen' :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex Remote
+gen' :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)
gen' r u c gc = do
cst <- remoteCost gc $
if repoCheap r then nearlyCheapRemoteCost else expensiveRemoteCost
@@ -80,7 +114,7 @@ gen' r u c gc = do
, globallyAvailable = globallyAvailableCalc r
, remotetype = remote
}
- return $ encryptableRemote c
+ return $ Just $ encryptableRemote c
(store this rsyncopts)
(retrieve this rsyncopts)
this
@@ -117,14 +151,7 @@ gCryptSetup mu c = go $ M.lookup "gitrepo" c
, Param $ Git.GCrypt.urlPrefix ++ gitrepo
]
- {- Configure gcrypt to use the same list of keyids that
- - were passed to initremote, unless shared encryption
- - was used. -}
- case extractCipher c' of
- Nothing -> noCrypto
- Just (EncryptedCipher _ _ (KeyIds { keyIds = ks})) ->
- setConfig (ConfigKey $ Git.GCrypt.remoteParticipantConfigKey remotename) (unwords ks)
- _ -> noop
+ setGcryptEncryption c' remotename
{- Run a git fetch and a push to the git repo in order to get
- its gcrypt-id set up, so that later git annex commands
@@ -143,14 +170,43 @@ gCryptSetup mu c = go $ M.lookup "gitrepo" c
g <- inRepo Git.Config.reRead
case Git.GCrypt.remoteRepoId g (Just remotename) of
Nothing -> error "unable to determine gcrypt-id of remote"
- Just v -> do
- let u = genUUIDInNameSpace gCryptNameSpace v
+ Just gcryptid -> do
+ let u = genUUIDInNameSpace gCryptNameSpace gcryptid
if Just u == mu || mu == Nothing
then do
+ -- Store gcrypt-id in local
+ -- gcrypt repository, for later
+ -- double-check.
+ r <- inRepo $ Git.Construct.fromRemoteLocation gitrepo
+ when (Git.repoIsLocalUnknown r) $ do
+ r' <- liftIO $ Git.Config.read r
+ liftIO $ Git.Command.run [Param "config", Param "core.gcrypt-id", Param gcryptid] r'
gitConfigSpecialRemote u c' "gcrypt" "true"
return (c', u)
else error "uuid mismatch"
+{- Configure gcrypt to use the same list of keyids that
+ - were passed to initremote as its participants.
+ - Also, configure it to use a signing key that is in the list of
+ - participants, which gcrypt requires is the case, and may not be
+ - depending on system configuration.
+ -
+ - (For shared encryption, gcrypt's default behavior is used.) -}
+setGcryptEncryption :: RemoteConfig -> String -> Annex ()
+setGcryptEncryption c remotename = do
+ let participants = ConfigKey $ Git.GCrypt.remoteParticipantConfigKey remotename
+ case extractCipher c of
+ Nothing -> noCrypto
+ Just (EncryptedCipher _ _ (KeyIds { keyIds = ks})) -> do
+ setConfig participants (unwords ks)
+ let signingkey = ConfigKey $ Git.GCrypt.remoteSigningKey remotename
+ skeys <- M.keys <$> liftIO secretKeys
+ case filter (`elem` ks) skeys of
+ [] -> noop
+ (k:_) -> setConfig signingkey k
+ Just (SharedCipher _) ->
+ unsetConfig participants
+
store :: Remote -> Remote.Rsync.RsyncOpts -> (Cipher, Key) -> Key -> MeterUpdate -> Annex Bool
store r rsyncopts (cipher, enck) k p
| not $ Git.repoIsUrl (repo r) = guardUsable (repo r) False $
diff --git a/Remote/Git.hs b/Remote/Git.hs
index 795823ca6..2802db9ae 100644
--- a/Remote/Git.hs
+++ b/Remote/Git.hs
@@ -92,13 +92,13 @@ configRead r = do
(False, _, NoUUID) -> tryGitConfigRead r
_ -> return r
-gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex Remote
+gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)
gen r u c gc
| Git.GCrypt.isEncrypted r = Remote.GCrypt.gen r u c gc
| otherwise = go <$> remoteCost gc defcst
where
defcst = if repoCheap r then cheapRemoteCost else expensiveRemoteCost
- go cst = new
+ go cst = Just new
where
new = Remote
{ uuid = u
@@ -128,7 +128,7 @@ repoAvail r
| Git.GCrypt.isEncrypted r = do
g <- gitRepo
liftIO $ do
- er <- Git.GCrypt.encryptedRepo g r
+ er <- Git.GCrypt.encryptedRemote g r
if Git.repoIsLocal er || Git.repoIsLocalUnknown er
then catchBoolIO $
void (Git.Config.read er) >> return True
diff --git a/Remote/Glacier.hs b/Remote/Glacier.hs
index f351c66e9..ecdc6a656 100644
--- a/Remote/Glacier.hs
+++ b/Remote/Glacier.hs
@@ -40,10 +40,10 @@ remote = RemoteType {
setup = glacierSetup
}
-gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex Remote
+gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)
gen r u c gc = new <$> remoteCost gc veryExpensiveRemoteCost
where
- new cst = encryptableRemote c
+ new cst = Just $ encryptableRemote c
(storeEncrypted this)
(retrieveEncrypted this)
this
diff --git a/Remote/Hook.hs b/Remote/Hook.hs
index 6a8e44ab5..ba20f3566 100644
--- a/Remote/Hook.hs
+++ b/Remote/Hook.hs
@@ -35,10 +35,10 @@ remote = RemoteType {
setup = hookSetup
}
-gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex Remote
+gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)
gen r u c gc = do
cst <- remoteCost gc expensiveRemoteCost
- return $ encryptableRemote c
+ return $ Just $ encryptableRemote c
(storeEncrypted hooktype $ getGpgEncParams (c,gc))
(retrieveEncrypted hooktype)
Remote {
diff --git a/Remote/List.hs b/Remote/List.hs
index f38c1daaa..271ee8794 100644
--- a/Remote/List.hs
+++ b/Remote/List.hs
@@ -67,7 +67,7 @@ remoteList = do
return rs'
else return rs
where
- process m t = enumerate t >>= mapM (remoteGen m t)
+ process m t = enumerate t >>= mapM (remoteGen m t) >>= return . catMaybes
{- Forces the remoteList to be re-generated, re-reading the git config. -}
remoteListRefresh :: Annex [Remote]
@@ -80,16 +80,17 @@ remoteListRefresh = do
remoteList
{- Generates a Remote. -}
-remoteGen :: (M.Map UUID RemoteConfig) -> RemoteType -> Git.Repo -> Annex Remote
+remoteGen :: (M.Map UUID RemoteConfig) -> RemoteType -> Git.Repo -> Annex (Maybe Remote)
remoteGen m t r = do
u <- getRepoUUID r
g <- fromRepo id
let gc = extractRemoteGitConfig g (Git.repoDescribe r)
let c = fromMaybe M.empty $ M.lookup u m
- addHooks <$> generate t r u c gc
+ mrmt <- generate t r u c gc
+ return $ addHooks <$> mrmt
{- Updates a local git Remote, re-reading its git config. -}
-updateRemote :: Remote -> Annex Remote
+updateRemote :: Remote -> Annex (Maybe Remote)
updateRemote remote = do
m <- readRemoteLog
remote' <- updaterepo $ repo remote
diff --git a/Remote/Rsync.hs b/Remote/Rsync.hs
index b328f6560..f1e6fd85e 100644
--- a/Remote/Rsync.hs
+++ b/Remote/Rsync.hs
@@ -58,14 +58,14 @@ remote = RemoteType {
setup = rsyncSetup
}
-gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex Remote
+gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)
gen r u c gc = do
cst <- remoteCost gc expensiveRemoteCost
(transport, url) <- rsyncTransport gc $
fromMaybe (error "missing rsyncurl") $ remoteAnnexRsyncUrl gc
let o = genRsyncOpts c gc transport url
let islocal = rsyncUrlIsPath $ rsyncUrl o
- return $ encryptableRemote c
+ return $ Just $ encryptableRemote c
(storeEncrypted o $ getGpgEncParams (c,gc))
(retrieveEncrypted o)
Remote
diff --git a/Remote/S3.hs b/Remote/S3.hs
index 4f04bb7af..67d87df50 100644
--- a/Remote/S3.hs
+++ b/Remote/S3.hs
@@ -43,10 +43,10 @@ remote = RemoteType {
setup = s3Setup
}
-gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex Remote
+gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)
gen r u c gc = new <$> remoteCost gc expensiveRemoteCost
where
- new cst = encryptableRemote c
+ new cst = Just $ encryptableRemote c
(storeEncrypted this)
(retrieveEncrypted this)
this
diff --git a/Remote/Web.hs b/Remote/Web.hs
index 5b8df2994..789aab698 100644
--- a/Remote/Web.hs
+++ b/Remote/Web.hs
@@ -43,9 +43,9 @@ list = do
r <- liftIO $ Git.Construct.remoteNamed "web" Git.Construct.fromUnknown
return [r]
-gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex Remote
+gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)
gen r _ _ gc =
- return Remote {
+ return $ Just Remote {
uuid = webUUID,
cost = expensiveRemoteCost,
name = Git.repoDescribe r,
diff --git a/Remote/WebDAV.hs b/Remote/WebDAV.hs
index 7c1949047..97a6d96f9 100644
--- a/Remote/WebDAV.hs
+++ b/Remote/WebDAV.hs
@@ -46,10 +46,10 @@ remote = RemoteType {
setup = webdavSetup
}
-gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex Remote
+gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)
gen r u c gc = new <$> remoteCost gc expensiveRemoteCost
where
- new cst = encryptableRemote c
+ new cst = Just $ encryptableRemote c
(storeEncrypted this)
(retrieveEncrypted this)
this
diff --git a/Types/Key.hs b/Types/Key.hs
index a0c6d83bc..2ddb3f50e 100644
--- a/Types/Key.hs
+++ b/Types/Key.hs
@@ -81,7 +81,7 @@ file2key s = if key == Just stubKey then Nothing else key
instance Arbitrary Key where
arbitrary = Key
- <$> arbitrary
+ <$> (listOf1 $ elements $ ['A'..'Z'] ++ ['a'..'z'] ++ ['0'..'9'] ++ "-_\r\n \t")
<*> (listOf1 $ elements ['A'..'Z']) -- BACKEND
<*> ((abs <$>) <$> arbitrary) -- size cannot be negative
<*> arbitrary
diff --git a/Types/Remote.hs b/Types/Remote.hs
index 6c0f89346..78008ce06 100644
--- a/Types/Remote.hs
+++ b/Types/Remote.hs
@@ -29,7 +29,7 @@ data RemoteTypeA a = RemoteType {
-- enumerates remotes of this type
enumerate :: a [Git.Repo],
-- generates a remote of this type
- generate :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> a (RemoteA a),
+ generate :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> a (Maybe (RemoteA a)),
-- initializes or changes a remote
setup :: Maybe UUID -> RemoteConfig -> a (RemoteConfig, UUID)
}
diff --git a/Utility/Format.hs b/Utility/Format.hs
index 97a966ac1..e7a27515e 100644
--- a/Utility/Format.hs
+++ b/Utility/Format.hs
@@ -15,7 +15,7 @@ module Utility.Format (
) where
import Text.Printf (printf)
-import Data.Char (isAlphaNum, isOctDigit, isSpace, chr, ord)
+import Data.Char (isAlphaNum, isOctDigit, isHexDigit, isSpace, chr, ord)
import Data.Maybe (fromMaybe)
import Data.Word (Word8)
import Data.List (isPrefixOf)
@@ -101,7 +101,7 @@ empty (Const "") = True
empty _ = False
{- Decodes a C-style encoding, where \n is a newline, \NNN is an octal
- - encoded character, etc.
+ - encoded character, and \xNN is a hex encoded character.
-}
decode_c :: FormatString -> FormatString
decode_c [] = []
@@ -114,7 +114,12 @@ decode_c s = unescape ("", s)
where
pair = span (/= e) v
isescape x = x == e
- -- \NNN is an octal encoded character
+ handle (x:'x':n1:n2:rest)
+ | isescape x && allhex = (fromhex, rest)
+ where
+ allhex = isHexDigit n1 && isHexDigit n2
+ fromhex = [chr $ readhex [n1, n2]]
+ readhex h = Prelude.read $ "0x" ++ h :: Int
handle (x:n1:n2:n3:rest)
| isescape x && alloctal = (fromoctal, rest)
where
diff --git a/Utility/Gpg.hs b/Utility/Gpg.hs
index a6b16fedd..f9b3d55e8 100644
--- a/Utility/Gpg.hs
+++ b/Utility/Gpg.hs
@@ -11,6 +11,7 @@ module Utility.Gpg where
import Control.Applicative
import Control.Concurrent
+import qualified Data.Map as M
import Common
import qualified Build.SysConfig as SysConfig
@@ -23,8 +24,11 @@ import Utility.Env
#else
import Utility.Tmp
#endif
+import Utility.Format (decode_c)
-newtype KeyIds = KeyIds { keyIds :: [String] }
+type KeyId = String
+
+newtype KeyIds = KeyIds { keyIds :: [KeyId] }
deriving (Ord, Eq)
{- If a specific gpg command was found at configure time, use it.
@@ -138,17 +142,70 @@ pipeLazy params feeder reader = do
- a key id, or a name; See the section 'HOW TO SPECIFY A USER ID' of
- GnuPG's manpage.) -}
findPubKeys :: String -> IO KeyIds
-findPubKeys for = KeyIds . parse <$> readStrict params
+findPubKeys for = KeyIds . parse . lines <$> readStrict params
where
params = [Params "--with-colons --list-public-keys", Param for]
- parse = catMaybes . map (keyIdField . split ":") . lines
+ parse = catMaybes . map (keyIdField . split ":")
keyIdField ("pub":_:_:_:f:_) = Just f
keyIdField _ = Nothing
+type UserId = String
+
+{- All of the user's secret keys, with their UserIds.
+ - Note that the UserId may be empty. -}
+secretKeys :: IO (M.Map KeyId UserId)
+secretKeys = M.fromList . parse . lines <$> readStrict params
+ where
+ params = [Params "--with-colons --list-secret-keys --fixed-list-mode"]
+ parse = extract [] Nothing . map (split ":")
+ extract c (Just keyid) (("uid":_:_:_:_:_:_:_:_:userid:_):rest) =
+ extract ((keyid, decode_c userid):c) Nothing rest
+ extract c (Just keyid) rest =
+ extract ((keyid, ""):c) Nothing rest
+ extract c _ [] = c
+ extract c _ (("sec":_:_:_:keyid:_):rest) =
+ extract c (Just keyid) rest
+ extract c k (_:rest) =
+ extract c k rest
+
+type Passphrase = String
+type Size = Int
+data KeyType = Algo Int | DSA | RSA
+
+{- The maximum key size that gpg currently offers in its UI when
+ - making keys. -}
+maxRecommendedKeySize :: Size
+maxRecommendedKeySize = 4096
+
+{- Generates a secret key using the experimental batch mode.
+ - The key is added to the secret key ring.
+ - Can take a very long time, depending on system entropy levels.
+ -}
+genSecretKey :: KeyType -> Passphrase -> UserId -> Size -> IO ()
+genSecretKey keytype passphrase userid keysize =
+ withHandle StdinHandle createProcessSuccess (proc gpgcmd params) feeder
+ where
+ params = ["--batch", "--gen-key"]
+ feeder h = do
+ hPutStr h $ unlines $ catMaybes
+ [ Just $ "Key-Type: " ++
+ case keytype of
+ DSA -> "DSA"
+ RSA -> "RSA"
+ Algo n -> show n
+ , Just $ "Key-Length: " ++ show keysize
+ , Just $ "Name-Real: " ++ userid
+ , Just $ "Expire-Date: 0"
+ , if null passphrase
+ then Nothing
+ else Just $ "Passphrase: " ++ passphrase
+ ]
+ hClose h
+
{- Creates a block of high-quality random data suitable to use as a cipher.
- It is armored, to avoid newlines, since gpg only reads ciphers up to the
- first newline. -}
-genRandom :: Bool -> Int -> IO String
+genRandom :: Bool -> Size -> IO String
genRandom highQuality size = checksize <$> readStrict
[ Params params
, Param $ show randomquality
diff --git a/Utility/SRV.hs b/Utility/SRV.hs
index 0a77191c4..a2ee704f7 100644
--- a/Utility/SRV.hs
+++ b/Utility/SRV.hs
@@ -67,8 +67,14 @@ lookupSRV (SRV srv) = initResolver [] $ \resolver -> do
lookupSRV (SRV srv) = do
seed <- makeResolvSeed defaultResolvConf
r <- withResolver seed $ flip DNS.lookupSRV $ B8.fromString srv
- return $ maybe [] (orderHosts . map tohosts) r
+ return $
+#if MIN_VERSION_dns(1,0,0)
+ either (const []) use r
+#else
+ maybe [] use r
+#endif
where
+ use = orderHosts . map tohosts
tohosts (priority, weight, port, hostname) =
( (priority, weight)
, (B8.toString hostname, PortNumber $ fromIntegral port)
diff --git a/debian/changelog b/debian/changelog
index c87d347c1..4329cef84 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,32 @@
+git-annex (4.20130912) UNRELEASED; urgency=low
+
+ * webapp: Initial support for setting up encrypted removable drives.
+ * Recommend using my patched gcrypt, which fixes some bugs:
+ https://github.com/joeyh/git-remote-gcrypt
+ * Support hot-swapping of removable drives containing gcrypt repositories.
+ * remotes: New command, displays a compact table of remotes that
+ contain files.
+ (Thanks, anarcat for display code and mastensg for inspiration.)
+ * fsck: Fix detection and fixing of present direct mode files that are
+ wrongly represented as standin symlinks on crippled filesystems.
+ * sync: Fix bug that caused direct mode mappings to not be updated
+ when merging files into the tree on Windows.
+ * sync: Don't fail if the directory it is run in gets removed by the
+ sync.
+ * addurl: Fix quvi audodetection, broken in last release.
+ * status: In local mode, displays information about variance from configured
+ numcopies levels. (--fast avoids calculating these)
+ * gcrypt: Ensure that signing key is set to one of the participants keys.
+ * webapp: Show encryption information when editing a remote.
+
+ -- Joey Hess <joeyh@debian.org> Thu, 12 Sep 2013 12:14:46 -0400
+
+git-annex (4.20130911) unstable; urgency=low
+
+ * Fix problem with test suite in non-unicode locale.
+
+ -- Joey Hess <joeyh@debian.org> Wed, 11 Sep 2013 12:14:16 -0400
+
git-annex (4.20130909) unstable; urgency=low
* initremote: Syntax change when setting up an encrypted special remote.
diff --git a/debian/control b/debian/control
index 5c42e3442..fc7e3d608 100644
--- a/debian/control
+++ b/debian/control
@@ -72,7 +72,7 @@ Depends: ${misc:Depends}, ${shlibs:Depends},
wget,
curl,
openssh-client (>= 1:5.6p1)
-Recommends: lsof, gnupg, bind9-host, ssh-askpass, quvi, git-remote-gcrypt
+Recommends: lsof, gnupg, bind9-host, ssh-askpass, quvi, git-remote-gcrypt (>= 0.20130908-4)
Suggests: graphviz, bup, libnss-mdns
Description: manage files with git, without checking their contents into git
git-annex allows managing files with git, without checking the file
diff --git a/doc/assistant/encryptdrive.png b/doc/assistant/encryptdrive.png
new file mode 100644
index 000000000..1cb041dda
--- /dev/null
+++ b/doc/assistant/encryptdrive.png
Binary files differ
diff --git a/doc/assistant/genkey.png b/doc/assistant/genkey.png
new file mode 100644
index 000000000..6c1e50971
--- /dev/null
+++ b/doc/assistant/genkey.png
Binary files differ
diff --git a/doc/assistant/repoinfo.png b/doc/assistant/repoinfo.png
new file mode 100644
index 000000000..d43ffc9f9
--- /dev/null
+++ b/doc/assistant/repoinfo.png
Binary files differ
diff --git a/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux.mdwn b/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux.mdwn
new file mode 100644
index 000000000..0b89c8687
--- /dev/null
+++ b/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux.mdwn
@@ -0,0 +1,73 @@
+### Please describe the problem.
+
+I am experiencing a weird issue with any install I've had on this one (and only) ArchLinux machine: all of aur/git-annex 4.20130516-1, aur/git-annex-bin-4.20130909-1, aur/git-annex-standalone-4.20130909-1 and a Cabal install just stall when trying to create the initial Git annex repo in the webapp.
+
+When started, it offers me to create the annex in ~/annex/ or ~/Desktop/annex/, where ~ gets turned into /home/USER when I press “Make repository”, but nothing else happens. This is regardless of if that repo exists when I try to create it or start the webapp.
+
+If I start the webapp from an existing annex (now in ~/annex), it seems to work a bit better, but any other remote (SSH) server that I try to add fails. I just get a fleeting Bootstrap message box when I click “Check this server”, and nothing in the logs of eithr git annex webapp or the ssh logs of the server.
+
+If an annex exists, but I start the webapp from another directory, it just behaves as if none were found.
+
+Calls to git annex assistant --autostart complain that "Nothing listed in /home/omehani/.config/git-annex/autostart". I have checked the permissions on that directory, and tried deleting it to let git-annex recreate it, which it did, to no avail.
+
+
+### What steps will reproduce the problem?
+
+Install any of the git-annex packages available from AUR
+
+### What version of git-annex are you using? On what operating system?
+
+* up-to-date ArchLinux, Linux cancey 3.10.10-1-ARCH #1 SMP PREEMPT Fri Aug 30 11:30:06 CEST 2013 x86_64 GNU/Linux
+* aur/git-annex 4.20130516-1, aur/git-annex-bin-4.20130909-1, aur/git-annex-standalone-4.20130909-1 or through Cabal (on 2013-09-12)
+
+### Please provide any additional information below.
+
+The following is the output of webapp --debug. Nothing actually appears when trying to add/edit a repo.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+~/annex (master)$ git annex webapp --debug
+[2013-09-16 10:26:55 EST] read: git ["--git-dir=/home/omehani/annex/.git","--work-tree=/home/omehani/annex","show-ref","git-annex"]
+[2013-09-16 10:26:55 EST] read: git ["--git-dir=/home/omehani/annex/.git","--work-tree=/home/omehani/annex","show-ref","--hash","refs/heads/git-annex"]
+[2013-09-16 10:26:55 EST] read: git ["--git-dir=/home/omehani/annex/.git","--work-tree=/home/omehani/annex","log","refs/heads/git-annex..27c891f84f6ea7a10c68c0dd696ab84d88ef0cec","--oneline","-n1"]
+[2013-09-16 10:26:55 EST] read: git ["--git-dir=/home/omehani/annex/.git","--work-tree=/home/omehani/annex","log","refs/heads/git-annex..d0a1cb518045af01b443694aa2cd9af6386de38a","--oneline","-n1"]
+[2013-09-16 10:26:55 EST] read: git ["--git-dir=/home/omehani/annex/.git","--work-tree=/home/omehani/annex","log","refs/heads/git-annex..3ff23e23d74ace008b03143120e84f07e52ed8ee","--oneline","-n1"]
+[2013-09-16 10:26:55 EST] chat: git ["--git-dir=/home/omehani/annex/.git","--work-tree=/home/omehani/annex","cat-file","--batch"]
+[2013-09-16 10:26:55 EST] logging to /home/omehani/annex/.git/annex/daemon.log
+[2013-09-16 10:26:55 EST] logging to /home/omehani/annex/.git/annex/daemon.log
+Launching web browser on file:///home/omehani/annex/.git/annex/webapp.html
+START /usr/lib/firefox/firefox "/home/omehani/annex/.git/annex/webapp.html"
+
+(process:2699): GLib-CRITICAL **: g_slice_set_config: assertion `sys_page_size == 0' failed
+
+
+# End of transcript or log.
+"""]]
+
+Running git annex from a different directory.
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+~$ git annex webapp --debug
+Launching web browser on file:///tmp/webapp3934.html
+START /usr/lib/firefox/firefox "/tmp/webapp3934.html"
+
+(process:4008): GLib-CRITICAL **: g_slice_set_config: assertion `sys_page_size == 0' failed
+
+# End of transcript or log.
+"""]]
+
+Trying the autostart:
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+~$ git annex assistant --autostart --debug
+git-annex: Nothing listed in /home/omehani/.config/git-annex/autostart
+
+
+# End of transcript or log.
+"""]]
diff --git a/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_1_6a60c23850a5e2a7bba355e1317abc69._comment b/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_1_6a60c23850a5e2a7bba355e1317abc69._comment
new file mode 100644
index 000000000..ed9ace976
--- /dev/null
+++ b/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_1_6a60c23850a5e2a7bba355e1317abc69._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="http://olivier.mehani.name/"
+ nickname="olivier-mehani"
+ subject="comment 1"
+ date="2013-09-16T01:27:14Z"
+ content="""
+The version with which the following tests were run (installed with Cabal)
+
+[[!format sh \"\"\"
+git-annex version: 4.20130827
+build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus DNS
+\"\"\"]]
+"""]]
diff --git a/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_2_90b6ed232b2917b9fe041532284e1212._comment b/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_2_90b6ed232b2917b9fe041532284e1212._comment
new file mode 100644
index 000000000..703be9a84
--- /dev/null
+++ b/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_2_90b6ed232b2917b9fe041532284e1212._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.153.14.105"
+ subject="comment 2"
+ date="2013-09-19T17:12:39Z"
+ content="""
+Please send the content of the file /home/omehani/annex/.git/annex/daemon.log
+
+It would also help if you could better describe what happens. Perhaps make a screenshot?
+"""]]
diff --git a/doc/bugs/Failed_to_make_repository___40__calling_nonexistant_shell__41__.mdwn b/doc/bugs/Failed_to_make_repository___40__calling_nonexistant_shell__41__.mdwn
index c25f6b3ba..634f3e501 100644
--- a/doc/bugs/Failed_to_make_repository___40__calling_nonexistant_shell__41__.mdwn
+++ b/doc/bugs/Failed_to_make_repository___40__calling_nonexistant_shell__41__.mdwn
@@ -24,3 +24,5 @@ Ubuntu 10.04 on both desktop and server.
### Please provide any additional information below.
The problem seems to be runshell trying to call /home/annex/sh, which does not exist. Why would it do that?
+
+> [[done]]
diff --git a/doc/bugs/Huge_annex_out_of_memory_on_switch_to_indirect_mode_and_status.mdwn b/doc/bugs/Huge_annex_out_of_memory_on_switch_to_indirect_mode_and_status.mdwn
index fcb9fead9..2b28cb089 100644
--- a/doc/bugs/Huge_annex_out_of_memory_on_switch_to_indirect_mode_and_status.mdwn
+++ b/doc/bugs/Huge_annex_out_of_memory_on_switch_to_indirect_mode_and_status.mdwn
@@ -1,5 +1,7 @@
### Please describe the problem.
+[[!tag moreinfo]]
+
I added a lot of files to my annex in direct mode. Now I want to switch to indirect mode. git-annex status and indirect create an out-of-memory error.
### What steps will reproduce the problem?
diff --git a/doc/bugs/On_Windows__44___can__39__t_use_a_USB_disk_annex_created_on_Linux.mdwn b/doc/bugs/On_Windows__44___can__39__t_use_a_USB_disk_annex_created_on_Linux.mdwn
index ea36ac561..b997a8c72 100644
--- a/doc/bugs/On_Windows__44___can__39__t_use_a_USB_disk_annex_created_on_Linux.mdwn
+++ b/doc/bugs/On_Windows__44___can__39__t_use_a_USB_disk_annex_created_on_Linux.mdwn
@@ -14,3 +14,5 @@ On Windows, git-annex is unable to 'annex get' from a repository hosted on an ex
Windows 7: 4.20140627-g8a36ec5 (from the git-annex download page)
Debian Linux: 3.20120629 (from the package manager)
+
+[[!tag moreinfo]]
diff --git a/doc/bugs/On_Windows__44___can__39__t_use_repository_that_has_a_unix-style_local_remote_configured.mdwn b/doc/bugs/On_Windows__44___can__39__t_use_repository_that_has_a_unix-style_local_remote_configured.mdwn
index 07f8fa84c..92de1dce3 100644
--- a/doc/bugs/On_Windows__44___can__39__t_use_repository_that_has_a_unix-style_local_remote_configured.mdwn
+++ b/doc/bugs/On_Windows__44___can__39__t_use_repository_that_has_a_unix-style_local_remote_configured.mdwn
@@ -18,3 +18,5 @@ Debian Linux: 3.20120629 (from the package manager)
I experienced this bug several times with a plain git-annex install, and the only workaround was removing the unix-style remotes from remote repos.
After other hackery to get git-annex working on Windows, I can't currently reproduce the issue.
+
+[[!tag moreinfo]]
diff --git a/doc/bugs/On_Windows__44___can__39__t_use_repository_that_has_a_unix-style_local_remote_configured/comment_1_95655915ff6ba9fb5d873358ff047496._comment b/doc/bugs/On_Windows__44___can__39__t_use_repository_that_has_a_unix-style_local_remote_configured/comment_1_95655915ff6ba9fb5d873358ff047496._comment
new file mode 100644
index 000000000..d727bcafc
--- /dev/null
+++ b/doc/bugs/On_Windows__44___can__39__t_use_repository_that_has_a_unix-style_local_remote_configured/comment_1_95655915ff6ba9fb5d873358ff047496._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.2.134"
+ subject="comment 1"
+ date="2013-09-13T19:14:55Z"
+ content="""
+I don't understand what is meant by a \"unix-style\" remote.
+
+Generally it helps to provide some commands I can run on Windows to replicate the problem.
+"""]]
diff --git a/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone..mdwn b/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone..mdwn
new file mode 100644
index 000000000..e01310336
--- /dev/null
+++ b/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone..mdwn
@@ -0,0 +1,230 @@
+### Please describe the problem.
+
+I had set up git-annex on a mac; I had created an initial repository at ~/annex; I had created a second repository on an external drive, at /Volumes/Biblio/annex; I had paired with three other machines on the same network, (two linux, one other mac) and set up a remote server as a backup-type repository. All seemed well. It had finally finished syncing everything to the remote server (my upload speeds are slow).
+
+I closed the firefox window showing the dashboard. I wanted to reopen it, so I ran the git-annex.app again, presuming on a running instance that that just opens the browser back at the webapp. Firefox window opened, but the only repository was the second one I'd made on the external drive.
+
+I restarted, as best as I could work out: git-annex assistant --stop, then because that left behind a process, killall git-annex. Then restarted the app.
+
+Firefox opened on the webapp. I had two repositories: The one on the external drive (now the "Here" repo) and the one on ~/annex but only as if it was paired from a different machine.
+
+ie: I see only "celestia.local (rachel@celestia.local~/annex)". This machine *is* celestia.local.
+
+That's it. Startup scan took a couple of minutes but didn't add anything. Then it decided to sync to celestia.local, which it took a little time over but didn't apparently do anything.
+
+If I drop files into ~/annex they are not synced anywhere. ~/annex still has a .git directory, populated with git files, it looks intact. It's just not being seen.
+
+Is it possible because the user is prompted to create their initial repo at ~/Desktop/annex it will by default only look there, then start looking in external drives for it? So the fact I didn't want it on my desktop, but put it directly in home, meant it got lost on restart?
+
+git-annex vicfg in ~/annex shows me this:
+
+[[!format sh """
+# git-annex configuration
+#
+# Changes saved to this file will be recorded in the git-annex branch.
+#
+# Lines in this file have the format:
+# setting uuid = value
+
+# Repository trust configuration
+# (Valid trust levels: trusted semitrusted untrusted dead)
+# (for web)
+#trust 00000000-0000-0000-0000-000000000001 = semitrusted
+# (for rachel@octavia:~/annex)
+#trust 161dec38-e8be-43b8-86c5-555d35ce3416 = semitrusted
+# (for rachel@celestia.local:~/annex)
+#trust 179fcddf-e247-4577-804b-267feed8abb1 = semitrusted
+# (for 192.168.1.103_annex (rachel@rainbow.local:~/annex))
+#trust 256d5762-150d-4d5d-9340-517de298c874 = semitrusted
+# (for twilight.local_annex (rachel@twilight:~/annex))
+#trust aeef7490-ce27-4255-b800-1947706c4a06 = semitrusted
+# (for rachel@octavia:~/annex)
+#trust c469fbce-f3b4-4e27-a54f-0b747797a7d5 = semitrusted
+# (for annex (Biblio's Copy))
+#trust c9e307e2-1189-47ed-8ad4-03b5c1b64e36 = semitrusted
+# (for luna.strangenoises.org_annex)
+#trust f36dbdf8-1bba-11e3-9dbe-f33cfb0e2bed = semitrusted
+# (for octavia.local_annex (rachel@octavia:~/annex))
+#trust f748a5ed-d870-48fb-b3ec-811488eb2faa = semitrusted
+# (for rachel@twilight:~/annex)
+#trust fcaba03e-1ba5-11e3-90f1-57fe1467e006 = semitrusted
+
+# Repository groups
+# (Standard groups: client transfer backup incrementalbackup smallarchive archive source manual public unwanted)
+# (Separate group names with spaces)
+# (for rachel@octavia:~/annex)
+group 161dec38-e8be-43b8-86c5-555d35ce3416 = client
+# (for rachel@celestia.local:~/annex)
+group 179fcddf-e247-4577-804b-267feed8abb1 = client
+# (for 192.168.1.103_annex (rachel@rainbow.local:~/annex))
+group 256d5762-150d-4d5d-9340-517de298c874 = client
+# (for twilight.local_annex (rachel@twilight:~/annex))
+group aeef7490-ce27-4255-b800-1947706c4a06 = client
+# (for rachel@octavia:~/annex)
+group c469fbce-f3b4-4e27-a54f-0b747797a7d5 = client
+# (for annex (Biblio's Copy))
+group c9e307e2-1189-47ed-8ad4-03b5c1b64e36 = client
+# (for octavia.local_annex (rachel@octavia:~/annex))
+group f748a5ed-d870-48fb-b3ec-811488eb2faa = client
+# (for rachel@twilight:~/annex)
+group fcaba03e-1ba5-11e3-90f1-57fe1467e006 = client
+# (for luna.strangenoises.org_annex)
+group f36dbdf8-1bba-11e3-9dbe-f33cfb0e2bed = transfer
+# (for web)
+#group 00000000-0000-0000-0000-000000000001 =
+
+# Repository preferred contents
+# (for rachel@octavia:~/annex)
+content 161dec38-e8be-43b8-86c5-555d35ce3416 = standard
+# (for rachel@celestia.local:~/annex)
+content 179fcddf-e247-4577-804b-267feed8abb1 = standard
+# (for 192.168.1.103_annex (rachel@rainbow.local:~/annex))
+content 256d5762-150d-4d5d-9340-517de298c874 = standard
+# (for twilight.local_annex (rachel@twilight:~/annex))
+content aeef7490-ce27-4255-b800-1947706c4a06 = standard
+# (for rachel@octavia:~/annex)
+content c469fbce-f3b4-4e27-a54f-0b747797a7d5 = standard
+# (for annex (Biblio's Copy))
+content c9e307e2-1189-47ed-8ad4-03b5c1b64e36 = standard
+# (for luna.strangenoises.org_annex)
+content f36dbdf8-1bba-11e3-9dbe-f33cfb0e2bed = standard
+# (for octavia.local_annex (rachel@octavia:~/annex))
+content f748a5ed-d870-48fb-b3ec-811488eb2faa = standard
+# (for rachel@twilight:~/annex)
+content fcaba03e-1ba5-11e3-90f1-57fe1467e006 = standard
+# (for web)
+#content 00000000-0000-0000-0000-000000000001 =
+"""]]
+
+while the same command in /Volumes/Biblio/annex gives:
+
+[[!format sh """
+# git-annex configuration
+#
+# Changes saved to this file will be recorded in the git-annex branch.
+#
+# Lines in this file have the format:
+# setting uuid = value
+
+# Repository trust configuration
+# (Valid trust levels: trusted semitrusted untrusted dead)
+# (for web)
+#trust 00000000-0000-0000-0000-000000000001 = semitrusted
+# (for rachel@octavia:~/annex)
+#trust 161dec38-e8be-43b8-86c5-555d35ce3416 = semitrusted
+# (for celestia.local (rachel@celestia.local:~/annex))
+#trust 179fcddf-e247-4577-804b-267feed8abb1 = semitrusted
+# (for rachel@rainbow.local:~/annex)
+#trust 256d5762-150d-4d5d-9340-517de298c874 = semitrusted
+# (for rachel@twilight:~/annex)
+#trust aeef7490-ce27-4255-b800-1947706c4a06 = semitrusted
+# (for rachel@octavia:~/annex)
+#trust c469fbce-f3b4-4e27-a54f-0b747797a7d5 = semitrusted
+# (for Biblio's Copy)
+#trust c9e307e2-1189-47ed-8ad4-03b5c1b64e36 = semitrusted
+# (for )
+#trust f36dbdf8-1bba-11e3-9dbe-f33cfb0e2bed = semitrusted
+# (for rachel@octavia:~/annex)
+#trust f748a5ed-d870-48fb-b3ec-811488eb2faa = semitrusted
+# (for rachel@twilight:~/annex)
+#trust fcaba03e-1ba5-11e3-90f1-57fe1467e006 = semitrusted
+
+# Repository groups
+# (Standard groups: client transfer backup incrementalbackup smallarchive archive source manual public unwanted)
+# (Separate group names with spaces)
+# (for rachel@octavia:~/annex)
+group 161dec38-e8be-43b8-86c5-555d35ce3416 = client
+# (for celestia.local (rachel@celestia.local:~/annex))
+group 179fcddf-e247-4577-804b-267feed8abb1 = client
+# (for rachel@rainbow.local:~/annex)
+group 256d5762-150d-4d5d-9340-517de298c874 = client
+# (for rachel@twilight:~/annex)
+group aeef7490-ce27-4255-b800-1947706c4a06 = client
+# (for rachel@octavia:~/annex)
+group c469fbce-f3b4-4e27-a54f-0b747797a7d5 = client
+# (for Biblio's Copy)
+group c9e307e2-1189-47ed-8ad4-03b5c1b64e36 = client
+# (for rachel@octavia:~/annex)
+group f748a5ed-d870-48fb-b3ec-811488eb2faa = client
+# (for rachel@twilight:~/annex)
+group fcaba03e-1ba5-11e3-90f1-57fe1467e006 = client
+# (for )
+group f36dbdf8-1bba-11e3-9dbe-f33cfb0e2bed = transfer
+# (for web)
+#group 00000000-0000-0000-0000-000000000001 =
+
+# Repository preferred contents
+# (for rachel@octavia:~/annex)
+content 161dec38-e8be-43b8-86c5-555d35ce3416 = standard
+# (for celestia.local (rachel@celestia.local:~/annex))
+content 179fcddf-e247-4577-804b-267feed8abb1 = standard
+# (for rachel@rainbow.local:~/annex)
+content 256d5762-150d-4d5d-9340-517de298c874 = standard
+# (for rachel@twilight:~/annex)
+content aeef7490-ce27-4255-b800-1947706c4a06 = standard
+# (for rachel@octavia:~/annex)
+content c469fbce-f3b4-4e27-a54f-0b747797a7d5 = standard
+# (for Biblio's Copy)
+content c9e307e2-1189-47ed-8ad4-03b5c1b64e36 = standard
+# (for )
+content f36dbdf8-1bba-11e3-9dbe-f33cfb0e2bed = standard
+# (for rachel@octavia:~/annex)
+content f748a5ed-d870-48fb-b3ec-811488eb2faa = standard
+# (for rachel@twilight:~/annex)
+content fcaba03e-1ba5-11e3-90f1-57fe1467e006 = standard
+# (for web)
+#content 00000000-0000-0000-0000-000000000001 =
+"""]]
+
+### What steps will reproduce the problem?
+
+As above. I have no idea what just happened, but apart from git-annex assistant --stop and having to mop up leftover processes, I didn't use the git-annex commandline for anything.
+
+### What version of git-annex are you using? On what operating system?
+
+Mac OS X 10.8.4
+
+ Version: 4.20130909-ga29f960
+ Build flags: Assistant Webapp Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi
+
+### Please provide any additional information below.
+
+The log on ~/annex/.git/annex/daemon.log is huge and full of transfers of files with my personal filenames. I'd rather not. It appears to end normally.
+
+Now there is a short log in /Volumes/Biblio/annex/.git/annex/daemon.log from, I guess, the time I tried to restart. For some reason therefore, after the successful session finished, on restart it only looks here. This log is appended.
+
+[[!format sh """
+[2013-09-12 21:35:39 BST] main: starting assistant version 4.20130909-ga29f960
+
+[2013-09-12 21:35:39 BST] TransferScanner: Syncing with celestia.local
+Already up-to-date.
+
+(scanning...) [2013-09-12 21:35:39 BST] Watcher: Performing startup scan
+From /Users/rachel/annex
+ * [new branch] git-annex -> celestia.local/git-annex
+ * [new branch] master -> celestia.local/master
+ * [new branch] synced/git-annex -> celestia.local/synced/git-annex
+ * [new branch] synced/master -> celestia.local/synced/master
+Updating 4f974a8..74770d9
+Fast-forward
+Already up-to-date.
+Already up-to-date.
+Already up-to-date.
+[2013-09-12 21:36:39 BST] Pusher: Syncing with celestia.local
+(merging celestia.local/git-annex celestia.local/synced/git-annex into git-annex...)
+(Recording state in git...)
+
+
+
+
+(started...) error: Ref refs/heads/synced/git-annex is at 5b4ed9b3098e936d60b61a1d3915fa29e8c823d0 but expected 792d2a5c14b0b6327d2089e174063c474ba5a764
+remote: error: failed to lock refs/heads/synced/git-annex
+To /Users/rachel/annex
+ 792d2a5..5b4ed9b git-annex -> synced/git-annex
+To /Users/rachel/annex
+ ! [remote rejected] git-annex -> synced/git-annex (failed to lock)
+error: failed to push some refs to '/Users/rachel/annex'
+Everything up-to-date
+"""]]
+
+Well, I see that thing about "failed to lock". I can imagine that my 'killall git-annex' to kill a leftover process that was hanging around after I'd done git-annex assistant --stop might have left stale lock files, somewhere... but of course I only got as far as doing that because I was already encountering problems, just trying to return to the webapp.
diff --git a/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_1_3a3891c9d7ee808f6a71780cb628f23d._comment b/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_1_3a3891c9d7ee808f6a71780cb628f23d._comment
new file mode 100644
index 000000000..a26db0870
--- /dev/null
+++ b/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_1_3a3891c9d7ee808f6a71780cb628f23d._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.4.51"
+ subject="comment 1"
+ date="2013-09-12T21:29:39Z"
+ content="""
+The git-annex webapp displays a view from \"inside\" one git repsitory at a time. It seems to me that you have two or more local git repositories; one in ~/annex and one on a removable drive. The webapp is coming up viewing from inside your removable drive's repository. You can change the repository that the webapp views by going to the Repository menu in the upper-right corner and selecting Switch repository. The webapp will remember which repository it viewed last, and come back up showing that same repository.
+
+It's BTW an unusual configuration to have the git-annex assistant directly running on a removable drive as you seem to have done. You must have previously went to the Repository menu and selected \"Add another local repository\", and then added the removable drive, and then connected that repository up to your ~/annex repository. Which would explain why the webapp was last showing the repository on the removable drive. The more usual way to add a removable drive is to use the \"Add another repository\" button and select \"Removable drive\".
+
+I think, but am not sure, that the error \"Ref refs/heads/synced/git-annex is at 5b4ed9b3098e936d60b61a1d3915fa29e8c823d0 but expected 792d2a5c14b0b6327d2089e174063c474ba5a764\" is due to having two git-annex assistants running in these two different repositories and both updating them both at the same time. You might want to stop all git-annex processes, edit `~/.config/git-annex/autostart` and remove the removable drive repository from that list, leaving only `~/annex` in the list.
+"""]]
diff --git a/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_2_2bc6efb1d9e872cc5d4fbfbaaf5cc10e._comment b/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_2_2bc6efb1d9e872cc5d4fbfbaaf5cc10e._comment
new file mode 100644
index 000000000..10fad2252
--- /dev/null
+++ b/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_2_2bc6efb1d9e872cc5d4fbfbaaf5cc10e._comment
@@ -0,0 +1,27 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlEhzszkzOIy8-Rx8b2mcr75QcnIc6O_OA"
+ nickname="Rachel"
+ subject="I don't know whether I've fixed it or confused things further"
+ date="2013-09-12T21:30:44Z"
+ content="""
+I shut down the daemon that was running from the webapp itself.
+
+Instead of launching by using the app, I did:
+
+[[!format txt \"\"\"
+celestia:~ rachel$ cd annex/
+celestia:annex rachel$ git-annex assistant
+(merging synced/git-annex into git-annex...)
+celestia:annex rachel$ git-annex webapp
+Launching web browser on file:///Users/rachel/annex/.git/annex/webapp.html
+celestia:annex rachel$
+\"\"\"]]
+
+It opened the webapp. I could see all the repos back again.
+
+It also seems to be syncing to everything else, sending the files all over again, even though they haven't changed.
+
+It's just about possible it's completing the job, as I'm not sure I saw the files syncing now, being synced earlier. But... in that earlier session it had run the queue dry, *it* thought it had completed syncing.
+
+What's going on?
+"""]]
diff --git a/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_3_fff1e778a6334258c173a96e6bf7ef6a._comment b/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_3_fff1e778a6334258c173a96e6bf7ef6a._comment
new file mode 100644
index 000000000..4d44aaf5c
--- /dev/null
+++ b/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_3_fff1e778a6334258c173a96e6bf7ef6a._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.4.51"
+ subject="comment 3"
+ date="2013-09-12T21:33:18Z"
+ content="""
+See my explanation above. By manually starting the webapp inside your ~/annex repository you forced it to view that repository.
+
+It's not unusual for the webapp to display it syncing some files that have been synced before. This repository may not be up-to-date on which files have been sent where, and it will quickly notice the file has already been transferred and skip doing anything for that file.
+"""]]
diff --git a/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_4_2a86da97a89e28f0a0f5e160d4932ae6._comment b/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_4_2a86da97a89e28f0a0f5e160d4932ae6._comment
new file mode 100644
index 000000000..16a5a351f
--- /dev/null
+++ b/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_4_2a86da97a89e28f0a0f5e160d4932ae6._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlEhzszkzOIy8-Rx8b2mcr75QcnIc6O_OA"
+ nickname="Rachel"
+ subject="Last night's comment"
+ date="2013-09-13T10:28:02Z"
+ content="""
+> It's BTW an unusual configuration to have the git-annex assistant directly running on a removable drive as you seem to have done. You must have previously went to the Repository menu and selected \"Add another local repository\", and then added the removable drive, and then connected that repository up to your ~/annex repository. Which would explain why the webapp was last showing the repository on the removable drive. The more usual way to add a removable drive is to use the \"Add another repository\" button and select \"Removable drive\".
+
+That is exactly how I'd added that repository, yes. I didn't notice the dedicated \"removable drive\" option until later. :-) I thought it possibly appropriate to leave it that way because, while Biblio is an external drive and remov*able*, in practice I never remove it; it's a permanent fixture.
+
+After all, this is a mac mini server, originally (no longer running Server) so it has a second *internal* drive. It would have been even more logical for me to have added a second repo on there in the same manner, as it's most definitely not removable without extreme effort; but it still mounts inside /Volumes, and presumably if I'd added it as a non-removable repo, I'd have had the same problem?
+
+> It's not unusual for the webapp to display it syncing some files that have been synced before. This repository may not be up-to-date on which files have been sent where, and it will quickly notice the file has already been transferred and skip doing anything for that file.
+
+Yes, that's probably what happened. It finished pretty quickly, about a minute after sending my previous comment.
+
+Going to bed now, but tomorrow I'll follow the remaining suggestions; basically I'll remove the repo on the external drive then, if I still want it there, I'll add it back in the other way, so it thinks of it as removable.
+
+"""]]
diff --git a/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_5_41b8e8e58025cc8c8f12efb9a51acd29._comment b/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_5_41b8e8e58025cc8c8f12efb9a51acd29._comment
new file mode 100644
index 000000000..685d1b024
--- /dev/null
+++ b/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_5_41b8e8e58025cc8c8f12efb9a51acd29._comment
@@ -0,0 +1,50 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlEhzszkzOIy8-Rx8b2mcr75QcnIc6O_OA"
+ nickname="Rachel"
+ subject="And this morning..."
+ date="2013-09-13T10:38:35Z"
+ content="""
+I tried removing the second repo, by deleting it, it seemed to begin normally. Then it just hung, and hung.
+
+Looking at logs, it seemed to be hung on dropping one file - a very small file in fact, but it was probably the most recent file to be added. So the end of the log just looked like:
+
+[[!format txt \"\"\"
+drop annex old stuff/renegade/issue7back.pdf ok
+drop annex old stuff/renegade/issue7fiction.pdf ok
+drop annex postgresql 9.0->9.1 upgrade process
+\"\"\"]]
+
+After a while I started getting problems in other terminal shells where I was doing stuff unrelated to git annex. eg: on trying to open a new terminal window, it would open, then shut immediately, or it would open with just:
+
+[[!format txt \"\"\"
+forkpty: Resource temporarily unavailable
+Could not create a new process and open a pseudo-tty.
+\"\"\"]]
+
+Various other commands that would have resulted in a fork were failing too. In the end I shut down git annex (using the shutdown daemon open in the menu in the webapp), and everything went back to normal.
+
+This is the end of the daemon.log from this morning. I don't want to paste the whole thing, as essentially it lists all my private filenames, and there's a lot. In fact I wonder if the quantity of files may be a factor:
+
+[[!format txt \"\"\"
+drop annex old stuff/renegade/index.html ok
+drop annex old stuff/renegade/issue1.pdf ok
+drop annex old stuff/renegade/issue2.pdf ok
+drop annex old stuff/renegade/issue3.pdf ok
+drop annex old stuff/renegade/issue4.pdf ok
+drop annex old stuff/renegade/issue4coverpic.pdf ok
+drop annex old stuff/renegade/issue6articles.pdf ok
+drop annex old stuff/renegade/issue6cover.pdf ok
+drop annex old stuff/renegade/issue6fiction.pdf ok
+drop annex old stuff/renegade/issue7articles.pdf ok
+drop annex old stuff/renegade/issue7back.pdf ok
+drop annex old stuff/renegade/issue7fiction.pdf ok
+drop annex postgresql 9.0->9.1 upgrade process [2013-09-13 11:25:07 BST] NetWatcherFallback: Syncing with twilight.local_annex, octavia.local_annex, 192.168.1.103_annex, luna.strangenoises.org_annex
+NetWatcherFallback crashed: git: createProcess: resource exhausted (Resource temporarily unavailable)
+[2013-09-13 11:25:07 BST] NetWatcherFallback: warning NetWatcherFallback crashed: git: createProcess: resource exhausted (Resource temporarily unavailable)
+recv: resource vanisrhreeecdcv v:(: C rorenesnsoeoucurtrciceoe n v varanenisiseshthe edbd y ( (CpCoeonennrne)ec
+cttiioonn rreesseett bbyy ppeeeerr))
+
+[2013-09-13 11:26:32 BST] main: warning git-annex has been shut down
+\"\"\"]]
+
+"""]]
diff --git a/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_6_38afcd8e7fb278ca0ee2e9e0c9f6883e._comment b/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_6_38afcd8e7fb278ca0ee2e9e0c9f6883e._comment
new file mode 100644
index 000000000..c0923b22a
--- /dev/null
+++ b/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_6_38afcd8e7fb278ca0ee2e9e0c9f6883e._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlEhzszkzOIy8-Rx8b2mcr75QcnIc6O_OA"
+ nickname="Rachel"
+ subject="comment 6"
+ date="2013-09-13T10:52:07Z"
+ content="""
+FYI, if there's any relevance to the number of files in the annex, there are 1899 files in the annex at the moment, so that many in the one being deleted. The one it hung on, \"postgresql 9.0->9.1 upgrade process\" was indeed the last one that comes up in a find command, which I think means the most recently added to this dir.
+
+Creating too many threads?
+"""]]
diff --git a/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_7_06de36dcde4c52ab74c8134f3242ac02._comment b/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_7_06de36dcde4c52ab74c8134f3242ac02._comment
new file mode 100644
index 000000000..c11630ef7
--- /dev/null
+++ b/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_7_06de36dcde4c52ab74c8134f3242ac02._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlEhzszkzOIy8-Rx8b2mcr75QcnIc6O_OA"
+ nickname="Rachel"
+ subject="comment 7"
+ date="2013-09-13T10:54:37Z"
+ content="""
+... and resolved for myself by just deleting (dropping in the trash for now) the annex on the external volume, restarting git-annex assistant and *disabling* that repo from the menu rather than deleting it.
+
+"""]]
diff --git a/doc/bugs/Out_of_memory_error_in_fsck_whereis_find_and_status_cmds/comment_6_9e3300b223dd54a3f07c650f5cf70ae0._comment b/doc/bugs/Out_of_memory_error_in_fsck_whereis_find_and_status_cmds/comment_6_9e3300b223dd54a3f07c650f5cf70ae0._comment
new file mode 100644
index 000000000..b648eb9a4
--- /dev/null
+++ b/doc/bugs/Out_of_memory_error_in_fsck_whereis_find_and_status_cmds/comment_6_9e3300b223dd54a3f07c650f5cf70ae0._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://churchkey.org/author/ian/"
+ ip="2001:470:8a52:67:a800:4ff:fe00:a04"
+ subject="Same problem, different user"
+ date="2013-09-18T22:20:09Z"
+ content="""
+@joey I appear to have run into this same problem through a similar series of repository operations. I began with the assistant, which caused some trouble while trying to set up on multiple machines, so I started using the git-annex commands directly, switched the client to direct mode, and at some point along the way I started getting the \"git-annex: out of memory (requested 1048576 bytes)\" error on my home client any time I try to run a find, whereis, status, or sync operation. On my work client I instead run into a \"fatal: write error: Invalid argument\" error. Both clients are in direct mode and both stop on the same files. I have tried to drop these files and the ones that follow them sequentially to try and clear out the grit from the machine, but to no avail. I'm available for diagnostics to help resolve this. The files in question are not symlinks and running \"echo HEAD:./$filename | git cat-file --batch\" simply produces binary blobs the same size as the original files. Running \"git ls-tree -r git-annex | wc -l\" gives \"41262\" for the client with the \"Out of memory\" error and \"41260\" for the \"write error\" client.
+"""]]
diff --git a/doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__.txt b/doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__.txt
new file mode 100644
index 000000000..7eaf2a71b
--- /dev/null
+++ b/doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__.txt
@@ -0,0 +1,46 @@
+> git annex status
+supported backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL
+supported remote types: git gcrypt S3 bup directory rsync web webdav glacier hook
+repository mode: indirect
+trusted repositories: 0
+semitrusted repositories: 8
+ 00000000-0000-0000-0000-000000000001 -- web
+ 44AF00F1-511F-4902-8235-DFF741B09400 -- here
+ 44af00f1-511f-4902-8235-dff741b09400 -- chrissy
+ 53499200-CA18-4B51-B6B3-651C18208349 -- stevedave
+ 56C56658-0995-4613-8A1B-B2FA534A834C -- olaf
+ 8FE9B19F-4FC8-4CFA-AD89-4B70EB432EDC -- passport
+ AFC75641-B34A-4644-B566-C8D3127823F7 -- glacier
+ B3238A12-D81B-40EA-BE89-3BDB318AE2B7 -- brodie
+untrusted repositories: 0
+transfers in progress: none
+available local disk space: 78.8 gigabytes (+1 gigabyte reserved)
+local annex keys: 3915
+local annex size: 81.37 gigabytes
+known annex keys: 5728
+known annex size: 641.36 gigabytes
+bloom filter size: 16 mebibytes (0.8% full)
+backend usage:
+ SHA256E: 8716
+ URL: 927
+
+> git annex version
+git-annex version: 4.20130909
+build flags: Assistant Webapp Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi
+local repository version: 3
+default repository version: 3
+supported repository versions: 3 4
+upgrade supported from repository versions: 0 1 2
+
+> git-annex intentionally treats UUIDs as opaque strings,
+> so it is not going to go to any bother to consider
+> different byte sequences to be the same UUID, sorry.
+> (The standard may be arbitrarily complicated, but I have arbitrarily
+> decided to ignore it.)
+>
+> Since git-annex only ever generates each UUID once, and copies
+> the exact sequence of bytes as necessary, the only way the situation
+> you show above can happen is if you have manually gone in and entered
+> UUIDs in two different cases.
+>
+> [[done]] --[[Joey]]
diff --git a/doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/comment_1_00b52dba3bc30516e06c44cbfd3a05a2._comment b/doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/comment_1_00b52dba3bc30516e06c44cbfd3a05a2._comment
new file mode 100644
index 000000000..b1417816f
--- /dev/null
+++ b/doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/comment_1_00b52dba3bc30516e06c44cbfd3a05a2._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
+ nickname="Richard"
+ subject="comment 1"
+ date="2013-09-12T09:44:54Z"
+ content="""
+There does not seem to be an actual bug description in here. Can you provide more info?
+
+To answer the actual question: RFC 4122 clearly answers no:
+
+ Each field is treated as an integer and has its value printed as a
+ zero-filled hexadecimal digit string with the most significant
+ digit first. The hexadecimal values \"a\" through \"f\" are output as
+ lower case characters and are case insensitive on input.
+
+Yes, that means that git-annex prints them wrongly as that's upper case.
+"""]]
diff --git a/doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/comment_2_8f5fa659c2ab91b1757bac31cd3b15eb._comment b/doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/comment_2_8f5fa659c2ab91b1757bac31cd3b15eb._comment
new file mode 100644
index 000000000..f07a7bf9d
--- /dev/null
+++ b/doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/comment_2_8f5fa659c2ab91b1757bac31cd3b15eb._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
+ nickname="Richard"
+ subject="comment 2"
+ date="2013-09-12T09:49:56Z"
+ content="""
+What OS are you using?
+
+versions 4.20130827 and 4.20130911 on Debian Sid print UUIDs which are lower case, as should be expected.
+"""]]
diff --git a/doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/comment_3_ccf9623d60c58d036d8bf24757e50de3._comment b/doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/comment_3_ccf9623d60c58d036d8bf24757e50de3._comment
new file mode 100644
index 000000000..76f6c0742
--- /dev/null
+++ b/doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/comment_3_ccf9623d60c58d036d8bf24757e50de3._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmRFKwny4rArBaz-36xTcsJYqKIgdDaw5Q"
+ nickname="Andrew"
+ subject="comment 3"
+ date="2013-09-12T16:24:30Z"
+ content="""
+This is on OSX 10.8.4
+
+If you look at the remote \"chrissy\" and \"here\" they are the same uuid, but with different case.
+"""]]
diff --git a/doc/bugs/Windows_build_test_failures.mdwn b/doc/bugs/Windows_build_test_failures.mdwn
index 97027d425..ac4dce13c 100644
--- a/doc/bugs/Windows_build_test_failures.mdwn
+++ b/doc/bugs/Windows_build_test_failures.mdwn
@@ -1228,3 +1228,5 @@ Some tests failed!
# End of transcript or log.
"""]]
+
+[[!tag moreinfo]]
diff --git a/doc/bugs/Windows_build_test_failures/comment_1_ea7523fdbafdc8be2971df52d9038826._comment b/doc/bugs/Windows_build_test_failures/comment_1_ea7523fdbafdc8be2971df52d9038826._comment
new file mode 100644
index 000000000..dc09fb89b
--- /dev/null
+++ b/doc/bugs/Windows_build_test_failures/comment_1_ea7523fdbafdc8be2971df52d9038826._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.2.134"
+ subject="comment 1"
+ date="2013-09-13T19:18:26Z"
+ content="""
+The Windows port has improved quite a lot since this bug was filed. Can you still reproduce it?
+
+If you install the pre-built git-annex for Windows, you can run `git annex test` to run the test suite. Does that work? It works for some others on Windows.
+"""]]
diff --git a/doc/bugs/Windows_installer_includes_curl_and_wget__44___but_not_required_DLLs.mdwn b/doc/bugs/Windows_installer_includes_curl_and_wget__44___but_not_required_DLLs.mdwn
index 60a894b4e..a21813500 100644
--- a/doc/bugs/Windows_installer_includes_curl_and_wget__44___but_not_required_DLLs.mdwn
+++ b/doc/bugs/Windows_installer_includes_curl_and_wget__44___but_not_required_DLLs.mdwn
@@ -13,3 +13,5 @@ Windows 7.
### Please provide any additional information below.
Installing Cygwin and adding to path seems to fix issue.
+
+[[!tag moreinfo]]
diff --git a/doc/bugs/Windows_to_Linux_clone_-_Windows_drive_letters_cause_git_annex_get_to_fail.mdwn b/doc/bugs/Windows_to_Linux_clone_-_Windows_drive_letters_cause_git_annex_get_to_fail.mdwn
index 22ad719a3..64e95ca1b 100644
--- a/doc/bugs/Windows_to_Linux_clone_-_Windows_drive_letters_cause_git_annex_get_to_fail.mdwn
+++ b/doc/bugs/Windows_to_Linux_clone_-_Windows_drive_letters_cause_git_annex_get_to_fail.mdwn
@@ -1,3 +1,5 @@
+[[!tag moreinfo]]
+
### Please describe the problem.
git annex get on a clone of a repository created on Windows fails.
diff --git a/doc/bugs/Windows_to_Linux_clone_-_Windows_drive_letters_cause_git_annex_get_to_fail/comment_4_c4249f32d65594d79ea01145b93ec948._comment b/doc/bugs/Windows_to_Linux_clone_-_Windows_drive_letters_cause_git_annex_get_to_fail/comment_4_c4249f32d65594d79ea01145b93ec948._comment
new file mode 100644
index 000000000..31bc7c1a1
--- /dev/null
+++ b/doc/bugs/Windows_to_Linux_clone_-_Windows_drive_letters_cause_git_annex_get_to_fail/comment_4_c4249f32d65594d79ea01145b93ec948._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.2.134"
+ subject="comment 4"
+ date="2013-09-13T19:29:25Z"
+ content="""
+I'd suggest that you run git annex get --debug to see if it is doing anything obviously wrong. The mostly likely culprit is your SMB setup, which I am not going to be able to replicate.
+
+"""]]
diff --git a/doc/bugs/assistant_does_not_allow_adding_an_existing_repo.mdwn b/doc/bugs/assistant_does_not_allow_adding_an_existing_repo.mdwn
new file mode 100644
index 000000000..8a6218c04
--- /dev/null
+++ b/doc/bugs/assistant_does_not_allow_adding_an_existing_repo.mdwn
@@ -0,0 +1,8 @@
+The assistant does not allow adding an existing repo: I tried to add a "remote server", to enter the credits, and then I add to choose between "git-annex" or "rsync". Choosing "git-annex" tries to create a new repo and then fails. The repo on the server is a bare one, accessed via gitolite. Setting the remote manually ("git remote add origin git@example.org:my-annex.git" works (I can pull, push, ...))
+
+Mac OS 10.7 version 2013-09-10
+
+
+[[!meta title="assistant does not interoperate with gitolite when adding a repository"]]
+
+[2013-09-13 17:00:55 CEST] chat: ssh ["-p","22","git@example.org","sh -c 'mkdir -p '\"'\"'my-annex.git'\"'\"'&&cd '\"'\"'my-annex.git'\"'\"'&&if [ ! -d .git ]; then git init --bare --shared; fi&&git annex init'"]
diff --git a/doc/bugs/assistant_does_not_allow_adding_an_existing_repo/comment_1_87e84d56d56abefe8cac8a52b76c9003._comment b/doc/bugs/assistant_does_not_allow_adding_an_existing_repo/comment_1_87e84d56d56abefe8cac8a52b76c9003._comment
new file mode 100644
index 000000000..b260b8df5
--- /dev/null
+++ b/doc/bugs/assistant_does_not_allow_adding_an_existing_repo/comment_1_87e84d56d56abefe8cac8a52b76c9003._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.2.134"
+ subject="comment 1"
+ date="2013-09-13T18:19:03Z"
+ content="""
+I suppose the assistant could try to add a git remote and pull from it, and only if this pull fails go try to run shell commands to create it. This might work with gitolite, gitosis, github, etc. Although only partially for ones that don't support running git-annex-shell..
+"""]]
diff --git a/doc/bugs/assistant_doesn__39__t_sync_empty_directories/comment_3_f9b2a700c060707fae1bcb2ec0e4e4dc._comment b/doc/bugs/assistant_doesn__39__t_sync_empty_directories/comment_3_f9b2a700c060707fae1bcb2ec0e4e4dc._comment
new file mode 100644
index 000000000..757a1c727
--- /dev/null
+++ b/doc/bugs/assistant_doesn__39__t_sync_empty_directories/comment_3_f9b2a700c060707fae1bcb2ec0e4e4dc._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmOsy6nbvPyXLd--qqjPMLnVIzxgZwtKlQ"
+ nickname="Nicolas"
+ subject="comment 3"
+ date="2013-09-11T23:19:26Z"
+ content="""
+This behaviour is indeed very confusing when one attempts to use git-annex with the assistant only, without thinking about the underlying machinery.
+Having the assistant automatically put a .gitignore file in empty directories is a possible solution, but maybe printing a warning in the log when the watcher sees an empty directory could be an unobtrusive and helpful solution? (At least it would have helped me)
+"""]]
diff --git a/doc/bugs/assistant_doesn__39__t_sync_empty_directories/comment_4_014d213a959dd7993bdd247722a8817e._comment b/doc/bugs/assistant_doesn__39__t_sync_empty_directories/comment_4_014d213a959dd7993bdd247722a8817e._comment
new file mode 100644
index 000000000..f6be08ae4
--- /dev/null
+++ b/doc/bugs/assistant_doesn__39__t_sync_empty_directories/comment_4_014d213a959dd7993bdd247722a8817e._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmOsy6nbvPyXLd--qqjPMLnVIzxgZwtKlQ"
+ nickname="Nicolas"
+ subject="comment 4"
+ date="2013-09-11T23:24:58Z"
+ content="""
+Another problem with the current behaviour is that when deleting a directory and its contents on a repository, the contents are deleted on the other repositories but empty directories are left behind...
+"""]]
diff --git a/doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual.mdwn b/doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual.mdwn
index f3bff8683..c5a75b361 100644
--- a/doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual.mdwn
+++ b/doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual.mdwn
@@ -20,3 +20,5 @@ A is running Debian testing with git-annex 4.20130827, B and S are running Debia
I tried this setup before with direct mode and different preferred content settings (A, B as client, S as backup or archive), and syncing of git and file data was working then.
Despite being able to run 'sync' it is at least inconvenient to not have automatically updated file location information when I run the assistant. (I could then just run without it, but I had it happen to me that I setup a local repo w/o assistant, and when I ran assistant, expecting it would tell me "there are no local repos, would you like to create one?" it somehow automatically found the manually created one and started copying files. But that's another problem.)
+
+> [[done]] unless my diagnosis is wrong. --[[Joey]]
diff --git a/doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_5_eda947eb7f8c46b9a61d6430b5f9ebfd._comment b/doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_5_eda947eb7f8c46b9a61d6430b5f9ebfd._comment
new file mode 100644
index 000000000..05a3d7f74
--- /dev/null
+++ b/doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_5_eda947eb7f8c46b9a61d6430b5f9ebfd._comment
@@ -0,0 +1,25 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.2.134"
+ subject="comment 5"
+ date="2013-09-13T18:30:53Z"
+ content="""
+You have described the following git-annex network:
+
+ A --(ssh)-- S --(ssh)-- B
+
+So A automatically syncs to S. But there is no way at all for A to tell B that it has made changes. So B does not automatically sync.
+
+The git-annex webapp will detect this kind of situation, and display this alert:
+
+[[assistant/xmppnudge.png]]
+
+Once you set up an XMPP account, the network will look like:
+
+ A --(ssh)-- S --(ssh)-- B
+ \_________(XMPP)_______/
+
+And now B will immediatly know when A has pushed a change to S, and will go get it.
+
+(The `getDirectoryContents` error is probably because you are running git annex sync in a repository that the git-annex assistant is running in, and they are both using the same tmp directory for merging branches sync pulled. It does not seem to be worth worrying about.)
+"""]]
diff --git a/doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_3_51da7f5881f65422328d341e5ab0d250._comment b/doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_3_51da7f5881f65422328d341e5ab0d250._comment
new file mode 100644
index 000000000..4cf86f646
--- /dev/null
+++ b/doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_3_51da7f5881f65422328d341e5ab0d250._comment
@@ -0,0 +1,33 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlEhzszkzOIy8-Rx8b2mcr75QcnIc6O_OA"
+ nickname="Rachel"
+ subject="I'm afraid I'm getting this too"
+ date="2013-09-12T12:48:04Z"
+ content="""
+Very similar setup. Initially set up on a Mac, then tried to set up the first local pairing with a Linux system. Basically seeing exactly the same thing.
+
+ bad comment in ssh public key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDa09lpmgLeRVF1KZn2gX6tmBH4Jpcou/rkPbhwLoFNLtQsdNrbjDKuyc4pDbUhexWVvub1YCLItLK0vYRdMvoJWjNzy926sHs8CxXFVg6PMQXw3wOHousSn0NkVfwUMNn5aS+1vz/WDlStmg7WzXgiPg1Whn6CKIomxA63rUMe3I+2nVkyO6jGlOkliPApVP2utURJbyxBDYDB+Ys7zUxvEcCekhxJO263myuo2gwI4A3mfTLRJMzbz8frRZJz5iuUIcOHaIDy6n0qKFq18BDux4SDwNjQ34yti5yqveRBMwFndHQYN6YHk1k26h0kyhb2T6lXaaAirSqa3dwfZuKp rachel@celestia.local
+
+
+# Versions and Stuff:
+
+## Mac:
+
+* OS X 10.8.4
+* git-annex 4.20130909-ga29f960 (downloaded about half an hour ago!)
+* BTW I have git installed from Homebrew, version 1.8.3.4 in my shell's $PATH, but obviously /usr/bin/git from the system is intact.
+* Hostname: celestia.local
+* Username: rachel
+
+## Linux:
+* Ubuntu 13.04
+* git-annex 3.20121112ubuntu4 (from Ubuntu's own repos)
+* I note that's later than the version you said this bug was fixed in, hence the report. :-)
+* Hostname: twilight.local (mDNS domain not appended even by hostname -f but avahi is working)
+* Username: rachel
+
+IPv6 is active, but I note a comment somewhere that that's probably not relevant for git-annex.
+
+Machines are very local to each other, in the same room, connected via a gigabit switch. They can definitely see each other. :-)
+
+"""]]
diff --git a/doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_4_ba384314c1e47ec4b72e1843e0500df9._comment b/doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_4_ba384314c1e47ec4b72e1843e0500df9._comment
new file mode 100644
index 000000000..4b9e27bba
--- /dev/null
+++ b/doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_4_ba384314c1e47ec4b72e1843e0500df9._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmpBDWko1yZmngBYzm_CeBv8RjoIMXaINE"
+ nickname="Rachel"
+ subject="latest works"
+ date="2013-09-12T13:19:09Z"
+ content="""
+Downloaded the latest tarball (4.20130911-g6625d0e) and that seems to be able to pair ok.
+
+Different bug though: It objects to push.default = simple in ~/.gitconfig, but no such complaint on osx. But that's a different bug; i'll report separately when I'm a bit more up to speed.
+"""]]
diff --git a/doc/bugs/box.com_never_stops_syncing..mdwn b/doc/bugs/box.com_never_stops_syncing..mdwn
new file mode 100644
index 000000000..42b2eaf1a
--- /dev/null
+++ b/doc/bugs/box.com_never_stops_syncing..mdwn
@@ -0,0 +1,63 @@
+### Please describe the problem.
+Git-annex will constantly sync most(if not all) my files to box.com
+
+### What steps will reproduce the problem?
+1 - Use git-annex instead of Dropbox at work
+2 - Boot computer.
+3 - Watch it sync everything to box.com (even files i believe it has transferred each and every day for the last few months)
+
+### What version of git-annex are you using? On what operating system?
+git-annex version: 4.20130827
+
+But i have never seen it work satisfactory in any version.
+
+Also, i have seen this is 10+ different clean git-annexes. So it isn't annex specific.
+
+### Please provide any additional information below.
+
+I am going to add more debug to this bug constantly. (I intend to do a full 'git annex copy --to box.com --not --in box.com' daily, and see if the same files are transfered again and again)
+
+
+For now, i see a few different issues already:
+
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+tou@DSK1049:~/work-annex$ git annex copy --to box.com --not --in box.com 2>&1 | tee ../work-annex-copy-to-box.com-not-in-box.com-run1.log
+[2013-09-11 09:24:53 CEST] read: git ["--git-dir=/home/tou/work-annex/.git","--work-tree=/home/tou/work-annex","show-ref","git-annex"]
+[2013-09-11 09:24:53 CEST] read: git ["--git-dir=/home/tou/work-annex/.git","--work-tree=/home/tou/work-annex","show-ref","--hash","refs/heads/git-annex"]
+[2013-09-11 09:24:53 CEST] read: git ["--git-dir=/home/tou/work-annex/.git","--work-tree=/home/tou/work-annex","log","refs/heads/git-annex..dbe8b1cfa5f84126c45a39fdc7c7f26e272c71cc","--oneline","-n1"]
+[2013-09-11 09:24:53 CEST] read: git ["--git-dir=/home/tou/work-annex/.git","--work-tree=/home/tou/work-annex","log","refs/heads/git-annex..45e279375897a2cd7f5b893402e0ec25c1b23436","--oneline","-n1"]
+[2013-09-11 09:24:54 CEST] read: git ["--git-dir=/home/tou/work-annex/.git","--work-tree=/home/tou/work-annex","log","refs/heads/git-annex..c4921be4434f751493fce1c932ac759214abacd4","--oneline","-n1"]
+[2013-09-11 09:24:54 CEST] read: git ["--git-dir=/home/tou/work-annex/.git","--work-tree=/home/tou/work-annex","log","refs/heads/git-annex..d591398dc1cac824a5fc5bdacdcb82301a9b15a3","--oneline","-n1"]
+[2013-09-11 09:24:54 CEST] chat: git ["--git-dir=/home/tou/work-annex/.git","--work-tree=/home/tou/work-annex","cat-file","--batch"]
+[2013-09-11 09:24:54 CEST] read: git ["config","--null","--list"]
+[2013-09-11 09:24:54 CEST] read: git ["--git-dir=/home/tou/work-annex/.git","--work-tree=/home/tou/work-annex","ls-files","--cached","-z","--"]
+[2013-09-11 09:24:54 CEST] chat: git ["--git-dir=/home/tou/work-annex/.git","--work-tree=/home/tou/work-annex","cat-file","--batch"]
+copy Documents/Gamle catillo overførsler/Rapport b-bm.odt (gpg) (checking box.com...) ok
+copy Documents/Gamle catillo overførsler/Rapport brandt skorstensfejeren.odt (checking box.com...) (failed to read https://www.box.com/dav/work-annex/4a5/18e/GPGHMACSHA1--5f8660edac93899cf9adc5fadcc480ddc2992bb1/GPGHMACSHA1--5f8660edac93899cf9adc5fadcc480ddc2992bb1.chunkcount) failed
+copy Documents/Gamle catillo overførsler/Rapport teamkoege.odt (checking box.com...) (failed to read https://www.box.com/dav/work-annex/98d/ae7/GPGHMACSHA1--5253241407527aa6c980f1174fdbc32713c54c44/GPGHMACSHA1--5253241407527aa6c980f1174fdbc32713c54c44.chunkcount) failed
+copy Documents/Gamle catillo overførsler/Rapport vikarborsen.odt (checking box.com...) ok
+copy Documents/Gamle catillo overførsler/Rapport-terrariemesteren.odt (checking box.com...) ok
+copy Documents/Gamle catillo overførsler/catillo-efhandel.odt (checking box.com...) (failed to read https://www.box.com/dav/work-annex/9d9/aea/GPGHMACSHA1--1516eac1ec7b4ceaa840faebabde1f50f5db0a52/GPGHMACSHA1--1516eac1ec7b4ceaa840faebabde1f50f5db0a52.chunkcount) failed
+copy Documents/Nøgeordsanalyse catillo104.xlsx (checking box.com...) (ResponseTimeout) failed
+copy Documents/Søgeordsliste.txt (checking box.com...) ok
+copy Documents/catillo guide.odt (checking box.com...) ok
+copy Documents/guide bruger oprettelse.odt (checking box.com...) (failed to read https://www.box.com/dav/work-annex/49e/175/GPGHMACSHA1--2b47737f8de7faac7704eaa322785edad63a921c/GPGHMACSHA1--2b47737f8de7faac7704eaa322785edad63a921c.chunkcount) failed
+copy Documents/guide skift backup bånd.odt (checking box.com...) ok
+copy Documents/lilletest.csv (checking box.com...) (failed to read https://www.box.com/dav/work-annex/915/373/GPGHMACSHA1--49ba3d5f63c012ae2cd2c0fc3e729178b1023c33/GPGHMACSHA1--49ba3d5f63c012ae2cd2c0fc3e729178b1023c33.chunkcount) failed
+copy Dropbox/adams-scraper/CommonFunctions.py (checking box.com...) (ResponseTimeout) failed
+copy Dropbox/adams-scraper/__pycache__/CommonFunctions.cpython-33.pyc (checking box.com...) (to box.com...) [2013-09-11 09:28:30 CEST] chat: gpg ["--batch","--no-tty","--use-agent","--quiet","--trust-model","always","--batch","--passphrase-fd","14","--symmetric","--force-mdc"]
+
+100% 0.0 B/s 0sResponseTimeout
+ResponseTimeout
+failed
+
+
+# End of transcript or log.
+"""]]
+
+More to come(full log)
diff --git a/doc/bugs/box.com_never_stops_syncing./comment_1_124a5edcd89cc6b61e1a41f5b4d640d7._comment b/doc/bugs/box.com_never_stops_syncing./comment_1_124a5edcd89cc6b61e1a41f5b4d640d7._comment
new file mode 100644
index 000000000..ee1c88cc7
--- /dev/null
+++ b/doc/bugs/box.com_never_stops_syncing./comment_1_124a5edcd89cc6b61e1a41f5b4d640d7._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.4.51"
+ subject="comment 1"
+ date="2013-09-12T20:29:14Z"
+ content="""
+It seems you are getting a lot of timeouts from box.com, both when checking if content is present there and when uploading content that it does not have.
+
+I have heard some grumbles about box.com not being very reliable right now.
+"""]]
diff --git a/doc/bugs/box.com_never_stops_syncing./comment_2_42574181aa721319ba54eadf0a15ddff._comment b/doc/bugs/box.com_never_stops_syncing./comment_2_42574181aa721319ba54eadf0a15ddff._comment
new file mode 100644
index 000000000..5a0cde548
--- /dev/null
+++ b/doc/bugs/box.com_never_stops_syncing./comment_2_42574181aa721319ba54eadf0a15ddff._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmkBwMWvNKZZCge_YqobCSILPMeK6xbFw8"
+ nickname="develop"
+ subject="comment 2"
+ date="2013-09-12T20:54:33Z"
+ content="""
+The problem being. I've used box.com with one of my own hooks(owncloud), where it is completely stable!
+
+The instability is not a the box.com end.
+
+"""]]
diff --git a/doc/bugs/box.com_never_stops_syncing./comment_3_2ad727849070cfd52d6c719478e9cce3._comment b/doc/bugs/box.com_never_stops_syncing./comment_3_2ad727849070cfd52d6c719478e9cce3._comment
new file mode 100644
index 000000000..5eab58b3f
--- /dev/null
+++ b/doc/bugs/box.com_never_stops_syncing./comment_3_2ad727849070cfd52d6c719478e9cce3._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.4.51"
+ subject="comment 3"
+ date="2013-09-12T20:56:44Z"
+ content="""
+git-annex is using box.com's WebDAV interface. Is owncloud?
+"""]]
diff --git a/doc/bugs/box.com_never_stops_syncing./comment_4_83ce23e45f5a5845d4f04519ee14ec65._comment b/doc/bugs/box.com_never_stops_syncing./comment_4_83ce23e45f5a5845d4f04519ee14ec65._comment
new file mode 100644
index 000000000..eb9dc5134
--- /dev/null
+++ b/doc/bugs/box.com_never_stops_syncing./comment_4_83ce23e45f5a5845d4f04519ee14ec65._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmkBwMWvNKZZCge_YqobCSILPMeK6xbFw8"
+ nickname="develop"
+ subject="comment 4"
+ date="2013-09-12T21:33:29Z"
+ content="""
+It uses the following url https://www.box.com/dav
+
+"""]]
diff --git a/doc/bugs/box.com_never_stops_syncing./comment_5_ef1c9d87b04db5047ab72167d3269687._comment b/doc/bugs/box.com_never_stops_syncing./comment_5_ef1c9d87b04db5047ab72167d3269687._comment
new file mode 100644
index 000000000..9d9c1329b
--- /dev/null
+++ b/doc/bugs/box.com_never_stops_syncing./comment_5_ef1c9d87b04db5047ab72167d3269687._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.4.51"
+ subject="comment 5"
+ date="2013-09-12T21:44:32Z"
+ content="""
+It may be that there is a timeout in the http library that I am using for webdav that is too low. See <https://github.com/snoyberg/http-conduit/issues/137>
+"""]]
diff --git a/doc/bugs/box.com_never_stops_syncing./comment_6_c9cb39eba941678035f9b2888da1085c._comment b/doc/bugs/box.com_never_stops_syncing./comment_6_c9cb39eba941678035f9b2888da1085c._comment
new file mode 100644
index 000000000..5eaf4f4bb
--- /dev/null
+++ b/doc/bugs/box.com_never_stops_syncing./comment_6_c9cb39eba941678035f9b2888da1085c._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmkBwMWvNKZZCge_YqobCSILPMeK6xbFw8"
+ nickname="develop"
+ subject="comment 6"
+ date="2013-09-12T21:49:05Z"
+ content="""
+That would probably do it. With other implementations(fuse mount) i've seen stalls and other bad behaviour with that DAV server.
+
+The owncloud hook doesn't have a timeout set. It probably should have one to prevent a total stall.
+"""]]
diff --git a/doc/bugs/box.com_never_stops_syncing./comment_7_4b0632a4e37c96959a8e6434e9fd86fb._comment b/doc/bugs/box.com_never_stops_syncing./comment_7_4b0632a4e37c96959a8e6434e9fd86fb._comment
new file mode 100644
index 000000000..2ac3f360e
--- /dev/null
+++ b/doc/bugs/box.com_never_stops_syncing./comment_7_4b0632a4e37c96959a8e6434e9fd86fb._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmkBwMWvNKZZCge_YqobCSILPMeK6xbFw8"
+ nickname="develop"
+ subject="Logs"
+ date="2013-09-13T11:43:22Z"
+ content="""
+So have two days of logs now, and it doesn't look like it is retrying old files.
+
+http://paste.ubuntu.com/6101255/ <- day 1
+
+http://paste.ubuntu.com/6101256/ <- day 2
+
+Setting the computer to do the following loop over the weekend, lets see if everything is done come monday.
+
+for i in `seq 3 2000`; do git annex copy --to box.com --not --in box.com 2>&1 | tee ../work-annex-copy-to-box.com-not-in-box.com-run$i.log; done
+
+"""]]
diff --git a/doc/bugs/box.com_never_stops_syncing./comment_8_d9d318b8c958de6031ae323da20af625._comment b/doc/bugs/box.com_never_stops_syncing./comment_8_d9d318b8c958de6031ae323da20af625._comment
new file mode 100644
index 000000000..8dfbd6944
--- /dev/null
+++ b/doc/bugs/box.com_never_stops_syncing./comment_8_d9d318b8c958de6031ae323da20af625._comment
@@ -0,0 +1,55 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmWg4VvDTer9f49Y3z-R0AH16P4d1ygotA"
+ nickname="Tobias"
+ subject="Update"
+ date="2013-09-18T11:17:33Z"
+ content="""
+Only just got back to work now. The script has done 10 iteration. This is the status:
+
+
+tou@DSK1049:~$ cat work-annex-copy-to-box.com-not-in-box.com-run1.log |grep \" ok\"| wc -l
+137
+
+tou@DSK1049:~$ cat work-annex-copy-to-box.com-not-in-box.com-run2.log |grep \" ok\"| wc -l
+77
+
+tou@DSK1049:~$ cat work-annex-copy-to-box.com-not-in-box.com-run3.log |grep \" ok\"| wc -l
+116
+
+tou@DSK1049:~$ cat work-annex-copy-to-box.com-not-in-box.com-run4.log |grep \" ok\"| wc -l
+70
+
+tou@DSK1049:~$ cat work-annex-copy-to-box.com-not-in-box.com-run5.log |grep \" ok\"| wc -l
+26
+
+tou@DSK1049:~$ cat work-annex-copy-to-box.com-not-in-box.com-run6.log |grep \" ok\"| wc -l
+6
+
+tou@DSK1049:~$ cat work-annex-copy-to-box.com-not-in-box.com-run7.log |grep \" ok\"| wc -l
+6
+
+tou@DSK1049:~$ cat work-annex-copy-to-box.com-not-in-box.com-run8.log |grep \" ok\"| wc -l
+0
+
+tou@DSK1049:~$ cat work-annex-copy-to-box.com-not-in-box.com-run9.log |grep \" ok\"| wc -l
+0
+
+tou@DSK1049:~$ cat work-annex-copy-to-box.com-not-in-box.com-run10.log |grep \" ok\"| wc -l
+0
+
+tou@DSK1049:~$ cat work-annex-copy-to-box.com-not-in-box.com-run11.log |grep \" ok\"| wc -l
+0
+
+tou@DSK1049:~$ cat work-annex-copy-to-box.com-not-in-box.com-run12.log |grep \" ok\"| wc -l
+0
+
+I have all the log files of course.
+
+tou@DSK1049:~/work-annex$ git annex find --not --in box.com| wc -l
+1639
+
+So, of the last 5 iteration 0 files of 1639 missing were transfered. Most of these files are <10kbyte
+
+http://paste.ubuntu.com/6123459/ <- pastebin of work-annex-copy-to-box.com-not-in-box.com-run11.log if it is of any use.
+
+"""]]
diff --git a/doc/bugs/cabal_install_fails_to_install_manpage.mdwn b/doc/bugs/cabal_install_fails_to_install_manpage.mdwn
index b0de72e91..265ad2432 100644
--- a/doc/bugs/cabal_install_fails_to_install_manpage.mdwn
+++ b/doc/bugs/cabal_install_fails_to_install_manpage.mdwn
@@ -15,3 +15,29 @@ git annex from a recent git build (4.20130909-g7f079d6) in Debian wheezy.
### Please provide any additional information below.
<del>This could be just a documentation problem...</del> Actually, the manpage can be read directly from the source tree in `doc/git-annex.mdwn`, but I still think it should be installed, for [[!wikipedia POLA]]'s sake. --[[anarcat]]
+
+I figured it out - that stuff is in the makefile, I updated [[install/cabal]] accordingly, so <del>done</del> - not done just yet. --[[anarcat]]
+
+> Doesn't seem right to me; Setup.hs has some stuff to do with
+> installing man pages. This does currently require that they
+> are distributed in pre-built form in the .tar.gz on hackage,
+> which I've just checked and they are.
+>
+> Perhaps cabal put the man pages somewhere else? After all, you
+> apparently did not set --datadir --[[Joey]]
+
+> > True, I didn't - the docs didn't say to. ;) But really, it's one of two things, either Setup.hs can install manpages, and then the Makefile shouldn't install it, or we should update documentation to use the makefile only. I'll try this again next time I reinstall through cabal i guess... -- [[anarcat]]a
+
+>>> The default location cabal installs man pages to is
+>>> `~/.cabal/share/man/man1`. That is insane, but it is not as
+>>> insane as not installing programs into PATH, which is why
+>>> the documentation tells how to set --bindir to fix that particular
+>>> cabal insanity. (Also, many systems don't have a good per-user
+>>> man directory anyway.)
+>>>
+>>> `make install` does not use `cabal install` because as noted, cabal
+>>> install is thurougly bat shit crazy. Not all systems that have
+>>> cabal have make, which is why the cabal documentation is the way it is.
+>>> --[[Joey]]
+
+[[done]]
diff --git a/doc/bugs/can__39__t_annex_get_from_annex_in_direct_mode.mdwn b/doc/bugs/can__39__t_annex_get_from_annex_in_direct_mode.mdwn
index d09a13b07..ca47d3a4c 100644
--- a/doc/bugs/can__39__t_annex_get_from_annex_in_direct_mode.mdwn
+++ b/doc/bugs/can__39__t_annex_get_from_annex_in_direct_mode.mdwn
@@ -19,3 +19,5 @@ Debian Linux: 3.20120629 (from the package manager)
there is no <filehash>.<extension> file in the relevant directories, there are only .map and .cache files. The Windows annex is in direct mode, and the Linux annex fails to annex get from this correctly.
[[!meta title="can't use a direct mode repository as a http remote"]]
+
+> [[done]]; unsupported configuration. --[[Joey]]
diff --git a/doc/bugs/gcrypt_initremote_pushes_git-annex_but_not_master.mdwn b/doc/bugs/gcrypt_initremote_pushes_git-annex_but_not_master.mdwn
new file mode 100644
index 000000000..c256778c8
--- /dev/null
+++ b/doc/bugs/gcrypt_initremote_pushes_git-annex_but_not_master.mdwn
@@ -0,0 +1,19 @@
+git-annex 4.20130911 on Debian Wheezy.
+
+Using `git annex initremote type=gcrypt` as described [here](http://git-annex.branchable.com/tips/fully_encrypted_git_repositories_with_gcrypt/) creates the repository and pushes the `git-annex` branch to it. It doesn't push `master` (or more generally: the currently checked out branch), as I have verified using `git remote show`.
+
+Manually pushing the branch makes `git annex sync` sync both branches with the gcrypt remote.
+
+I think that it should push the current branch upon creation of the special remote, since for at least me, the whole reason for wanting `git-remote-gcrypt` is that metadata as well as data can be stored encrypted on an SSH server.
+
+Thanks for considering this.
+
+> The git-annex branch is pushed by initremote because I have to push
+> *something* to determine the gcrypt-id. However, this is an implementation
+> detail, and not a feature of initremote. (It's more like a bug of
+> git-remote-gcrypt.)
+>
+> `git annex sync` will always push your currently checked out branch,
+> as well as the git-annex branch, no matter what `initremote` has done.
+>
+> [[done]] --[[Joey]]
diff --git a/doc/bugs/git-annex:_Argument_list_too_long.mdwn b/doc/bugs/git-annex:_Argument_list_too_long.mdwn
new file mode 100644
index 000000000..f12d5da65
--- /dev/null
+++ b/doc/bugs/git-annex:_Argument_list_too_long.mdwn
@@ -0,0 +1,40 @@
+### Please describe the problem.
+
+Creating a SSH remote git-annex repository using the assisstant gives transcript:
+
+Initialized empty shared Git repository in /home/flindner/annex2/
+exec: 76: git-annex: Argument list too long
+
+### What steps will reproduce the problem?
+
+Using assistent: Creating a new empty local repository. Next, add another remote server repository using SSH. Checking the server went fine. I choose creating git repository. After about 5 minutes the error message above appears. In that time on the server runshell and git take plenty of CPU power but almost no memory. The directory on the server is created, but pairing was not successfull.
+
+### What version of git-annex are you using? On what operating system?
+
+Local: git-annex-standalone 4.20130909-1 from Archlinux AUR
+Remote: git-annex-standalone-i386.tar.gz as of 13. sept. 13. on Debian Squeeze.
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+daemon.log is empty.
+
+Log from the web GUI:
+
+[2013-09-13 12:34:11 CEST] main: starting assistant version 4.20130827-g4f18612
+
+ No known network monitor available through dbus; falling back to polling
+(scanning...) [2013-09-13 12:34:11 CEST] Watcher: Performing startup scan
+(started...)
+
+
+# End of transcript or log.
+"""]]
+
+> [[done]]; I have added a guard to runshell to detect when it has
+> started to loop. Although I don't understand how a system could be
+> misconfigured to let that happen, without going far out of your way to
+> mess it up, it's a failure mode that's worth guarding against. --[[Joey]]
diff --git a/doc/bugs/git-annex:_Argument_list_too_long/comment_1_3f83ea525436b2379ab29a0f860c4669._comment b/doc/bugs/git-annex:_Argument_list_too_long/comment_1_3f83ea525436b2379ab29a0f860c4669._comment
new file mode 100644
index 000000000..43f4aa98b
--- /dev/null
+++ b/doc/bugs/git-annex:_Argument_list_too_long/comment_1_3f83ea525436b2379ab29a0f860c4669._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.2.134"
+ subject="comment 1"
+ date="2013-09-13T15:31:35Z"
+ content="""
+Can you add set -x near the top of the server's runshell script and run this again also with debugging enabled in the local assistant, and post the log, please.
+"""]]
diff --git a/doc/bugs/git-annex:_Argument_list_too_long/comment_2_b417c94169378ef7d0d278ebae517fa1._comment b/doc/bugs/git-annex:_Argument_list_too_long/comment_2_b417c94169378ef7d0d278ebae517fa1._comment
new file mode 100644
index 000000000..cd90d9c3b
--- /dev/null
+++ b/doc/bugs/git-annex:_Argument_list_too_long/comment_2_b417c94169378ef7d0d278ebae517fa1._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnsuhFUIfWNT-Q-C02FDaSQqceFDge5M9w"
+ nickname="Florian"
+ subject="comment 2"
+ date="2013-09-14T08:49:23Z"
+ content="""
+Is there any way to get the transcript from a log file, not from the web page? The output is so enormous that it crashed my browser out of memory (which is 16 GiB) when I tried to paste it. daemon.log contains no interesting output.
+"""]]
diff --git a/doc/bugs/git-annex:_Argument_list_too_long/comment_3_fa925cca216cb810ad80482b19fc6053._comment b/doc/bugs/git-annex:_Argument_list_too_long/comment_3_fa925cca216cb810ad80482b19fc6053._comment
new file mode 100644
index 000000000..e182ca2c3
--- /dev/null
+++ b/doc/bugs/git-annex:_Argument_list_too_long/comment_3_fa925cca216cb810ad80482b19fc6053._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnsuhFUIfWNT-Q-C02FDaSQqceFDge5M9w"
+ nickname="Florian"
+ subject="comment 3"
+ date="2013-09-15T23:08:48Z"
+ content="""
+Ok, I managed to get the transcript. It is located at <http://xgm.de/upload/transcript.log> (partly) resp. <http://xgm.de/upload/transcript.log.gz> (complete). Looks like the same script is executed again and again with an ever growing LD_LIBRARY_PATH argument list. The same happens when I simply run \"git-annex\" on the shell of the server. \"runshell\" standalone works fine.
+"""]]
diff --git a/doc/bugs/git-annex:_Argument_list_too_long/comment_4_8bd2996107b2d272c32810658e07e715._comment b/doc/bugs/git-annex:_Argument_list_too_long/comment_4_8bd2996107b2d272c32810658e07e715._comment
new file mode 100644
index 000000000..033e695f5
--- /dev/null
+++ b/doc/bugs/git-annex:_Argument_list_too_long/comment_4_8bd2996107b2d272c32810658e07e715._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnsuhFUIfWNT-Q-C02FDaSQqceFDge5M9w"
+ nickname="Florian"
+ subject="comment 4"
+ date="2013-09-15T23:10:38Z"
+ content="""
+Addendum: git inside runshells works, git-annex not.
+"""]]
diff --git a/doc/bugs/git-annex:_Argument_list_too_long/comment_5_378de7d7503a64611eab62f2f5cffef3._comment b/doc/bugs/git-annex:_Argument_list_too_long/comment_5_378de7d7503a64611eab62f2f5cffef3._comment
new file mode 100644
index 000000000..b10c66c81
--- /dev/null
+++ b/doc/bugs/git-annex:_Argument_list_too_long/comment_5_378de7d7503a64611eab62f2f5cffef3._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnsuhFUIfWNT-Q-C02FDaSQqceFDge5M9w"
+ nickname="Florian"
+ subject="comment 5"
+ date="2013-09-16T09:00:34Z"
+ content="""
+Ok, bug can be closed, it was never a bug (at least not in git-annex). I was using the i386 build on a x86_64 machine.
+
+Server is virtual machine from Strato.
+
+$ uname -a
+Linux h1774498.stratoserver.net 2.6.32-042stab078.27 #1 SMP Mon Jul 1 20:48:07 MSK 2013 i686 GNU/Linux
+
+Since there was no x86_64 in the uname output, I thought it was a i386 machine. The git-annex binaries gave a \"File not found\" error message, the git binaries worked. Nothing I connected to a wrong architecture... Sorry for the hassle!
+"""]]
diff --git a/doc/bugs/git-annex:_Argument_list_too_long/comment_6_a94e17151348d02999442dd1219babfb._comment b/doc/bugs/git-annex:_Argument_list_too_long/comment_6_a94e17151348d02999442dd1219babfb._comment
new file mode 100644
index 000000000..a788f2c8e
--- /dev/null
+++ b/doc/bugs/git-annex:_Argument_list_too_long/comment_6_a94e17151348d02999442dd1219babfb._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.153.14.105"
+ subject="comment 6"
+ date="2013-09-19T17:31:46Z"
+ content="""
+I have tried to reproduce this bug, running the amd64 build on i386, and cannot. When I run the git-annex shell script included in the standalone bundle, it runs runshell, which in turn tries to run bin/git-annex. Since the architecture is wrong, that fails.
+
+I suppose your shell could instead, if presented with a binary of the wrong architecture, skip it and keep searching PATH for another one. That would be a most odd behavior, but if that were the case and you put the git-annex script into PATH, it would lead to what you describe.
+"""]]
diff --git a/doc/bugs/git-annex:_fd:14:_hGetLine:_end_of_file.mdwn b/doc/bugs/git-annex:_fd:14:_hGetLine:_end_of_file.mdwn
index 1e9f3aec4..0d773b52c 100644
--- a/doc/bugs/git-annex:_fd:14:_hGetLine:_end_of_file.mdwn
+++ b/doc/bugs/git-annex:_fd:14:_hGetLine:_end_of_file.mdwn
@@ -1,3 +1,5 @@
+[[!tag moreinfo]]
+
### Please describe the problem.
git-annex webapp won't run
diff --git a/doc/bugs/git-annex_broken_on_Android_4.3/comment_6_5741b6a5997328fdcd5cc99f841b18d3._comment b/doc/bugs/git-annex_broken_on_Android_4.3/comment_6_5741b6a5997328fdcd5cc99f841b18d3._comment
new file mode 100644
index 000000000..438e00454
--- /dev/null
+++ b/doc/bugs/git-annex_broken_on_Android_4.3/comment_6_5741b6a5997328fdcd5cc99f841b18d3._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnRai_qFYPVvEgC6i1nlM1bh-C__jbhqS0"
+ nickname="Matthew"
+ subject="Definitely broken Galaxy Nexus GSM 4.3"
+ date="2013-09-12T11:11:34Z"
+ content="""
+Definitely broken in 4.3, stock Galaxy Nexus GSM \"maguro\" release `2013-09-09 12:46`
+"""]]
diff --git a/doc/bugs/git-annex_opens_too_many_files.mdwn b/doc/bugs/git-annex_opens_too_many_files.mdwn
index e1581c8f8..d5830be57 100644
--- a/doc/bugs/git-annex_opens_too_many_files.mdwn
+++ b/doc/bugs/git-annex_opens_too_many_files.mdwn
@@ -1,3 +1,5 @@
+[[!meta title="network-muticast FD leak fix not deployed to Linux autobuilds yet"]]
+
### Please describe the problem.
After running git-annex some minutes, the websites is not responsible any more and it even crashes eventually.
diff --git a/doc/bugs/git-annex_sync_may_fail_when_the_directory_I__39__m_in_disepeared.mdwn b/doc/bugs/git-annex_sync_may_fail_when_the_directory_I__39__m_in_disepeared.mdwn
index fe50125ee..7a2690be2 100644
--- a/doc/bugs/git-annex_sync_may_fail_when_the_directory_I__39__m_in_disepeared.mdwn
+++ b/doc/bugs/git-annex_sync_may_fail_when_the_directory_I__39__m_in_disepeared.mdwn
@@ -12,3 +12,4 @@ upgrade supported from repository versions: 0 1 2
on Debian Gnu Linux sid
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/git_annex_copy_trying_to_connect_to_remotes_uninvolved.mdwn b/doc/bugs/git_annex_copy_trying_to_connect_to_remotes_uninvolved.mdwn
index a8131df4d..f41a80616 100644
--- a/doc/bugs/git_annex_copy_trying_to_connect_to_remotes_uninvolved.mdwn
+++ b/doc/bugs/git_annex_copy_trying_to_connect_to_remotes_uninvolved.mdwn
@@ -23,3 +23,5 @@ I'm running git-annex 4.20130627 as shipped with debian unstable.
Jason
P.S. 192.168.1.5 is set as the HostName for one of my other remotes in my ~/.ssh/config, so this isn't _totally_ out of the blue.
+
+> [[done]]; see comment's explanation. --[[Joey]]
diff --git a/doc/bugs/git_annex_indirect_can_fail_catastrophically.mdwn b/doc/bugs/git_annex_indirect_can_fail_catastrophically.mdwn
new file mode 100644
index 000000000..852db2911
--- /dev/null
+++ b/doc/bugs/git_annex_indirect_can_fail_catastrophically.mdwn
@@ -0,0 +1,69 @@
+### Please describe the problem.
+
+I have a repo that I initialized in direct mode because i felt unconfortable with the "symlink forest" approach.
+
+Now that I prefer that, i want to switch back to indirect mode. The problem is, when I did that, I realized that some files in the repo were not writable by my user, and git annex indirect crashed, and didn't "indirect" all the files. Now the repo is in a "half-direct" state, and I seem to be unable to recover.
+
+### What steps will reproduce the problem?
+
+[[!format txt """
+git init
+git annex init
+git annex direct
+git annex add . # make sure some files are not writable by your user
+git annex indirect
+"""]]
+
+The `indirect` step will stop at the file that is not writable and will fail to move some files to `.git/annex`. And then the repo is in `indirect` mode yet some files are still not symlinks.
+
+Doing a `git annex direct` will try to commit all those nasty files into git, as it does a `git commit -a`.
+
+### What version of git-annex are you using? On what operating system?
+
+ git-annex version: 4.20130912-ga1faca3
+ build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS Feeds Quvi
+
+Debian wheezy.
+
+### Please provide any additional information below.
+
+Ideally, there would be a way to just tell git annex it's really still in direct mode and migrate the remaining files.
+
+The workaround is, obviously, to make sure you own all those files before messing around:
+
+ chown -R you *
+ chmod -R u+w *
+
+A [[patch]], maybe, that allows you to flip cleanly between the two modes:
+
+[[!format diff """
+From a21dfc97da96883b2a088bb5f3f466296f08d858 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Antoine=20Beaupr=C3=A9?= <anarcat@koumbit.org>
+Date: Mon, 16 Sep 2013 13:58:29 -0400
+Subject: [PATCH] do not commit -a when going back to direct mode
+
+without this, if we switched to indirect mode but failed doing so
+(because of a permission problem, for example), going back to
+direct mode will commit all files to git, which we really want
+to avoid.
+
+---
+ Command/Direct.hs | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/Command/Direct.hs b/Command/Direct.hs
+index 7835988..ed8ea6c 100644
+--- a/Command/Direct.hs
++++ b/Command/Direct.hs
+@@ -33,7 +33,6 @@ perform = do
+ showOutput
+ _ <- inRepo $ Git.Command.runBool
+ [ Param "commit"
+- , Param "-a"
+ , Param "-m"
+ , Param "commit before switching to direct mode"
+ ]
+--
+1.7.10.4
+
+"""]]
diff --git a/doc/bugs/immediately_drops_files/comment_4_425b79865eb77d69d0b7a71a14639f81._comment b/doc/bugs/immediately_drops_files/comment_4_425b79865eb77d69d0b7a71a14639f81._comment
new file mode 100644
index 000000000..aacf2f2dc
--- /dev/null
+++ b/doc/bugs/immediately_drops_files/comment_4_425b79865eb77d69d0b7a71a14639f81._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.2.134"
+ subject="comment 4"
+ date="2013-09-13T19:27:51Z"
+ content="""
+> both are set to manual, and both have the other set as manual as well
+
+I'm not sure what you mean by that. Do you mean that when you run git annex vicfg, it is in group manual?
+"""]]
diff --git a/doc/bugs/immediately_drops_files/comment_5_7c9f660b6bcec31827a44a650e9d4622._comment b/doc/bugs/immediately_drops_files/comment_5_7c9f660b6bcec31827a44a650e9d4622._comment
new file mode 100644
index 000000000..bb2569893
--- /dev/null
+++ b/doc/bugs/immediately_drops_files/comment_5_7c9f660b6bcec31827a44a650e9d4622._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnSenxKyE_2Z6Wb-EBMO8FciyRywjx1ZiQ"
+ nickname="Walter"
+ subject="comment 5"
+ date="2013-09-13T21:58:30Z"
+ content="""
+I had checked in the webapps, and they were all set to manual.
+
+Looking in `git annex vicfg`, the groups are set to manual, and the content is set to standard.
+"""]]
diff --git a/doc/bugs/importfeed_fails__44___bad_feed_content.mdwn b/doc/bugs/importfeed_fails__44___bad_feed_content.mdwn
index 2435e3304..4ee312be0 100644
--- a/doc/bugs/importfeed_fails__44___bad_feed_content.mdwn
+++ b/doc/bugs/importfeed_fails__44___bad_feed_content.mdwn
@@ -32,3 +32,5 @@ Saving to: ‘/tmp/feed12649’
warning: bad feed content
ok
"""]]
+
+> upstream bug <https://github.com/sof/feed/issues/5> ; [[done]] --[[Joey]]
diff --git a/doc/bugs/manpage_has_slight_indentation_error.mdwn b/doc/bugs/manpage_has_slight_indentation_error.mdwn
index fd6f5ea06..56d9d2266 100644
--- a/doc/bugs/manpage_has_slight_indentation_error.mdwn
+++ b/doc/bugs/manpage_has_slight_indentation_error.mdwn
@@ -34,3 +34,5 @@ index ba5919b..b3ee404 100755
"""]]
-- [[anarcat]]
+
+> [[applied|done]] --[[Joey]]
diff --git a/doc/bugs/merge_causes_out_of_memory_on_large_repos/comment_2_06723d13ecdaf87de5ff2b209e3c5198._comment b/doc/bugs/merge_causes_out_of_memory_on_large_repos/comment_2_06723d13ecdaf87de5ff2b209e3c5198._comment
new file mode 100644
index 000000000..76a0d2fd4
--- /dev/null
+++ b/doc/bugs/merge_causes_out_of_memory_on_large_repos/comment_2_06723d13ecdaf87de5ff2b209e3c5198._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.2.134"
+ subject="comment 2"
+ date="2013-09-13T18:38:11Z"
+ content="""
+Can you run this so I can get a better idea of the size of this repository:
+
+git ls-tree -r git-annex | wc -l
+"""]]
diff --git a/doc/bugs/unfinished_repos_in_webapp.mdwn b/doc/bugs/unfinished_repos_in_webapp.mdwn
index 17a33eee4..b3e667c61 100644
--- a/doc/bugs/unfinished_repos_in_webapp.mdwn
+++ b/doc/bugs/unfinished_repos_in_webapp.mdwn
@@ -25,3 +25,7 @@ Latest.
# End of transcript or log.
"""]]
+
+> This seems to be [[done]], at least the bug reporter didn't feel the need
+> to follow up with the info I asked for and says the problem does not
+> affect him. --[[Joey]]
diff --git a/doc/bugs/utf8.mdwn b/doc/bugs/utf8.mdwn
index 61640ec5f..73b9bd9a9 100644
--- a/doc/bugs/utf8.mdwn
+++ b/doc/bugs/utf8.mdwn
@@ -185,3 +185,8 @@ ok
# End of transcript or log.
"""]]
+
+> We seem to have reached a point of confusion, lack of information,
+> and/or diminishing returns with this bug report. I have fixed
+> it as best I can. If you have any problems, please file a new bug report
+> with as complete information as possible. [[done]] --[[Joey]]
diff --git a/doc/bugs/windows_fails_test___34__recoverEncode__34__.mdwn b/doc/bugs/windows_fails_test___34__recoverEncode__34__.mdwn
new file mode 100644
index 000000000..0413bb55d
--- /dev/null
+++ b/doc/bugs/windows_fails_test___34__recoverEncode__34__.mdwn
@@ -0,0 +1,39 @@
+### Please describe the problem.
+
+My windows install (2013-09-09) fails "quick checks" when running "git annex test". See below the errors from two seperate runs of the test in two fresh empty directories:
+
+*** Failed! Exception: 'recoverEncode: invalid argument (invalid character)' (after 13 tests):
+Key {keyName = "\140\DEL\159/\RS'", keyBackendName = "WQACSWJDVY", keySize = Just 6, keyMtime = Just 3}
+prop_idempotent_configEscape
+
+*** Failed! Exception: 'recoverEncode: invalid argument (invalid character)' (after 4 tests):
+Key {keyName = "\130", keyBackendName = "Y", keySize = Nothing, keyMtime = Nothing}
+prop_idempotent_configEscape
+
+### What steps will reproduce the problem?
+
+create a directory
+cd to it in cmd or Git Bash
+run "git annex test"
+
+
+### What version of git-annex are you using? On what operating system?
+
+OS Name: Microsoft Windows 7 Professional (64bit)
+OS Version: 6.1.7601 Service Pack 1 Build 7601
+
+Install Git-1.8.3-preview20130601 (third option to add git and tools to path)
+Install git-annex-installer (2013-09-09)
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+> I've released a fix for this problem. Thanks for reporting! [[done]]
+> --[[Joey]]
diff --git a/doc/bugs/windows_fails_test___34__recoverEncode__34__/comment_1_424b3536e21e02f192f7f2b8e833ed18._comment b/doc/bugs/windows_fails_test___34__recoverEncode__34__/comment_1_424b3536e21e02f192f7f2b8e833ed18._comment
new file mode 100644
index 000000000..e94608921
--- /dev/null
+++ b/doc/bugs/windows_fails_test___34__recoverEncode__34__/comment_1_424b3536e21e02f192f7f2b8e833ed18._comment
@@ -0,0 +1,67 @@
+[[!comment format=mdwn
+ username="gary"
+ ip="82.112.140.250"
+ subject="Thanks for the fix"
+ date="2013-09-12T07:20:12Z"
+ content="""
+Hi the fix works fine, all the tests pass now. However I am having issues when trying to sync two directories. I have had this working in direct mode in fedora but not in the previously mentioned windows install
+
+2 directories d1 and d2.
+
+SETUP:
+
+cd d1
+
+mkdir annex
+
+cd annex
+
+cp someFile . (as get branch issue if empty)
+
+git init
+
+git annex init d1
+
+cp someFile . (as get branch issue if empty)
+
+git annex add .
+
+git annex sync
+
+cd ..\..\d2
+
+git clone ..\..\d1\annex
+
+cd annex
+
+git annex init d2
+
+git remote add d1 ..\..\d1\annex
+
+cd ..\..\d1\annex
+
+git remote add d2 ..\..\d2\annex
+
+
+SYNCING
+
+cd d1\annex
+
+cp someFiles .
+
+git annex add .
+
+git annex sync
+
+cd ..\..\d2\annex
+
+git annex sync
+
+git annex mirror --from d1
+
+It looks like the files copy across but when I look at them in explorer they are still just the place holders.
+
+any ideas on what may be going on. Does the work flow look correct?
+
+(ps typo on all slashes but
+"""]]
diff --git a/doc/bugs/windows_fails_test___34__recoverEncode__34__/comment_2_78db183aa401e2023d7faec5f7a4a573._comment b/doc/bugs/windows_fails_test___34__recoverEncode__34__/comment_2_78db183aa401e2023d7faec5f7a4a573._comment
new file mode 100644
index 000000000..f186a0d81
--- /dev/null
+++ b/doc/bugs/windows_fails_test___34__recoverEncode__34__/comment_2_78db183aa401e2023d7faec5f7a4a573._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.2.134"
+ subject="comment 2"
+ date="2013-09-13T17:04:26Z"
+ content="""
+That is an unrelated bug. You got very lucky that I saw your followup comment.
+
+I was able to reproduce it, and found bug in git annex fsck that prevented it from finding and fixing this problem on Windows. Am still investigating why the problem occurs in the first place..
+"""]]
diff --git a/doc/bugs/windows_fails_test___34__recoverEncode__34__/comment_3_ed2da19eaf0bd0864f6b28816a79bc23._comment b/doc/bugs/windows_fails_test___34__recoverEncode__34__/comment_3_ed2da19eaf0bd0864f6b28816a79bc23._comment
new file mode 100644
index 000000000..a8f7c0a02
--- /dev/null
+++ b/doc/bugs/windows_fails_test___34__recoverEncode__34__/comment_3_ed2da19eaf0bd0864f6b28816a79bc23._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.2.134"
+ subject="comment 3"
+ date="2013-09-13T17:44:04Z"
+ content="""
+I have now diagnosed and fixed the underlying problem on Windows.
+"""]]
diff --git a/doc/bugs/youtube_support_suddenly_stopped_working.mdwn b/doc/bugs/youtube_support_suddenly_stopped_working.mdwn
new file mode 100644
index 000000000..bedda7674
--- /dev/null
+++ b/doc/bugs/youtube_support_suddenly_stopped_working.mdwn
@@ -0,0 +1,62 @@
+### Please describe the problem.
+
+[[This|design/assistant/blog/day_314__quvi/]] says that I can download youtube videos with git-annex, but I can't - it downloads the HTML of the page instead!
+
+### What steps will reproduce the problem?
+
+ git annex addurl http://www.youtube.com/watch?v=BTzNLhxPzjo
+
+Should have downloaded a Bill Hicks video, instead it downloads the HTML.
+
+### What version of git-annex are you using? On what operating system?
+
+[[!format txt """
+git-annex version: 4.20130912-ga1faca3
+build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS Feeds Quvi
+local repository version: 3
+default repository version: 3
+supported repository versions: 3 4
+upgrade supported from repository versions: 0 1 2
+"""]]
+
+Note that quvi is still capable of fetching that video, no problem there.
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+anarcat@marcos:clips$ git annex addurl http://www.youtube.com/watch?v=BTzNLhxPzjo
+addurl www.youtube.com_watch_v=BTzNLhxPzjo ok
+anarcat@marcos:clips$ file www.youtube.com_watch_v\=BTzNLhxPzjo
+www.youtube.com_watch_v=BTzNLhxPzjo: broken symbolic link to `.git/annex/objects/qZ/q1/SHA256E-s123162--96fe8634aaf035373077473ac2b166c5ad22bfe099112c414eee9fe753f4ce2b/SHA256E-s123162--96fe8634aaf035373077473ac2b166c5ad22bfe099112c414eee9fe753f4ce2b'
+anarcat@marcos:clips$ file www.youtube.com_watch_v\=BTzNLhxPzjo ^C
+anarcat@marcos:clips$ file .git/annex/objects/qZ/q1/SHA256E-s123162--96fe8634aaf035373077473ac2b166c5ad22bfe099112c414eee9fe753f4ce2b/SHA256E-s123162--96fe8634aaf035373077473ac2b166c5ad22bfe099112c414eee9fe753f4ce2b
+.git/annex/objects/qZ/q1/SHA256E-s123162--96fe8634aaf035373077473ac2b166c5ad22bfe099112c414eee9fe753f4ce2b/SHA256E-s123162--96fe8634aaf035373077473ac2b166c5ad22bfe099112c414eee9fe753f4ce2b: ERROR: cannot open `.git/annex/objects/qZ/q1/SHA256E-s123162--96fe8634aaf035373077473ac2b166c5ad22bfe099112c414eee9fe753f4ce2b/SHA256E-s123162--96fe8634aaf035373077473ac2b166c5ad22bfe099112c414eee9fe753f4ce2b' (No such file or directory)
+anarcat@marcos:clips$ git annex get www.youtube.com_watch_v\=BTzNLhxPzjo
+get www.youtube.com_watch_v=BTzNLhxPzjo (from web...)
+--2013-09-14 17:24:23-- http://www.youtube.com/watch?v=BTzNLhxPzjo
+Résolution de www.youtube.com (www.youtube.com)... 173.194.43.96, 173.194.43.97, 173.194.43.98, ...
+Connexion vers www.youtube.com (www.youtube.com)|173.194.43.96|:80...connecté.
+requête HTTP transmise, en attente de la réponse...200 OK
+Longueur: non spécifié [text/html]
+Sauvegarde en : «/srv/video/clips/.git/annex/tmp/SHA256E-s123162--96fe8634aaf035373077473ac2b166c5ad22bfe099112c414eee9fe753f4ce2b»
+
+ [ <=> ] 123 245 346K/s ds 0,3s
+
+2013-09-14 17:24:23 (346 KB/s) - «/srv/video/clips/.git/annex/tmp/SHA256E-s123162--96fe8634aaf035373077473ac2b166c5ad22bfe099112c414eee9fe753f4ce2b» sauvegardé [123245]
+
+ok
+(Recording state in git...)
+anarcat@marcos:clips$ file www.youtube.com_watch_v\=BTzNLhxPzjo
+www.youtube.com_watch_v=BTzNLhxPzjo: symbolic link to `.git/annex/objects/qZ/q1/SHA256E-s123162--96fe8634aaf035373077473ac2b166c5ad22bfe099112c414eee9fe753f4ce2b/SHA256E-s123162--96fe8634aaf035373077473ac2b166c5ad22bfe099112c414eee9fe753f4ce2b'
+anarcat@marcos:clips$ file .git/annex/objects/qZ/q1/SHA256E-s123162--96fe8634aaf035373077473ac2b166c5ad22bfe099112c414eee9fe753f4ce2b/SHA256E-s123162--96fe8634aaf035373077473ac2b166c5ad22bfe099112c414eee9fe753f4ce2b
+.git/annex/objects/qZ/q1/SHA256E-s123162--96fe8634aaf035373077473ac2b166c5ad22bfe099112c414eee9fe753f4ce2b/SHA256E-s123162--96fe8634aaf035373077473ac2b166c5ad22bfe099112c414eee9fe753f4ce2b: HTML document, UTF-8 Unicode text, with very long lines
+# End of transcript or log.
+"""]]
+
+### Workaround
+
+Use the `quvi` prefix.
+
+> Typo introduced in last release. [[fixed|done]] --[[Joey]]
diff --git a/doc/builds.mdwn b/doc/builds.mdwn
new file mode 100644
index 000000000..b6ada2bc2
--- /dev/null
+++ b/doc/builds.mdwn
@@ -0,0 +1,20 @@
+[[!meta title="git-annex autobuild overview"]]
+
+<h2>Linux i386</h2>
+<iframe width=1024 scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://downloads.kitenet.net/git-annex/autobuild/i386/">
+</iframe>
+<h2>Linux amd64</h2>
+<iframe width=1024 scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://downloads.kitenet.net/git-annex/autobuild/amd64/">
+</iframe>
+<h2>Android</h2>
+<iframe width=1024 scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://downloads.kitenet.net/git-annex/autobuild/android/">
+</iframe>
+<h2>OSX Mountain Lion</h2>
+<iframe width=1024 scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://downloads.kitenet.net/git-annex/autobuild/x86_64-apple-mountain-lion/">
+</iframe>
+<h2>OSX Lion</h2>
+<iframe width=1024 scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="http://www.sgenomics.org/~jtang/gitbuilder-git-annex-x00-x86_64-apple-darwin10.8.0-binary/">
+</iframe>
+<h2>Windows</h2>
+<iframe width=1024 height=1024 scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://qa.nest-initiative.org/view/msysGit/job/msysgit-git-annex-assistant-test/">
+</iframe>
diff --git a/doc/contact/comment_2_95b6d868b913418de50ba121d71d2390._comment b/doc/contact/comment_2_95b6d868b913418de50ba121d71d2390._comment
new file mode 100644
index 000000000..6f451d9ae
--- /dev/null
+++ b/doc/contact/comment_2_95b6d868b913418de50ba121d71d2390._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.4.51"
+ subject="comment 2"
+ date="2013-09-12T21:08:16Z"
+ content="""
+I welcome translations in theory, but I do not have any infrastructure in place to support it, so that would have to be the first step.
+
+(Also, this page is not a general-purpose discussion forum.)
+"""]]
diff --git a/doc/design/assistant/blog/day_18__merging/comment_1_7a553ad559519f3b3e3cd20115b4c44e._comment b/doc/design/assistant/blog/day_18__merging/comment_1_7a553ad559519f3b3e3cd20115b4c44e._comment
new file mode 100644
index 000000000..94261f81e
--- /dev/null
+++ b/doc/design/assistant/blog/day_18__merging/comment_1_7a553ad559519f3b3e3cd20115b4c44e._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="http://droggl.myopenid.com/"
+ ip="2001:638:602:1181:a6ba:dbff:fedd:8041"
+ subject="comment 1"
+ date="2013-09-11T11:55:27Z"
+ content="""
+Nice!
+However I didnt find any documentation yet on how to actually resolve the situation as a user (sorry if I'm being blind).
+To be more specific: Say a conflict occurs on foo.txt and i now have two files foo.variant-dead.txt and foo.variant-beef.txt.
+Now what? Say I used my favorite merge diffmerge tool to create a merged version foo-merged.txt, should I rename that to foo.txt?
+Should I delete the variant files? Or drop them? Or would that lead to another merge for systems that still have the old foo.txt?
+(You see I'm kind of confused of what happens here ;))
+
+TIA for any helpers
+"""]]
diff --git a/doc/design/assistant/gpgkeys.mdwn b/doc/design/assistant/gpgkeys.mdwn
index 582082f2e..e3f2a3a93 100644
--- a/doc/design/assistant/gpgkeys.mdwn
+++ b/doc/design/assistant/gpgkeys.mdwn
@@ -2,7 +2,7 @@ Currently the assistant sets up a shared encryption key, which is checked
into git, so anyone who gets the repository can decrypt files that are
stored encrypted on special remotes.
-To support using gpg keys in the assistant, we need two things:
+To support using gpg keys in the assistant, we need some things:
1. Help user set up a gpg key if they don't have one. This could be a
special-purpose key dedicated to being used by git-annex. It might be
@@ -11,10 +11,23 @@ To support using gpg keys in the assistant, we need two things:
webapp. Indeed, the password prompt is the main problem here.
Best solution would be to get gpg agent working on all supported
platforms.
-2. Help user learn the gpg keys of people they want to share their repo
+
+ Update: For now, git-annex only assists in generating gpg keys that are
+ intended to only be used to encrypt a repo.
+
+2. After generating a gpg key, back it up. It might be the only way
+ some data is accessible.
+
+ One way I'm considering is generating a QR code
+ of the key, which could be printed to paper. Preliminary results
+ are good; a 4096 bit secret key fits in a QR code (a secret key
+ with many subkeys may not). Debian has command-line utilities that
+ can generate and read such a QR code.
+
+3. Help user learn the gpg keys of people they want to share their repo
with, and give them access. If the public key was recorded in the git-annex
branch, this could be easily determined when sharing repositories with
- friends. Or, use MonkeySphere..
+ friends. Or, use MonkeySphere, or Monkeysign..
-----
diff --git a/doc/design/assistant/polls/Android_default_directory.mdwn b/doc/design/assistant/polls/Android_default_directory.mdwn
index 2474fd139..5e18ff8b4 100644
--- a/doc/design/assistant/polls/Android_default_directory.mdwn
+++ b/doc/design/assistant/polls/Android_default_directory.mdwn
@@ -4,4 +4,4 @@ Same as the desktop webapp, users will be able to enter a directory they
want the first time they run it, but to save typing on android, anything
that gets enough votes will be included in a list of choices as well.
-[[!poll open=yes expandable=yes 58 "/sdcard/annex" 5 "Whole /sdcard" 4 "DCIM directory (photos and videos only)" 1 "Same as for regular git-annex. ~/annex/"]]
+[[!poll open=yes expandable=yes 59 "/sdcard/annex" 6 "Whole /sdcard" 4 "DCIM directory (photos and videos only)" 1 "Same as for regular git-annex. ~/annex/"]]
diff --git a/doc/devblog/day_10__lazy_Sunday.mdwn b/doc/devblog/day_10__lazy_Sunday.mdwn
new file mode 100644
index 000000000..aa6a70918
--- /dev/null
+++ b/doc/devblog/day_10__lazy_Sunday.mdwn
@@ -0,0 +1,23 @@
+Fixed a typo that broke automatic youtube video support in `addurl`.
+
+----
+
+Now there's an easy way to get an overview of how close your repository
+is to meeting the configured numcopies settings (or when it exceeds them).
+
+<pre>
+# time git annex status .
+[...]
+numcopies stats:
+ numcopies +0: 6686
+ numcopies +1: 3793
+ numcopies +3: 3156
+ numcopies +2: 2743
+ numcopies -1: 1242
+ numcopies -4: 1098
+ numcopies -3: 1009
+ numcopies +4: 372
+</pre>
+
+This does make `git annex status` slow when run on a large directory tree,
+so --fast disables that.
diff --git a/doc/devblog/day_11__webapp_encrypted_drives.mdwn b/doc/devblog/day_11__webapp_encrypted_drives.mdwn
new file mode 100644
index 000000000..677c02491
--- /dev/null
+++ b/doc/devblog/day_11__webapp_encrypted_drives.mdwn
@@ -0,0 +1,12 @@
+Now the webapp can set up encrypted repositories on removable drives.
+
+[[assistant/encryptdrive.png]]
+
+This UI needs some work, and the button to create a new key is not wired
+up. Also if you have no gpg agent installed, there will be lots of password
+prompts at the console.
+
+Forked git-remote-gcrypt to fix a bug. Hopefully my patch will be merged;
+for now I recommend installing my worked version.
+
+Today's work was sponsored by Romain Lenglet.
diff --git a/doc/devblog/day_12__gpg_key_generation.mdwn b/doc/devblog/day_12__gpg_key_generation.mdwn
new file mode 100644
index 000000000..c79c49f85
--- /dev/null
+++ b/doc/devblog/day_12__gpg_key_generation.mdwn
@@ -0,0 +1,35 @@
+I decided to keep gpg key generation very simple for now. So it generates a
+special-purpose key that is only intended to be used by git-annex. It
+hardcodes some key parameters, like RSA and 4096 bits (maximum recommended
+by gpg at this time). And there is no password on the key, although you can
+of course edit it and set one. This is because anyone who can access the
+computer to get the key can also look at the files in your git-annex
+repository. Also because I can't rely on gpg-agent being installed
+everywhere. All these simplifying assumptions may be revisited later, but
+are enough for now for someone who doesn't know about gpg (so doesn't
+have a key already) and just wants an encrypted repo on a
+removable drive.
+
+Put together a simple UI to deal with gpg taking quite a while to
+generate a key ...
+
+[[assistant/genkey.png]]
+
+[[assistant/repoinfo.png]]
+
+Then I had to patch git-remote-gcrypt again, to have a per-remote
+signingkey setting, so that these special-purpose keys get used for signing
+their repo.
+
+Next, need to add support for adding an existing gcrypt repo as a remote
+(assuming it's encrypted to an available key). Then, gcrypt repos on ssh
+servers..
+
+----
+
+Also dealt with build breakage caused by a new version of the Haskell DNS
+library.
+
+----
+
+Today's work was sponsored by Joseph Liu.
diff --git a/doc/devblog/day_12__gpg_key_generation/comment_1_48cdfe3bd71fb348ae05fd90e8cf1dab._comment b/doc/devblog/day_12__gpg_key_generation/comment_1_48cdfe3bd71fb348ae05fd90e8cf1dab._comment
new file mode 100644
index 000000000..d7a6a8631
--- /dev/null
+++ b/doc/devblog/day_12__gpg_key_generation/comment_1_48cdfe3bd71fb348ae05fd90e8cf1dab._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://nullroute.eu.org/~grawity/"
+ nickname="Mantas"
+ subject="comment 1"
+ date="2013-09-18T05:00:12Z"
+ content="""
+Should be \"PGP\" or *at least* \"GnuPG\".
+"""]]
diff --git a/doc/devblog/day_13__encrypted_sneakernet_working.mdwn b/doc/devblog/day_13__encrypted_sneakernet_working.mdwn
new file mode 100644
index 000000000..777da255a
--- /dev/null
+++ b/doc/devblog/day_13__encrypted_sneakernet_working.mdwn
@@ -0,0 +1,13 @@
+Spent basically all of today getting the assistant to be able to handle
+gcrypt special remotes that already exist when it's told to add a USB
+drive. This was quite tricky! And I did have to skip handling gcrypt repos
+that are not git-annex special remotes.
+
+Anyway, it's now almost easy to set up an encrypted sneakernet
+using a USB drive and some computers running the webapp. The only part
+that the assistant doesn't help with is gpg key management.
+
+Plan is to make a release on Friday, and then try to also add support for
+encrypted git repositories on remote servers. Tomorrow I will try to get
+through some of the communications backlog that has been piling up while I
+was head down working on gcrypt.
diff --git a/doc/devblog/day_6__gcrypt_fully_working/comment_1_136bb7537a9ba93d400ce6f6ea1932ac._comment b/doc/devblog/day_6__gcrypt_fully_working/comment_1_136bb7537a9ba93d400ce6f6ea1932ac._comment
new file mode 100644
index 000000000..adb298fd3
--- /dev/null
+++ b/doc/devblog/day_6__gcrypt_fully_working/comment_1_136bb7537a9ba93d400ce6f6ea1932ac._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ ip="82.36.235.9"
+ subject="Converting an rsync special remote to a gcrypt special remote"
+ date="2013-09-11T17:36:09Z"
+ content="""
+I'm guessing there is no way to convert an rsync special remote to a gcrypt special remote? It would be cool not to have to upload 100GB across the Atlantic again!
+"""]]
diff --git a/doc/devblog/day_6__gcrypt_fully_working/comment_2_1f8faa65bbd56a12588b43a5bc822d96._comment b/doc/devblog/day_6__gcrypt_fully_working/comment_2_1f8faa65bbd56a12588b43a5bc822d96._comment
new file mode 100644
index 000000000..a6859cf2f
--- /dev/null
+++ b/doc/devblog/day_6__gcrypt_fully_working/comment_2_1f8faa65bbd56a12588b43a5bc822d96._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.4.51"
+ subject="comment 2"
+ date="2013-09-12T16:53:02Z"
+ content="""
+Well, rsync and gcrypt use the same locations for annexed content, so it's theoretically possible.
+
+However, it seems a lot easier to just add a gcrypt remote and let git-annex use the existing rsync remote for the content that is already stored in it.
+"""]]
diff --git a/doc/devblog/day_8__ill.mdwn b/doc/devblog/day_8__ill.mdwn
new file mode 100644
index 000000000..c086a9dc1
--- /dev/null
+++ b/doc/devblog/day_8__ill.mdwn
@@ -0,0 +1,20 @@
+I've been out sick. However, some things kept happening. Mesar contributed
+a build host, and the linux and android builds are now happening, hourly,
+there. (Thanks as well to the two other people who also offered hostng.)
+And I made a minor release to fix a bug in the test suite that I was pleased
+three different people reported.
+
+Today, my main work was getting git-annex to notice when a gcrypt remote
+located on some removable drive mount point is not the same gcrypt remote
+that was mounted there before. I was able to finesse this so it
+re-configures things to use the new gcrypt remote, as long as it's a
+special remote it knows about. (Otherwise it has to ignore the remote.)
+So, encrypted repos on removable drives will work just as well as
+non-encrypted repos!
+
+Also spent a while with rsync.net tech support trying to work out why
+someone's git-annex apparently opened a lot of concurrent ssh connections
+to rsync.net. Have not been able to reproduce the problem though.
+
+Also, a lot of catch-up to traffic. Still 63 messages backlogged however,
+and still not entirely well..
diff --git a/doc/devblog/day_9__Friday_the_13th.mdwn b/doc/devblog/day_9__Friday_the_13th.mdwn
new file mode 100644
index 000000000..b8fe4bc19
--- /dev/null
+++ b/doc/devblog/day_9__Friday_the_13th.mdwn
@@ -0,0 +1,21 @@
+Worked to get git-remote-gcrypt included in every git-annex autobuild
+bundle.
+(Except Windows; running a shell script there may need some work later..)
+
+Next I want to work on making the assistant easily able to create encrypted
+git repositories on removable drives. Which will involve a UI to select
+which gpg key to use, or creating (and backing up!) a gpg key.
+
+But, I got distracted chasing down some bugs on Windows. These were
+quite ugly; more direct mode mapping breakage which resulted in
+files not being accessible. Also fsck on Windows failed to detect and fix
+the problem. All fixed now. (If you use git-annex on Windows, you should
+certianly upgrade and run `git annex fsck`.)
+
+As with most bugs in the Windows port, the underlying cause turned out to
+be stupid: `isSymlink` always returned False on Windows. Which makes sense
+from the perspective of Windows not quite having anything entirely like
+symlinks. But failed when that was being used to detect when files in the
+git tree being merged into the repository had the symlink bit set..
+
+Did bug triage. Backlog down to 32 (mostly messages from August).
diff --git a/doc/devblog/day_9__Friday_the_13th/comment_1_07195b4ec399ba1be6c8bdb3ae0fa50b._comment b/doc/devblog/day_9__Friday_the_13th/comment_1_07195b4ec399ba1be6c8bdb3ae0fa50b._comment
new file mode 100644
index 000000000..aff4dc264
--- /dev/null
+++ b/doc/devblog/day_9__Friday_the_13th/comment_1_07195b4ec399ba1be6c8bdb3ae0fa50b._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://nullroute.eu.org/~grawity/"
+ nickname="Mantas"
+ subject="comment 1"
+ date="2013-09-13T22:05:37Z"
+ content="""
+Windows *does* have something very much like symlinks – they're called *symlinks* (\"symbolic links\") and they are meant to [\"function just like UNIX links\"][1] as the official docs say.
+
+But on the other hand, yes – `isSymlink` makes less sense on Windows, because symlinks are just a type of reparse points, and there may be several other types (e.g. directory junctions should also be treated like symlinks, but mount points shouldn't...)
+
+[1]: http://msdn.microsoft.com/en-us/library/windows/desktop/aa365680(v=vs.85).aspx
+"""]]
diff --git a/doc/forum/Annex_dropping_files/comment_1_62fbea95248fda2ff075b5a8952a728f._comment b/doc/forum/Annex_dropping_files/comment_1_62fbea95248fda2ff075b5a8952a728f._comment
new file mode 100644
index 000000000..3844d3f0d
--- /dev/null
+++ b/doc/forum/Annex_dropping_files/comment_1_62fbea95248fda2ff075b5a8952a728f._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.4.51"
+ subject="comment 1"
+ date="2013-09-12T21:01:03Z"
+ content="""
+If you have just created repository D and have just copied some files to it, then it will only contain those files, and not old deleted files or old versions of files. You can run `git annex copy --all --to D` to copy all those files to D, although if you're only wanting to dropunused them, there is not much point in that..
+"""]]
diff --git a/doc/forum/Forcing_one_repo_to_contain_a_copy_of_all_files.mdwn b/doc/forum/Forcing_one_repo_to_contain_a_copy_of_all_files.mdwn
new file mode 100644
index 000000000..827383f9f
--- /dev/null
+++ b/doc/forum/Forcing_one_repo_to_contain_a_copy_of_all_files.mdwn
@@ -0,0 +1 @@
+With numcopies it is possible to control how many copies there should be of a file overall in all of the remotes. Is it also possible, using .gitattributes or something else, to force one of the repos (e.g. a server) to contain a copy of all files, or does this have to be done manually?
diff --git a/doc/forum/Forcing_one_repo_to_contain_a_copy_of_all_files/comment_1_702b1b94c735f1b9cde16daa77a80c12._comment b/doc/forum/Forcing_one_repo_to_contain_a_copy_of_all_files/comment_1_702b1b94c735f1b9cde16daa77a80c12._comment
new file mode 100644
index 000000000..d964a253b
--- /dev/null
+++ b/doc/forum/Forcing_one_repo_to_contain_a_copy_of_all_files/comment_1_702b1b94c735f1b9cde16daa77a80c12._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://edheil.wordpress.com/"
+ ip="99.54.57.201"
+ subject="comment 1"
+ date="2013-09-14T20:36:53Z"
+ content="""
+That is what the \"backup\" preferred content group is for. Depending on how your repos connect to each other it might take some more trickery to make all content migrate to it, but that will make it \"want\" all the files if it can get them.
+"""]]
diff --git a/doc/forum/Git_annex_on_Windows/comment_4_b9232deab6bc5036d7339aa202013218._comment b/doc/forum/Git_annex_on_Windows/comment_4_b9232deab6bc5036d7339aa202013218._comment
new file mode 100644
index 000000000..6fd2f8c3d
--- /dev/null
+++ b/doc/forum/Git_annex_on_Windows/comment_4_b9232deab6bc5036d7339aa202013218._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.4.51"
+ subject="comment 4"
+ date="2013-09-12T20:58:30Z"
+ content="""
+Once `git annex get` has downloaded the file, it will replace the symlink with the contents of the file.
+
+If that is not happening, you might try running `git annex fsck`
+
+
+"""]]
diff --git a/doc/forum/Git_annex_on_Windows/comment_5_27af3c431b50b540d2bd1d3af3f21080._comment b/doc/forum/Git_annex_on_Windows/comment_5_27af3c431b50b540d2bd1d3af3f21080._comment
new file mode 100644
index 000000000..5db96f08e
--- /dev/null
+++ b/doc/forum/Git_annex_on_Windows/comment_5_27af3c431b50b540d2bd1d3af3f21080._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.2.134"
+ subject="comment 5"
+ date="2013-09-13T18:03:17Z"
+ content="""
+Turns out that there was a bug in the Windows port that could lead to the behavior described, and another bug that prevented `git annex fsck` from fixing it. I have fixed both bugs, so you should upgrade and then run `git annex fsck`.
+"""]]
diff --git a/doc/forum/Links_or_actual_files__63___Confused__33__.mdwn b/doc/forum/Links_or_actual_files__63___Confused__33__.mdwn
new file mode 100644
index 000000000..8d7ef2c17
--- /dev/null
+++ b/doc/forum/Links_or_actual_files__63___Confused__33__.mdwn
@@ -0,0 +1,21 @@
+I don't think it's a bug or a todo, just a request for clarification.
+
+So, I installed git-annex first on a Mac, and created the initial repository, and started dropping stuff into it. All fine.
+
+Created a second repository on an external (but never disconnected, also does Time Machine) drive. All fine. Everything's there.
+
+Went across the room to my Linux desktop, installed git-annex, and tried to pair it to my Mac's git-annex repo. Hit <a href="http://git-annex.branchable.com/bugs/bad_comment_in_ssh_public_key_ssh-rsa/#comment-0ee00f307909723fdf8c73695787f067">this bug</a>, installed latest git-annex from tarball and got past that and got the pairing done. Syncing happened, all looked well...
+
+But when I look in the annex dir on that Linux machine, I now just see symlinks to the actual files in the repo's .git/annex stuff. It kinda works, but it's a bit distracting, especially if you open such a file in any desktop app and you can see it's got the target of the link (some sha-value filename.ext) rather than the sensibly-named link. Including files created and coped into that annex on that machine. (In Nautilus they all show with symlink & lock emblems.)
+
+Look again at some documentation, and apparently it's <a href="http://git-annex.branchable.com/how_it_works/">supposed to do this</a>
+
+Which makes me wonder why it *isn't* doing it on the Mac I started the repository on?
+
+Went to another mac (laptop) and installed git-annex, and set up pairing to the first mac - as far as I can tell, doing the exact same procedure as I did under Linux. TBH through the webapp there's not much scope for doing it a different way. Files sync across...
+
+And there they are, the actual files, directly in the annex dir, not symlinks.
+
+(I am by the way confirming this at the commandline, it's not just what Finder/Nautilus may be displaying to me graphically.)
+
+Now, seeing the actual files in the annex directory is what I *prefer*; but I'm a: confused as to why the Macs are doing it that way but Linux isn't, and b: given the "how it works" link, why everything isn't using the links.
diff --git a/doc/forum/Links_or_actual_files__63___Confused__33__/comment_1_779cee2448d7070b1dd636d01296c01e._comment b/doc/forum/Links_or_actual_files__63___Confused__33__/comment_1_779cee2448d7070b1dd636d01296c01e._comment
new file mode 100644
index 000000000..0122cf45b
--- /dev/null
+++ b/doc/forum/Links_or_actual_files__63___Confused__33__/comment_1_779cee2448d7070b1dd636d01296c01e._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.4.51"
+ subject="comment 1"
+ date="2013-09-12T17:58:24Z"
+ content="""
+When you create a git-annex repository using the webapp, it uses [[direct_mode]]. That is not the default if you create a repository by hand at the command line, although you can enable it if you prefer it.
+"""]]
diff --git a/doc/forum/Links_or_actual_files__63___Confused__33__/comment_2_bccda88697ab7beec0b9fe9ee0230688._comment b/doc/forum/Links_or_actual_files__63___Confused__33__/comment_2_bccda88697ab7beec0b9fe9ee0230688._comment
new file mode 100644
index 000000000..c6a851eff
--- /dev/null
+++ b/doc/forum/Links_or_actual_files__63___Confused__33__/comment_2_bccda88697ab7beec0b9fe9ee0230688._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlEhzszkzOIy8-Rx8b2mcr75QcnIc6O_OA"
+ nickname="Rachel"
+ subject="webapp/direct"
+ date="2013-09-12T18:17:51Z"
+ content="""
+well, i did it using the webapp both times; i've barely scratched at the git-annex commandline so far.
+
+However... I then tried to repeat it on another linux box (running ubuntu saucy and the version of git-annex in that repo) and it worked as expected: Real files in the annex directory, ie: as I understand it, direct mode.
+
+So, went back to the first linux box (running ubuntu raring), and cleared everything off, quit and started again, doing the same thing again, and *it* did the direct mode thing itself this time.
+
+Which I think leaves me with it the way I want it. :-)
+
+My only guess is, maybe it got set up in non-direct mode when I first started using the older git-annex in the raring repos, before failing with the bad comment in ssh public key bug, at which point I switched to the downloaded-today tarball and just tried to resume. Starting from scratch with the newer version worked.
+
+I'm sure more questions to come later; am a Dropbox fugitive by way of ownCloud (won't-fix bug on version upgrades) basically trying to replicate that kind of convenience. But those are for other postings.
+"""]]
diff --git a/doc/forum/Links_or_actual_files__63___Confused__33__/comment_3_c2a9da3f03b55ff294dc0d2010380119._comment b/doc/forum/Links_or_actual_files__63___Confused__33__/comment_3_c2a9da3f03b55ff294dc0d2010380119._comment
new file mode 100644
index 000000000..5df67c605
--- /dev/null
+++ b/doc/forum/Links_or_actual_files__63___Confused__33__/comment_3_c2a9da3f03b55ff294dc0d2010380119._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.4.51"
+ subject="comment 3"
+ date="2013-09-12T20:22:44Z"
+ content="""
+Yep, relatively ancient (from last year) versions of the webapp didn't use direct mode by default, and have various bugs as well.
+"""]]
diff --git a/doc/forum/My_first_impressions_after_some_weeks_with_git-annex_assistant/comment_2_109534a45881ce94a4586c8a83945f9f._comment b/doc/forum/My_first_impressions_after_some_weeks_with_git-annex_assistant/comment_2_109534a45881ce94a4586c8a83945f9f._comment
new file mode 100644
index 000000000..33b2aa393
--- /dev/null
+++ b/doc/forum/My_first_impressions_after_some_weeks_with_git-annex_assistant/comment_2_109534a45881ce94a4586c8a83945f9f._comment
@@ -0,0 +1,85 @@
+[[!comment format=mdwn
+ username="EmanueleAina"
+ ip="93.38.211.231"
+ subject="comment 2"
+ date="2013-09-11T17:55:14Z"
+ content="""
+I seem to hit the same issue (`ResponseTimeout`) on box.com, but I don't have any log file under .git/annex.
+
+The timeout is quite unpredictable, sometimes I'm able to transfer less than 20% of the file while sometimes it fails after reaching 51%. The file is quite big, 6.2G.
+
+Unfortunately, after the first upload fails, `git-annex` seems to think that the file has been uploaded successfully and will refuse to copy it again. Even `whereis` will list the box.com location.
+
+I think there are really two bugs: the one triggering the timeouts, and the fact that `git-annex` thinks that the failing upload succeeded and is unable to recover the interrupted upload.
+
+Here's the log I got on the shell. Let me know how I can provide any additional information needed. Thanks!
+
+ $ git annex copy --verbose --debug home.tar.gz --to box.com
+ [2013-09-11 17:42:52 CEST] read: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"show-ref\",\"git-annex\"]
+ [2013-09-11 17:42:52 CEST] read: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+ [2013-09-11 17:42:52 CEST] read: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"log\",\"refs/heads/git-annex..1e029f92c5c82b094cbe70b55927996c31579e2e\",\"--oneline\",\"-n1\"]
+ [2013-09-11 17:42:52 CEST] read: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"log\",\"refs/heads/git-annex..1090c21b121fd8b6e2ab49a772c8eab5235a3930\",\"--oneline\",\"-n1\"]
+ [2013-09-11 17:42:52 CEST] chat: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"cat-file\",\"--batch\"]
+ [2013-09-11 17:42:52 CEST] read: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"ls-files\",\"--cached\",\"-z\",\"--\",\"home.tar.gz\"]
+ copy home.tar.gz (gpg) [2013-09-11 17:42:52 CEST] chat: gpg [\"--quiet\",\"--trust-model\",\"always\",\"--decrypt\"]
+ (checking box.com...) (to box.com...)
+ [2013-09-11 17:42:57 CEST] chat: gpg [\"--quiet\",\"--trust-model\",\"always\",\"--batch\",\"--passphrase-fd\",\"11\",\"--symmetric\",\"--force-mdc\",\"--no-textmode\"]
+ 35% 660.8KB/s 1h44mResponseTimeout
+ gpg: [stdout]: write error: Broken pipe
+ gpg: DBG: deflate: iobuf_write failed
+ gpg: build_packet failed: file write error
+ gpg: [stdout]: write error: Broken pipe
+ gpg: iobuf_flush failed on close: file write error
+ gpg: [stdout]: write error: Broken pipe
+ gpg: iobuf_flush failed on close: file write error
+ gpg: symmetric encryption of `[stdin]' failed: file write error
+ git-annex: fd:13: hPutBuf: resource vanished (Broken pipe)
+ failed
+ git-annex: copy: 1 failed
+ $ git annex copy --verbose --debug home.tar.gz --to box.com
+ [2013-09-11 19:38:26 CEST] read: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"show-ref\",\"git-annex\"]
+ [2013-09-11 19:38:26 CEST] read: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+ [2013-09-11 19:38:26 CEST] read: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"log\",\"refs/heads/git-annex..1e029f92c5c82b094cbe70b55927996c31579e2e\",\"--oneline\",\"-n1\"]
+ [2013-09-11 19:38:26 CEST] read: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"log\",\"refs/heads/git-annex..1090c21b121fd8b6e2ab49a772c8eab5235a3930\",\"--oneline\",\"-n1\"]
+ [2013-09-11 19:38:26 CEST] chat: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"cat-file\",\"--batch\"]
+ [2013-09-11 19:38:26 CEST] read: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"ls-files\",\"--cached\",\"-z\",\"--\",\"home.tar.gz\"]
+ copy home.tar.gz (gpg) [2013-09-11 19:38:26 CEST] chat: gpg [\"--quiet\",\"--trust-model\",\"always\",\"--decrypt\"]
+ (checking box.com...) ok
+ $ git annex whereis --verbose --debug home.tar.gz
+ [2013-09-11 19:38:57 CEST] read: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"show-ref\",\"git-annex\"]
+ [2013-09-11 19:38:57 CEST] read: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+ [2013-09-11 19:38:57 CEST] read: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"log\",\"refs/heads/git-annex..1e029f92c5c82b094cbe70b55927996c31579e2e\",\"--oneline\",\"-n1\"]
+ [2013-09-11 19:38:57 CEST] read: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"log\",\"refs/heads/git-annex..1090c21b121fd8b6e2ab49a772c8eab5235a3930\",\"--oneline\",\"-n1\"]
+ [2013-09-11 19:38:57 CEST] chat: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"cat-file\",\"--batch\"]
+ [2013-09-11 19:38:57 CEST] read: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"ls-files\",\"--cached\",\"-z\",\"--\",\"home.tar.gz\"]
+ whereis home.tar.gz (2 copies)
+ d7db543e-5463-11e2-b7dd-9f423f798cc4 -- here (em@ocracy:/data/backup)
+ e71fa45e-5463-11e2-a14e-93ca09c272da -- box.com
+ ok
+ $ git annex fsck --verbose --debug home.tar.gz
+ [2013-09-11 19:39:05 CEST] read: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"ls-files\",\"--cached\",\"-z\",\"--\",\"home.tar.gz\"]
+ [2013-09-11 19:39:05 CEST] chat: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"check-attr\",\"-z\",\"--stdin\",\"annex.backend\",\"annex.numcopies\",\"--\"]
+ fsck home.tar.gz [2013-09-11 19:39:05 CEST] read: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"show-ref\",\"git-annex\"]
+ [2013-09-11 19:39:05 CEST] read: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+ [2013-09-11 19:39:05 CEST] read: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"log\",\"refs/heads/git-annex..1e029f92c5c82b094cbe70b55927996c31579e2e\",\"--oneline\",\"-n1\"]
+ [2013-09-11 19:39:05 CEST] read: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"log\",\"refs/heads/git-annex..1090c21b121fd8b6e2ab49a772c8eab5235a3930\",\"--oneline\",\"-n1\"]
+ [2013-09-11 19:39:05 CEST] chat: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"cat-file\",\"--batch\"]
+ (checksum...) [2013-09-11 19:39:05 CEST] read: sha256sum [\"/data/backup/.git/annex/objects/mG/kp/SHA256E-s6640317400--dcf0a535728f3f3f787db6339b740a4a6f6529e5ce1d238f28574499a8172670.tar.gz/SHA256E-s6640317400--dcf0a535728f3f3f787db6339b740a4a6f6529e5ce1d238f28574499a8172670.tar.gz\"]
+ ok
+ $ git annex fsck --verbose --debug home.tar.gz --from box.com
+ [2013-09-11 19:42:15 CEST] read: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"show-ref\",\"git-annex\"]
+ [2013-09-11 19:42:15 CEST] read: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+ [2013-09-11 19:42:15 CEST] read: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"log\",\"refs/heads/git-annex..1e029f92c5c82b094cbe70b55927996c31579e2e\",\"--oneline\",\"-n1\"]
+ [2013-09-11 19:42:15 CEST] read: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"log\",\"refs/heads/git-annex..1090c21b121fd8b6e2ab49a772c8eab5235a3930\",\"--oneline\",\"-n1\"]
+ [2013-09-11 19:42:15 CEST] chat: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"cat-file\",\"--batch\"]
+ [2013-09-11 19:42:15 CEST] read: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"ls-files\",\"--cached\",\"-z\",\"--\",\"home.tar.gz\"]
+ [2013-09-11 19:42:15 CEST] chat: git [\"--git-dir=/data/backup/.git\",\"--work-tree=/data/backup\",\"check-attr\",\"-z\",\"--stdin\",\"annex.backend\",\"annex.numcopies\",\"--\"]
+ fsck home.tar.gz (gpg) [2013-09-11 19:42:15 CEST] chat: gpg [\"--quiet\",\"--trust-model\",\"always\",\"--decrypt\"]
+ (checking box.com...)
+ [2013-09-11 19:42:28 CEST] chat: gpg [\"--quiet\",\"--trust-model\",\"always\",\"--batch\",\"--passphrase-fd\",\"10\",\"--decrypt\"]
+ gpg: decrypt_message failed: eof
+ ok
+
+
+
+"""]]
diff --git a/doc/forum/Permission_denied___40__publickey__41___On_second_Step_...___63__.mdwn b/doc/forum/Permission_denied___40__publickey__41___On_second_Step_...___63__.mdwn
new file mode 100644
index 000000000..caa9fc85a
--- /dev/null
+++ b/doc/forum/Permission_denied___40__publickey__41___On_second_Step_...___63__.mdwn
@@ -0,0 +1,36 @@
+Hello,
+
+I've a strange (for me ;-)) problem.
+<br>I'm trying to use git-annex with 2 debian wheezy (packages from backports)
+<br>I've put my ssh pub key on the server in the autorized_keys for my username account (and for the root account to be sure)
+my username account is member of the sudo group (not sure it's required)
+
+I can create an ssh session directly to the server with :
+
+ ssh username@remoteserver.lan -p 62322
+
+and work inside this session.
+
+ Sep 14 03:42:35 file sshd[8849]: Accepted publickey for username from 80.201.25.4 port 32969 ssh2
+ Sep 14 03:42:35 file sshd[8849]: pam_unix(sshd:session): session opened for user username by (uid=0)
+ ...
+ Sep 14 05:13:14 file sshd[8851]: Received disconnect from 80.201.25.4: 11: disconnected by user
+ Sep 14 05:13:14 file sshd[8849]: pam_unix(sshd:session): session closed for user username
+
+But when I use the git-annex assistant on the same workstation with the same remote server and port,
+<br>the 1st step is OK,
+<br>but when I've to choose between git or rsync encrypted, I'm choosing git and receive :
+
+ "Permission denied (publickey)."
+
+On the server I can only see that the ssh session is immediately closed after opened and before the choice git or rsync is made.
+
+ Sep 14 05:13:42 file sshd[8882]: Accepted publickey for username from 80.201.25.4 port 32984 ssh2
+ Sep 14 05:13:42 file sshd[8882]: pam_unix(sshd:session): session opened for user username by (uid=0)
+ Sep 14 05:13:42 file sshd[8886]: Received disconnect from 80.201.25.4: 11: disconnected by user
+ Sep 14 05:13:42 file sshd[8882]: pam_unix(sshd:session): session closed for user username
+
+Do you think it's the problem ? or whatelse ...
+<br>and could you guide me to a possible solution ?
+
+Best regards
diff --git a/doc/forum/Running_out_of__inodes.mdwn b/doc/forum/Running_out_of__inodes.mdwn
new file mode 100644
index 000000000..417de18de
--- /dev/null
+++ b/doc/forum/Running_out_of__inodes.mdwn
@@ -0,0 +1,17 @@
+When syncing with a huge git annex repository on usb disk, my small laptop partition runs out of inodes.
+
+Any workaround for this?
+
+- Use bare repository?
+
+ Some git annex command are not supported.
+ This makes managing (particularly adding) files difficult.
+
+- Use a loop file partition with tiny block size and large inode numbers?
+
+ Operations on a huge git repository are slow.
+ On a loop file partition will be slower.
+
+- Maybe shrink the partition and make room for a specific partition for git annex repository?
+
+Any opinions?
diff --git a/doc/forum/Running_out_of__inodes/comment_1_abc73d9ad662ef642337b683bf0a0253._comment b/doc/forum/Running_out_of__inodes/comment_1_abc73d9ad662ef642337b683bf0a0253._comment
new file mode 100644
index 000000000..11f2f7b7e
--- /dev/null
+++ b/doc/forum/Running_out_of__inodes/comment_1_abc73d9ad662ef642337b683bf0a0253._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.4.51"
+ subject="comment 1"
+ date="2013-09-12T20:37:05Z"
+ content="""
+Define \"huge\"? Checking out a git repository necessarily requires one inode per file in the repository, plus a smaller quantity for the things in .git. A git-annex repository is much the same as any other git repository.
+
+Even when I make a really tiny 100 mb ext4 filesystem, it defaults to 25000 inodes, which would be enough to contain a checkout of my second largest git-annex repository.
+
+Anyway, using git branches seems like a reasonable workaround, to the extent I understand your problem. Make a branch with the files in it you want to have available on the small drive, or check out an empty branch on the small drive and `git annex add` files in there. You can merge the branch back into your master branch on the large drive.
+"""]]
diff --git a/doc/forum/Share_with_friend_copies_only_sym_links.mdwn b/doc/forum/Share_with_friend_copies_only_sym_links.mdwn
new file mode 100644
index 000000000..8f31b6337
--- /dev/null
+++ b/doc/forum/Share_with_friend_copies_only_sym_links.mdwn
@@ -0,0 +1,38 @@
+I just setup git-annex across three macs, using git-annex assistant. I have one repository working fine, which successfully syncs between two of my own accounts on two different machines, via S3.
+
+Now I'm trying to get the "share with a friend" feature to work. The problem is that only Mac Alias's / sym links are created, for example:
+
+Machine 1:
+- Copy file into ~/annex/
+
+Machine 2:
+- The file is synced as a sym-link, with a link into a file in .git that doesn't exist.
+
+The config is:
+- Version: 4.20130909-ga29f960 - Build flags: Assistant Webapp Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi
+- Two macs
+- Share with friend over Jabber
+- Use Box as the cloud sync service with encryption enabled. Box is setup as a transfer repository.
+
+I've looked through the logs in .git/annex/daemon.log* and there doesn't look to be any problems.
+
+This is what the log looks like:
+
+ [2013-09-14 19:55:47 PDT] Committer: Adding 20120101-..084-1.jpg
+ failed
+ add /Users/nick/Shared/20120101-GOPR0084-1.jpg (checksum...) ok
+ add /Users/nick/Shared/20120101-GOPR0084-1.jpg (checksum...) ok
+ add /Users/nick/Shared/20120101-GOPR0084-1.jpg (checksum...) ok
+ add /Users/nick/Shared/20120101-GOPR0084-1.jpg (checksum...) ok
+ add /Users/nick/Shared/20120101-GOPR0084-1.jpg (checksum...) [2013-09-14 19:55:47 PDT] Committer: Committing changes to git
+ [2013-09-14 19:55:48 PDT] XMPPSendPack: Syncing with USER2
+ Already up-to-date.
+ To xmpp::USER2@gmail.com
+ 7b65b15..183b91c git-annex -> refs/synced/6163ef8e-c36a-4b09-919b-9c18ade55234/bmlja2JsYWNrMUBnbWFpbC5jb20=/git-annex
+ 3104275..96afa09 master -> refs/synced/6163ef8e-c36a-4b09-919b-9c18ade55234/bmlja2JsYWNrMUBnbWFpbC5jb20=/master
+ [2013-09-14 19:55:49 PDT] XMPPSendPack: Syncing with USER2
+ Everything up-to-date
+ recv: resource vanished (Connection reset by peer)
+
+
+Any ideas what I should look at next? Thanks in advance :-)
diff --git a/doc/forum/Share_with_friend_copies_only_sym_links/comment_1_a8d22dfefb219f0c9130cc294364b198._comment b/doc/forum/Share_with_friend_copies_only_sym_links/comment_1_a8d22dfefb219f0c9130cc294364b198._comment
new file mode 100644
index 000000000..84217711a
--- /dev/null
+++ b/doc/forum/Share_with_friend_copies_only_sym_links/comment_1_a8d22dfefb219f0c9130cc294364b198._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.153.14.105"
+ subject="comment 1"
+ date="2013-09-19T17:41:47Z"
+ content="""
+git-annex can only share the contents of files with a friend when you both have access to a transfer repository. Your friend's git-annex webapp should detect that it does not have such a repository, and should be displaying an alert like this:
+
+[[assistant/cloudnudge.png]]
+(But in this case it should say \"Unable to download files from YourName\")
+
+So, you need to give your friend access to the S3 repository that you're already using to keep your 2 computers in sync. Or, set up some other transfer repository that you both can access.
+
+There is a way in S3 to create another key that can read and write to a S3 bucket. You can then give that key to your friend.
+
+Or, you could set up a shared git repository on a ssh server you both have access to. Or, set up a box.com remote -- the webapp will offer to store the box.com credentials and share them with your friend.
+"""]]
diff --git a/doc/forum/Slightly_finer_control_over_file_whereabouts.mdwn b/doc/forum/Slightly_finer_control_over_file_whereabouts.mdwn
new file mode 100644
index 000000000..2caf332af
--- /dev/null
+++ b/doc/forum/Slightly_finer_control_over_file_whereabouts.mdwn
@@ -0,0 +1,18 @@
+I have previously been confused by how to have a bit more manual control over where files are (as in [[bugs/git-annex_immediately_re-gets_dropped_files/]]).
+
+I thought perhaps something like an archive directory would work, but as I might want different computers to have different content, perhaps a per-computer archive repository.
+
+To that end, I have
+
+<pre>walter@dionysus:~/annex$ git annex content .
+(exclude=archive/dionysus/* or (not (copies=archive:1 or copies=smallarchive:1))) or (not copies=semitrusted+:1)
+ok</pre>
+
+which is a modified version of the archive [[preferred_content]], but with the intention that I change the part after `exclude` to be different for each client.
+I also set the group to client for this client (dionysus).
+
+However, it does not seem to drop files when I move them into `archive/dionysus/`, and I cannot see anything in the logs to suggest why.
+
+What am I doing wrong here? Or, is this the wrong approach?
+
+--Walter
diff --git a/doc/forum/Slightly_finer_control_over_file_whereabouts/comment_1_6236bcfa9beba705ead3ec2141c5d835._comment b/doc/forum/Slightly_finer_control_over_file_whereabouts/comment_1_6236bcfa9beba705ead3ec2141c5d835._comment
new file mode 100644
index 000000000..b9f598a1f
--- /dev/null
+++ b/doc/forum/Slightly_finer_control_over_file_whereabouts/comment_1_6236bcfa9beba705ead3ec2141c5d835._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.153.14.105"
+ subject="comment 1"
+ date="2013-09-19T17:57:22Z"
+ content="""
+That sound like it should work. I suggest you play around with `git annex drop --auto` at the command line. It will probably tell you why it is unable to drop a file if the problem is something like not enough copies located elsewhere. Or, if it doesn't try to drop the file at all, you'll know your preferred content expression makes it want to keep the file.
+"""]]
diff --git a/doc/forum/Sync_with_one_offline_peer/comment_2_c9ba3983b37b0c1868269616fd81e518._comment b/doc/forum/Sync_with_one_offline_peer/comment_2_c9ba3983b37b0c1868269616fd81e518._comment
new file mode 100644
index 000000000..20b82dd3e
--- /dev/null
+++ b/doc/forum/Sync_with_one_offline_peer/comment_2_c9ba3983b37b0c1868269616fd81e518._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.4.51"
+ subject="comment 2"
+ date="2013-09-12T21:13:36Z"
+ content="""
+Yes, the rsync repository is not a git repository and so does not hold metadata. If you can install git-annex on your server, you can add a regular git repository there, and then the clients can sync to it even when the other is offline.
+
+This is also why I an working on adding support for [[special_remotes/gcrypt]] repositories, so you can have a fully encrypted git repository on the server and sync through that.
+
+> during the setup the assistant got an error about too many command line arguments
+
+I have never heard about such a problem. You should file a bug report with the details.
+"""]]
diff --git a/doc/forum/Sync_with_one_offline_peer/comment_3_28b9c003b4560c3ce90c9ebf808b091b._comment b/doc/forum/Sync_with_one_offline_peer/comment_3_28b9c003b4560c3ce90c9ebf808b091b._comment
new file mode 100644
index 000000000..332cd83c3
--- /dev/null
+++ b/doc/forum/Sync_with_one_offline_peer/comment_3_28b9c003b4560c3ce90c9ebf808b091b._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnsuhFUIfWNT-Q-C02FDaSQqceFDge5M9w"
+ nickname="Florian"
+ subject="comment 3"
+ date="2013-09-13T10:52:33Z"
+ content="""
+Thanks for your reply. The bug report is at <http://git-annex.branchable.com/bugs/git-annex:_Argument_list_too_long/>
+
+I'll be happy to provide any more help if I can!
+"""]]
diff --git a/doc/forum/Use_case_with_syncing_only_a_subset_possible__63__.mdwn b/doc/forum/Use_case_with_syncing_only_a_subset_possible__63__.mdwn
new file mode 100644
index 000000000..0d102b0d4
--- /dev/null
+++ b/doc/forum/Use_case_with_syncing_only_a_subset_possible__63__.mdwn
@@ -0,0 +1,13 @@
+I'm trying to figure out if git-annex can be used for the following use case:
+
+- 2 repos in direct mode A and B
+- A is on a local filesystem, B could be a NFS mountpoint or ssh
+- B contains a number of toplevel directories, A contains a subset of those
+- For the subset in A all changes in those directories that happen on A or B should be synced automatically between both repos, including file removals.
+- A can decide to not carry a toplevel dir any more, but it must still exist in B.
+- A can copy new toplevel dirs from B and those should be synced from then on.
+
+I've been looking at the docs and played with two test repos, but I cannot seem to make the above work. To me it looks like I would need a possibility include/exclude paths from syncing via a regex.
+
+Thanks,
+Felix
diff --git a/doc/forum/Use_case_with_syncing_only_a_subset_possible__63__/comment_1_a0a272a0931b27e5c94b93e42656b62c._comment b/doc/forum/Use_case_with_syncing_only_a_subset_possible__63__/comment_1_a0a272a0931b27e5c94b93e42656b62c._comment
new file mode 100644
index 000000000..3e930b542
--- /dev/null
+++ b/doc/forum/Use_case_with_syncing_only_a_subset_possible__63__/comment_1_a0a272a0931b27e5c94b93e42656b62c._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.4.51"
+ subject="comment 1"
+ date="2013-09-12T20:39:51Z"
+ content="""
+I guess you might be using the git-annex assistant. If you were just using git-annex at the command line, you could simply only run `git annex get` on the files or directories you wanted to get.
+
+You can control which directories the git-annex assistant downloads/uploads files for using [[preferred_content]] expressions. Or the easy solution is to use the webapp to put the repository into \"manual mode\" and then manually run `git annex get` as described above to get just the files you want. (And `git annex copy --to remote` to share new files you make.)
+"""]]
diff --git a/doc/forum/can_I_only_add_my_own_files__63__.mdwn b/doc/forum/can_I_only_add_my_own_files__63__.mdwn
new file mode 100644
index 000000000..555429582
--- /dev/null
+++ b/doc/forum/can_I_only_add_my_own_files__63__.mdwn
@@ -0,0 +1,27 @@
+Hi,
+
+[ sorry for the wrong bugreport in the last version of this entry ]
+
+It seems as if I can only add my own file to the annex, even if I have group write permissions. Is that correct? Can that be circumvented other than copying/deleting the large file?
+
+Here is some demonstration:
+
+ > git init
+ > git config user.name dtr
+ > git config user.email dtrn@dtrn.com
+
+ > dd if/dev/zero of=test2.bin count=1000
+
+ > ll
+ -rw-rw-r-- 1 dtr dtr 512000 Sep 16 2013 test2.bin
+
+ > sudo chown someone test2.bin
+ > ll
+ -rw-rw-r-- 1 someone dtr 512000 Sep 16 2013 test2.bin
+
+ > git annex init
+ > git annex add test2.bin
+ add test2.bin (checksum...)
+ git-annex: /test-git-annex/.git/annex/objects/Fq/f6/SHA256-s512000--2d4da04b861bb9dbe77c871415931785a18138d6db035f1bbcd0cf8277c6fc23/SHA256-s512000--2d4da04b861bb9dbe77c871415931785a18138d6db035f1bbcd0cf8277c6fc23: setFileMode: permission denied (Operation not permitted)
+ failed
+ git-annex: add: 1 failed
diff --git a/doc/forum/git-annex:_status:_1_failed/comment_3_4bf55320439de152a65e2f21d4a0604b._comment b/doc/forum/git-annex:_status:_1_failed/comment_3_4bf55320439de152a65e2f21d4a0604b._comment
new file mode 100644
index 000000000..0c3604ad6
--- /dev/null
+++ b/doc/forum/git-annex:_status:_1_failed/comment_3_4bf55320439de152a65e2f21d4a0604b._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="eezec"
+ ip="93.21.246.236"
+ subject="comment 3"
+ date="2013-09-11T06:12:20Z"
+ content="""
+Joey .. moving transfer didn't work .. i have the same message when doing
+
+ git annex status
+ ....
+ getFileStatus: does not exist (No such file or directory)
+ ....
+ git-annex: status: 1 failed
+"""]]
diff --git a/doc/forum/git-annex:_status:_1_failed/comment_4_cb2cfb798c6171f77eb7c4c4061c0f0c._comment b/doc/forum/git-annex:_status:_1_failed/comment_4_cb2cfb798c6171f77eb7c4c4061c0f0c._comment
new file mode 100644
index 000000000..3e4ecb82f
--- /dev/null
+++ b/doc/forum/git-annex:_status:_1_failed/comment_4_cb2cfb798c6171f77eb7c4c4061c0f0c._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.4.51"
+ subject="comment 4"
+ date="2013-09-12T21:10:12Z"
+ content="""
+can you `strace git-annex status` ?
+"""]]
diff --git a/doc/forum/git-annex_on_archlinuxarm__44___armv6.mdwn b/doc/forum/git-annex_on_archlinuxarm__44___armv6.mdwn
new file mode 100644
index 000000000..edfd0ad4e
--- /dev/null
+++ b/doc/forum/git-annex_on_archlinuxarm__44___armv6.mdwn
@@ -0,0 +1,20 @@
+Hi!
+
+I can't get git-annex to run on my archlinuxARM sytem. It fails with
+
+ $ git annex test
+ error: git-annex died of signal 11
+
+ Its a RaspberryPi (model B I think) so its an ARM11 (armv6h if I'm not mistaken). I use archlinuxarm because I am familiar with the distribution and you can have a very lean system. There is a very crude package for git-annex arm and armv7 that is build like this: https://github.com/archlinuxarm/PKGBUILDs/blob/master/alarm/git-annex/PKGBUILD . Crude, because it just takes the debian package, changes the version of libraries where apropriate and packs it as archlinux package. Two problems: 1) It's not been tested on armv6. 2) The 4.20130417 version does not exist anymore on the debian mirrors.
+
+1. The debian package is not marked as armv5 or armv7 specific and is runs on the RaspberryPi with Raspbian (but in an pretty old version if I remember correctly). So I would have imagined it runs on armv6h in general.\\
+2. I just did the same magic as in the linked PKGBUILD with a more current version to build the package but it still crashes. Can I get the old version anywhere to check if it works with that?
+
+
+Cheers,
+ Hannes
+
+Background for whoever's interested :)
+I tried to set up a RaspberryPi to manage my files, contacts and calendars. That shouts out loud for owncloud because of its convenience (caldav, carddav, webdav and a nice interface bundled together). However, compared to git-annex owncloud is unbearably slow (on an RaspberryPi) and lacks git-annex's easy way to keep your files sorted even if you don't have them on your local disk.
+
+For these reasons I tried to install a hybrid git-annex/owncloud system. There, basically, the files are served by owncloud but at the same time also managed (and served) by git-annex (+ssh). As far as I can see that should not have any noticeable side effects in my use case (mostly single user). I have some external hard drives connected to the RaspberryPi of which I will just symlink the appropriate folders to the owncloud 'files' folder. This way I can also just take the drives with me and still have the same (UUID) git annex repository on them. Any comments?
diff --git a/doc/forum/git-annex_on_archlinuxarm__44___armv6/comment_1_88fa644df8614c2db0d092b3eb1d3156._comment b/doc/forum/git-annex_on_archlinuxarm__44___armv6/comment_1_88fa644df8614c2db0d092b3eb1d3156._comment
new file mode 100644
index 000000000..516ec0017
--- /dev/null
+++ b/doc/forum/git-annex_on_archlinuxarm__44___armv6/comment_1_88fa644df8614c2db0d092b3eb1d3156._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.4.51"
+ subject="comment 1"
+ date="2013-09-12T16:56:50Z"
+ content="""
+You seem to be trying to take a binary built for one distribution with one CPU architecture and use it on another distribution on another CPU architecture. It's not very susprising that this does not work.
+
+Compiling git-annex from source for your particular architecture and distribution should not be difficult.
+"""]]
diff --git a/doc/forum/git-annex_pre-commit_eats_all_my_4GB_of_ram.mdwn b/doc/forum/git-annex_pre-commit_eats_all_my_4GB_of_ram.mdwn
new file mode 100644
index 000000000..82ca06b85
--- /dev/null
+++ b/doc/forum/git-annex_pre-commit_eats_all_my_4GB_of_ram.mdwn
@@ -0,0 +1,24 @@
+Hi all,
+
+git-annex basically renders my repository unmanageble. What is the
+best and save (!) way to recover?
+
+Here is my situation:
+
+I have a fairly large repository with ~8000 managed files taking about
+65GB of disk space.
+
+git-annex worked well there. But some programs choke on the
+symlinks. So, I converted the repository to direct mode. The
+transition worked well.
+
+Now git status reports a type change for the ~8000 files.
+
+But as soon as I run
+
+ git commit -m "typechange" even-only-one-of-the-files
+
+the process `git-annex pre-commit .` eats 3.5GB of ram, where I
+usually kill it, as I only have 4GB of ram....
+
+-- Andreas
diff --git a/doc/forum/git-annex_pre-commit_eats_all_my_4GB_of_ram/comment_1_ff16c7932b60b85c744bafc48bb040e4._comment b/doc/forum/git-annex_pre-commit_eats_all_my_4GB_of_ram/comment_1_ff16c7932b60b85c744bafc48bb040e4._comment
new file mode 100644
index 000000000..23e5e79e8
--- /dev/null
+++ b/doc/forum/git-annex_pre-commit_eats_all_my_4GB_of_ram/comment_1_ff16c7932b60b85c744bafc48bb040e4._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="https://me.yahoo.com/a/FHnTlSBo1eCGJRwueeKeB6.RCaPbGMPr5jxx8A--#ce0d8"
+ nickname="Hamza"
+ subject="comment 1"
+ date="2013-09-18T07:19:49Z"
+ content="""
+AFAIK in direct mode you are not supposed to commit you just run
+
+ git annex sync
+
+and it will commit if files are changed. you only add new files annexed files are handled by sync
+
+"""]]
diff --git a/doc/forum/git-annex_pre-commit_eats_all_my_4GB_of_ram/comment_2_5599cddf579d18f70cab6e48d04ae99d._comment b/doc/forum/git-annex_pre-commit_eats_all_my_4GB_of_ram/comment_2_5599cddf579d18f70cab6e48d04ae99d._comment
new file mode 100644
index 000000000..337c1627f
--- /dev/null
+++ b/doc/forum/git-annex_pre-commit_eats_all_my_4GB_of_ram/comment_2_5599cddf579d18f70cab6e48d04ae99d._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="ringprince"
+ ip="134.76.140.110"
+ subject="comment 2"
+ date="2013-09-18T12:27:38Z"
+ content="""
+Hi Hamza,
+
+thanks for that comment. I thought `git annex sync` is just a wrapper around `git commit -a` (among others).
+
+Using `git annex sync` does not help, as it just means that now `git annex sync` eats all my memory until swapping starts.
+"""]]
diff --git a/doc/forum/git-annex_unused_not_dropping_deleted_files.mdwn b/doc/forum/git-annex_unused_not_dropping_deleted_files.mdwn
new file mode 100644
index 000000000..1669461bc
--- /dev/null
+++ b/doc/forum/git-annex_unused_not_dropping_deleted_files.mdwn
@@ -0,0 +1,34 @@
+I've been organizing my music collection deleted/replaces some files but git-annex unused does not show any unused files even though they are deleted and all repos are in sync.
+
+
+ git log --stat --all -S'SHA256E-s8034842--5c3475d7fef6f0c3545721f34e7cbfb6727a00708bdde192f0f1d53af251b444'
+ commit a0fecdc02f7564f8bce9726f6b934fefc11de58b
+ Date: Thu Sep 12 17:04:53 2013 +0300
+
+ Deleted
+
+ .../Dido - Sitting On the Roof of the World.mp3 | 1 -
+ 1 file changed, 1 deletion(-)
+
+ commit 7f216228fc0e6298f0290ee1d8646bc9b16eca10
+ Date: Mon Aug 5 03:49:55 2013 +0200
+
+ Initial Import
+
+ .../Dido - Sitting On the Roof of the World.mp3 | 1 +
+ 1 file changed, 1 insertion(+)`
+
+even though the file is deleted its still present in annex objects,
+
+ find .git -name '*5c3475d7fef6f0c3545721f34e7cbfb6727a00708bdde192f0f1d53af251b444*' -exec ls -al '{}' \;
+ total 7856
+ dr-xr-xr-x 2 user user 4096 Sep 9 01:24 .
+ drwxrwxr-x 3 user user 4096 Sep 9 01:24 ..
+ -r--r--r-- 1 user user 8034842 Aug 5 04:52 SHA256E-s8034842--5c3475d7fef6f0c3545721f34e7cbfb6727a00708bdde192f0f1d53af251b444.mp3
+ -r--r--r-- 1 user user 8034842 Aug 5 04:52 .git/annex/objects/Jz/74/SHA256E-s8034842--5c3475d7fef6f0c3545721f34e7cbfb6727a00708bdde192f0f1d53af251b444.mp3/SHA256E-s8034842--5c3475d7fef6f0c3545721f34e7cbfb6727a00708bdde192f0f1d53af251b444.mp3
+
+I got around 200 files that should be deleted but not showing up in unused. I though maybe one of the dead repos is causing the problem so i did a,
+
+ git annex forget --drop-dead
+
+and synced all repos. Still I can not get them to drop.
diff --git a/doc/forum/git-annex_unused_not_dropping_deleted_files/comment_1_2152cfb09675e46e7492e198dd3ea094._comment b/doc/forum/git-annex_unused_not_dropping_deleted_files/comment_1_2152cfb09675e46e7492e198dd3ea094._comment
new file mode 100644
index 000000000..72ed0bbe1
--- /dev/null
+++ b/doc/forum/git-annex_unused_not_dropping_deleted_files/comment_1_2152cfb09675e46e7492e198dd3ea094._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.2.134"
+ subject="comment 1"
+ date="2013-09-13T15:34:03Z"
+ content="""
+The most likely explanation is that you have a branch in git that still contains the deleted file, which will prevent unused from removing it. Try `git branch -a` to see all branches (a tag could also do it).
+"""]]
diff --git a/doc/forum/git-annex_unused_not_dropping_deleted_files/comment_2_97e666dbac9de2a5e688921cba8a42e9._comment b/doc/forum/git-annex_unused_not_dropping_deleted_files/comment_2_97e666dbac9de2a5e688921cba8a42e9._comment
new file mode 100644
index 000000000..134106482
--- /dev/null
+++ b/doc/forum/git-annex_unused_not_dropping_deleted_files/comment_2_97e666dbac9de2a5e688921cba8a42e9._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="https://me.yahoo.com/a/FHnTlSBo1eCGJRwueeKeB6.RCaPbGMPr5jxx8A--#ce0d8"
+ nickname="Hamza"
+ subject="comment 2"
+ date="2013-09-13T15:59:29Z"
+ content="""
+I did not create tags or branches, running returns,
+
+ git branch -a
+
+ git-annex
+ * master
+ synced/git-annex
+ synced/master
+ remotes/origin/HEAD -> origin/master
+ remotes/origin/git-annex
+ remotes/origin/master
+ remotes/origin/synced/master
+
+"""]]
diff --git a/doc/forum/git-annex_unused_not_dropping_deleted_files/comment_3_d7b0e9515bface28f3650b8aa20ec2f4._comment b/doc/forum/git-annex_unused_not_dropping_deleted_files/comment_3_d7b0e9515bface28f3650b8aa20ec2f4._comment
new file mode 100644
index 000000000..666172b28
--- /dev/null
+++ b/doc/forum/git-annex_unused_not_dropping_deleted_files/comment_3_d7b0e9515bface28f3650b8aa20ec2f4._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.2.134"
+ subject="comment 3"
+ date="2013-09-13T16:17:39Z"
+ content="""
+Depending on your git configuration, `git annex sync` might not be updating certian of these branches, such as remotes/origin/HEAD. You can check the branches out and see which still contains your deleted files.
+"""]]
diff --git a/doc/forum/git-annex_unused_not_dropping_deleted_files/comment_4_5816f6cab42e27e724e735368f693b09._comment b/doc/forum/git-annex_unused_not_dropping_deleted_files/comment_4_5816f6cab42e27e724e735368f693b09._comment
new file mode 100644
index 000000000..e1a503d23
--- /dev/null
+++ b/doc/forum/git-annex_unused_not_dropping_deleted_files/comment_4_5816f6cab42e27e724e735368f693b09._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://me.yahoo.com/a/FHnTlSBo1eCGJRwueeKeB6.RCaPbGMPr5jxx8A--#ce0d8"
+ nickname="Hamza"
+ subject="comment 4"
+ date="2013-09-13T17:57:38Z"
+ content="""
+Which one of those branches I can safely delete? this is a central repo all other clients drop their stuff here it does not have any remotes (I did clones it from a client then removed origin section from config.)
+"""]]
diff --git a/doc/forum/git-annex_unused_not_dropping_deleted_files/comment_5_8e97f39225515f0bf8b168dfd6a0efab._comment b/doc/forum/git-annex_unused_not_dropping_deleted_files/comment_5_8e97f39225515f0bf8b168dfd6a0efab._comment
new file mode 100644
index 000000000..1da1f80db
--- /dev/null
+++ b/doc/forum/git-annex_unused_not_dropping_deleted_files/comment_5_8e97f39225515f0bf8b168dfd6a0efab._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.2.134"
+ subject="comment 5"
+ date="2013-09-13T18:23:02Z"
+ content="""
+So this is a bare repository?
+
+It seems to have had an origin at one point; see the remotes/origin/* branches. If it no longer has that remote, then of course those branches will not be getting updated, and so will contain the old files and that's why unused won't find them. In that case, you could safely remove the remotes/origin/* branches.
+"""]]
diff --git a/doc/forum/git-annex_unused_not_dropping_deleted_files/comment_6_bef37f8ec9c337387b79ffd6d56fe425._comment b/doc/forum/git-annex_unused_not_dropping_deleted_files/comment_6_bef37f8ec9c337387b79ffd6d56fe425._comment
new file mode 100644
index 000000000..fe1c94eca
--- /dev/null
+++ b/doc/forum/git-annex_unused_not_dropping_deleted_files/comment_6_bef37f8ec9c337387b79ffd6d56fe425._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://me.yahoo.com/a/FHnTlSBo1eCGJRwueeKeB6.RCaPbGMPr5jxx8A--#ce0d8"
+ nickname="Hamza"
+ subject="comment 6"
+ date="2013-09-13T18:41:30Z"
+ content="""
+It is a non bare repo, I am using the following setup,
+
+http://git-annex.branchable.com/forum/Annex_dropping_files/
+"""]]
diff --git a/doc/forum/manual_update_of_.git__47__annex__47__objects/comment_1_ea6ec91150c8962e2711631f2422bf3a._comment b/doc/forum/manual_update_of_.git__47__annex__47__objects/comment_1_ea6ec91150c8962e2711631f2422bf3a._comment
new file mode 100644
index 000000000..f721e21a5
--- /dev/null
+++ b/doc/forum/manual_update_of_.git__47__annex__47__objects/comment_1_ea6ec91150c8962e2711631f2422bf3a._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.4.51"
+ subject="comment 1"
+ date="2013-09-12T17:11:41Z"
+ content="""
+I do not recommend manually messing with the contents of .git/annex/objects. It is a good way to lose data.
+
+If you look at the documentation for fsck in git-annex's man page, you will find the answer to your question.
+"""]]
diff --git a/doc/forum/nntp__47__usenet_special_remote/comment_2_48736ed17c98ffcfb13ec00b901b2dd6._comment b/doc/forum/nntp__47__usenet_special_remote/comment_2_48736ed17c98ffcfb13ec00b901b2dd6._comment
new file mode 100644
index 000000000..90b264f7b
--- /dev/null
+++ b/doc/forum/nntp__47__usenet_special_remote/comment_2_48736ed17c98ffcfb13ec00b901b2dd6._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmkBwMWvNKZZCge_YqobCSILPMeK6xbFw8"
+ nickname="develop"
+ subject="comment 2"
+ date="2013-09-11T07:46:07Z"
+ content="""
+Only played a tiny bit with this since the initial post.
+
+I've decided that sql backend should be dropped entirely. Mostly the SQL backend was there because the code does something else entirely, and this was just a test.
+
+But since there has been no interest it will probably take ages before i actually get this finished :)
+
+"""]]
diff --git a/doc/forum/purge_files_with_no_copies.mdwn b/doc/forum/purge_files_with_no_copies.mdwn
new file mode 100644
index 000000000..5761d9290
--- /dev/null
+++ b/doc/forum/purge_files_with_no_copies.mdwn
@@ -0,0 +1,3 @@
+Hi guys, as a result of some improper handling I am left with a couple of files with no copies scattered all around my repos. Now, while my data loss is unfortunate, it is not tragic. What I would like to do now is to purge all of these files without having to look for them one by one. Is there any easy way to do this?
+
+Cheers
diff --git a/doc/forum/ui/comment_2_b493ee97eb2378e72c12f3d137109580._comment b/doc/forum/ui/comment_2_b493ee97eb2378e72c12f3d137109580._comment
new file mode 100644
index 000000000..ee7995883
--- /dev/null
+++ b/doc/forum/ui/comment_2_b493ee97eb2378e72c12f3d137109580._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="http://mylesenglish.myopenid.com/"
+ ip="217.39.94.195"
+ subject="comment 2"
+ date="2013-09-16T19:21:31Z"
+ content="""
+This shell function behaves more like ls and shows the files that are present:
+
+ ga-ls () {
+ CWD=`pwd`
+ cd ${1:-.} && git annex find | cut -d / -f 1 | uniq
+ cd ${CWD}
+ }
+
+"""]]
diff --git a/doc/git-annex.mdwn b/doc/git-annex.mdwn
index 4c7380607..27b326247 100644
--- a/doc/git-annex.mdwn
+++ b/doc/git-annex.mdwn
@@ -60,14 +60,14 @@ files in the directory. When no path is specified, most git-annex commands
default to acting on all relevant files in the current directory (and
subdirectories).
-* add [path ...]
+* `add [path ...]`
Adds files in the path to the annex. Files that are already checked into
git, or that git has been configured to ignore will be silently skipped.
(Use `--force` to add ignored files.) Dotfiles are skipped unless explicitly
listed.
-* get [path ...]
+* `get [path ...]`
Makes the content of annexed files available in this repository. This
will involve copying them from another repository, or downloading them,
@@ -76,7 +76,7 @@ subdirectories).
Normally git-annex will choose which repository to copy the content from,
but you can override this using the `--from` option.
-* drop [path ...]
+* `drop [path ...]`
Drops the content of annexed files from this repository.
@@ -85,7 +85,7 @@ subdirectories).
To drop content from a remote, specify `--from`.
-* move [path ...]
+* `move [path ...]`
When used with the `--from` option, moves the content of annexed files
from the specified repository to the current one.
@@ -93,7 +93,7 @@ subdirectories).
When used with the `--to` option, moves the content of annexed files from
the current repository to the specified one.
-* copy [path ...]
+* `copy [path ...]`
When used with the `--from` option, copies the content of annexed files
from the specified repository to the current one.
@@ -103,7 +103,7 @@ subdirectories).
To avoid contacting the remote to check if it has every file, specify `--fast`
-* unlock [path ...]
+* `unlock [path ...]`
Normally, the content of annexed files is protected from being changed.
Unlocking a annexed file allows it to be modified. This replaces the
@@ -111,17 +111,17 @@ subdirectories).
You can then modify it and `git annex add` (or `git commit`) to inject
it back into the annex.
-* edit [path ...]
+* `edit [path ...]`
This is an alias for the unlock command. May be easier to remember,
if you think of this as allowing you to edit an annexed file.
-* lock [path ...]
+* `lock [path ...]`
Use this to undo an unlock command if you don't want to modify
the files, or have made modifications you want to discard.
-* sync [remote ...]
+* `sync [remote ...]`
Use this command when you want to synchronize the local repository with
one or more of its remotes. You can specifiy the remotes to sync with;
@@ -148,7 +148,7 @@ subdirectories).
Note that sync does not transfer any file contents from or to the remote
repositories.
-* merge
+* `merge`
This performs the same merging that is done by the sync command, but
without pushing or pulling any data.
@@ -157,7 +157,7 @@ subdirectories).
post-receive hook. Then any syncs to the repository will update its working
copy automatically.
-* mirror [path ...]
+* `mirror [path ...]`
This causes a destination repository to mirror a source repository.
@@ -175,7 +175,7 @@ subdirectories).
Note that mirror does not sync the git repository, but only the file
contents.
-* addurl [url ...]
+* `addurl [url ...]`
Downloads each url to its own file, which is added to the annex.
@@ -198,11 +198,11 @@ subdirectories).
When quvi is installed, urls are automatically tested to see if they
are on a video hosting site, and the video is downloaded instead.
-* rmurl file url
+* `rmurl file url`
Record that the file is no longer available at the url.
-* import [path ...]
+* `import [path ...]`
Moves files from somewhere outside the git working copy, and adds them to
the annex. Individual files to import can be specified.
@@ -233,7 +233,7 @@ subdirectories).
(Note that using `--deduplicate` or `--clean-duplicates` with the WORM
backend does not look at file content, but filename and mtime.)
-* importfeed [url ...]
+* `importfeed [url ...]`
Imports the contents of podcast feeds. Only downloads files whose
urls have not already been added to the repository before, so you can
@@ -246,7 +246,7 @@ subdirectories).
The `--relaxed` and `--fast` options behave the same as they do in addurl.
-* watch
+* `watch`
Watches for changes to files in the current directory and its subdirectories,
and takes care of automatically adding new files, as well as dealing with
@@ -257,7 +257,7 @@ subdirectories).
To not daemonize, run with `--foreground` ; to stop a running daemon,
run with `--stop`
-* assistant
+* `assistant`
Like watch, but also automatically syncs changes to other remotes.
Typically started at boot, or when you log in.
@@ -265,7 +265,7 @@ subdirectories).
With the `--autostart` option, the assistant is started in any repositories
it has created. These are listed in `~/.config/git-annex/autostart`
-* webapp
+* `webapp`
Opens a web app, that allows easy setup of a git-annex repository,
and control of the git-annex assistant.
@@ -281,7 +281,7 @@ subdirectories).
# REPOSITORY SETUP COMMANDS
-* init [description]
+* `init [description]`
Until a repository (or one of its remotes) has been initialized,
git-annex will refuse to operate on it, to avoid accidentially
@@ -291,7 +291,7 @@ subdirectories).
of a repository with its own description. If you don't provide one,
one will be generated.
-* describe repository description
+* `describe repository description`
Changes the description of a repository.
@@ -299,7 +299,7 @@ subdirectories).
by uuid. To change the description of the current repository, use
"here".
-* initremote name [param=value ...]
+* `initremote name [param=value ...]`
Creates a new special remote, and adds it to `.git/config`.
@@ -310,7 +310,7 @@ subdirectories).
All special remotes support encryption. You can either specify
`encryption=none` to disable encryption, or specify
`encryption=hybrid keyid=$keyid ...` to specify a gpg key id (or an email
- address accociated with a key.
+ address associated with a key.)
There are actually three schemes that can be used for management of the
encryption keys. When using the encryption=hybrid scheme, additional
@@ -332,7 +332,7 @@ subdirectories).
git annex initremote mys3 type=S3 encryption=hybrid keyid=me@example.com datacenter=EU
-* enableremote name [param=value ...]
+* `enableremote name [param=value ...]`
Enables use of an existing special remote in the current repository,
which may be a different repository than the one in which it was
@@ -369,37 +369,37 @@ subdirectories).
keyid+= and keyid-= with such remotes should be used with care, and
make little sense except in cases like the revoked key example above.
-* trust [repository ...]
+* `trust [repository ...]`
Records that a repository is trusted to not unexpectedly lose
content. Use with care.
To trust the current repository, use "here".
-* untrust [repository ...]
+* `untrust [repository ...]`
Records that a repository is not trusted and could lose content
at any time.
-* semitrust [repository ...]
+* `semitrust [repository ...]`
Returns a repository to the default semi trusted state.
-* dead [repository ...]
+* `dead [repository ...]`
Indicates that the repository has been irretrevably lost.
(To undo, use semitrust.)
-* group repository groupname
+* `group repository groupname`
Adds a repository to a group, such as "archival", "enduser", or "transfer".
The groupname must be a single word.
-* ungroup repository groupname
+* `ungroup repository groupname`
Removes a repository from a group.
-* content repository [expression]
+* `content repository [expression]`
When run with an expression, configures the content that is preferred
to be held in the archive. See PREFERRED CONTENT below.
@@ -411,13 +411,13 @@ subdirectories).
Without an expression, displays the current preferred content setting
of the repository.
-* vicfg
+* `vicfg`
Opens EDITOR on a temp file containing most of the above configuration
settings, and when it exits, stores any changes made back to the git-annex
branch.
-* direct
+* `direct`
Switches a repository to use direct mode, where rather than symlinks to
files, the files are directly present in the repository.
@@ -428,7 +428,7 @@ subdirectories).
use in direct mode repositories, and can result in data loss or other
bad behavior.
-* indirect
+* `indirect`
Switches a repository back from direct mode to the default, indirect mode.
@@ -436,7 +436,7 @@ subdirectories).
# REPOSITORY MAINTENANCE COMMANDS
-* fsck [path ...]
+* `fsck [path ...]`
With no parameters, this command checks the whole annex for consistency,
and warns about or fixes any problems found.
@@ -467,7 +467,7 @@ subdirectories).
To verify data integrity only while disregarding required number of copies,
use `--numcopies=1`.
-* unused
+* `unused`
Checks the annex for data that does not correspond to any files present
in any tag or branch, and prints a numbered list of the data.
@@ -482,7 +482,7 @@ subdirectories).
git annex unused; git annex move --unused --to origin
-* dropunused [number|range ...]
+* `dropunused [number|range ...]`
Drops the data corresponding to the numbers, as listed by the last
`git annex unused`
@@ -491,23 +491,23 @@ subdirectories).
To drop the data from a remote, specify `--from.`
-* addunused [number|range ...]
+* `addunused [number|range ...]`
Adds back files for the content corresponding to the numbers or ranges,
as listed by the last `git annex unused`. The files will have names
starting with "unused."
-* fix [path ...]
+* `fix [path ...]`
Fixes up symlinks that have become broken to again point to annexed content.
This is useful to run if you have been moving the symlinks around,
but is done automatically when committing a change with git too.
-* upgrade
+* `upgrade`
Upgrades the repository to current layout.
-* forget
+* `forget`
Causes the git-annex branch to be rewritten, throwing away historical
data about past locations of files. The resulting branch will use less
@@ -526,11 +526,11 @@ subdirectories).
# QUERY COMMANDS
-* version
+* `version`
Shows the version of git-annex, as well as repository version information.
-* find [path ...]
+* `find [path ...]`
Outputs a list of annexed files in the specified path. With no path,
finds files in the current directory and its subdirectories.
@@ -547,12 +547,18 @@ subdirectories).
These variables are available for use in formats: file, key, backend,
bytesize, humansize
-* whereis [path ...]
+* `whereis [path ...]`
- Displays a list of repositories known to contain the content of the
+ Displays a list of repositories known to contain the contents of the
specified file or files.
-* log [path ...]
+* `remotes [path ...]`
+
+ Displays a table of remotes that contain the contents of the specified
+ files. Unlike whereis, this only shows configured remotes, not other
+ repositories. However it is a more compact display.
+
+* `log [path ...]`
Displays the location log for the specified file or files,
showing each repository they were added to ("+") and removed from ("-").
@@ -564,14 +570,14 @@ subdirectories).
To generate output suitable for the gource visualisation program,
specify `--gource`.
-* status [directory ...]
+* `status [directory ...]`
Displays some statistics and other information, including how much data
is in the annex and a list of all known repositories.
To only show the data that can be gathered quickly, use `--fast`.
- When a directory is specified, shows only an abbreviated status
+ When a directory is specified, shows a differently formatted status
display for that directory. In this mode, all of the file matching
options can be used to filter the files that will be included in
the status.
@@ -580,9 +586,9 @@ subdirectories).
would first like to see how much disk space that will use.
Then run:
- git annex status . --not --in here
+ git annex status --fast . --not --in here
-* map
+* `map`
Helps you keep track of your repositories, and the connections between them,
by going out and looking at all the ones it can get to, and generating a
@@ -602,7 +608,7 @@ subdirectories).
# UTILITY COMMANDS
-* migrate [path ...]
+* `migrate [path ...]`
Changes the specified annexed files to use the default key-value backend
(or the one specified with `--backend`). Only files whose content
@@ -615,7 +621,7 @@ subdirectories).
However, if a backend changes the information it uses to construct a key,
this can also be used to migrate files to use the new key format.
-* reinject src dest
+* `reinject src dest`
Moves the src file into the annex as the content of the dest file.
This can be useful if you have obtained the content of a file from
@@ -628,7 +634,7 @@ subdirectories).
git annex reinject /tmp/foo.iso foo.iso
-* unannex [path ...]
+* `unannex [path ...]`
Use this to undo an accidental `git annex add` command. You can use
`git annex unannex` to move content out of the annex at any point,
@@ -641,7 +647,7 @@ subdirectories).
In `--fast` mode, this command leaves content in the annex, simply making
a hard link to it.
-* uninit
+* `uninit`
Use this to stop using git annex. It will unannex every file in the
repository, and remove all of git-annex's other data, leaving you with a
@@ -649,7 +655,7 @@ subdirectories).
# PLUMBING COMMANDS
-* pre-commit [path ...]
+* `pre-commit [path ...]`
Fixes up symlinks that are staged as part of a commit, to ensure they
point to annexed content. Also handles injecting changes to unlocked
@@ -658,12 +664,12 @@ subdirectories).
This is meant to be called from git's pre-commit hook. `git annex init`
automatically creates a pre-commit hook using this.
-* fromkey key file
+* `fromkey key file`
This plumbing-level command can be used to manually set up a file
in the git repository to link to a specified key.
-* dropkey [key ...]
+* `dropkey [key ...]`
This plumbing-level command drops the annexed data for the specified
keys from this repository.
@@ -675,11 +681,11 @@ subdirectories).
git annex dropkey SHA1-s10-7da006579dd64330eb2456001fd01948430572f2
-* transferkeys
+* `transferkeys`
This plumbing-level command is used by the assistant to transfer data.
-* rekey [file key ...]
+* `rekey [file key ...]`
This plumbing-level command is similar to migrate, but you specify
both the file, and the new key to use for it.
@@ -687,34 +693,34 @@ subdirectories).
With `--force`, even files whose content is not currently available will
be rekeyed. Use with caution.
-* test
+* `test`
This runs git-annex's built-in test suite.
-* xmppgit
+* `xmppgit`
This command is used internally to perform git pulls over XMPP.
# OPTIONS
-* --force
+* `--force`
Force unsafe actions, such as dropping a file's content when no other
source of it can be verified to still exist, or adding ignored files.
Use with care.
-* --fast
+* `--fast`
Enables less expensive, but also less thorough versions of some commands.
What is avoided depends on the command.
-* --auto
+* `--auto`
Enables automatic mode. Commands that get, drop, or move file contents
will only do so when needed to help satisfy the setting of annex.numcopies,
and preferred content configuration.
-* --all
+* `--all`
Operate on all data that has been stored in the git annex,
including old versions of files. This is the default behavior when
@@ -722,56 +728,56 @@ subdirectories).
normal behavior is to only operate on specified files in the working
tree.
-* --unused
+* `--unused`
Operate on all data that has been determined to be unused by
a previous run of `git-annex unused`.
-* --quiet
+* `--quiet`
Avoid the default verbose display of what is done; only show errors
and progress displays.
-* --verbose
+* `--verbose`
Enable verbose display.
-* --json
+* `--json`
Rather than the normal output, generate JSON. This is intended to be
parsed by programs that use git-annex. Each line of output is a JSON
object. Note that json output is only usable with some git-annex commands,
like status and find.
-* --debug
+* `--debug`
Show debug messages.
-* --no-debug
+* `--no-debug`
Disable debug messages.
-* --from=repository
+* `--from=repository`
Specifies a repository that content will be retrieved from, or that
should otherwise be acted on.
It should be specified using the name of a configured remote.
-* --to=repository
+* `--to=repository`
Specifies a repository that content will be sent to.
It should be specified using the name of a configured remote.
-* --numcopies=n
+* `--numcopies=n`
Overrides the `annex.numcopies` setting, forcing git-annex to ensure the
specified number of copies exist.
Note that setting numcopies to 0 is very unsafe.
-* --time-limit=time
+* `--time-limit=time`
Limits how long a git-annex command runs. The time can be something
like "5h", or "30m" or even "45s" or "10d".
@@ -782,16 +788,16 @@ subdirectories).
Also, note that if the time limit prevents git-annex from doing all it
was asked to, it will exit with a special code, 101.
-* --trust=repository
-* --semitrust=repository
-* --untrust=repository
+* `--trust=repository`
+* `--semitrust=repository`
+* `--untrust=repository`
Overrides trust settings for a repository. May be specified more than once.
The repository should be specified using the name of a configured remote,
or the UUID or description of a repository.
-* --trust-glacier-inventory
+* `--trust-glacier-inventory`
Amazon Glacier inventories take hours to retrieve, and may not represent
the current state of a repository. So git-annex does not trust that
@@ -802,14 +808,14 @@ subdirectories).
removed a file from Glacier. If you try to drop the only other copy of the
file, and this switch is enabled, you could lose data!
-* --backend=name
+* `--backend=name`
Specifies which key-value backend to use. This can be used when
adding a file to the annex, or migrating a file. Once files
are in the annex, their backend is known and this option is not
necessary.
-* --format=value
+* `--format=value`
Specifies a custom output format. The value is a format string,
in which '${var}' is expanded to the value of a variable. To right-justify
@@ -819,7 +825,7 @@ subdirectories).
Also, '\\n' is a newline, '\\000' is a NULL, etc.
-* -c name=value
+* `-c name=value`
Used to override git configuration settings. May be specified multiple times.
@@ -836,21 +842,21 @@ For example:
The above example prevents git-annex from working on mp3 files whose
file contents are present at either of two repositories.
-* --exclude=glob
+* `--exclude=glob`
Skips files matching the glob pattern. The glob is matched relative to
the current directory. For example:
--exclude='*.mp3' --exclude='subdir/*'
-* --include=glob
+* `--include=glob`
Skips files not matching the glob pattern. (Same as `--not --exclude`.)
For example, to include only mp3 and ogg files:
--include='*.mp3' --or --include='*.ogg'
-* --in=repository
+* `--in=repository`
Matches only files that git-annex believes have their contents present
in a repository. Note that it does not check the repository to verify
@@ -860,13 +866,13 @@ file contents are present at either of two repositories.
or the UUID or description of a repository. For the current repository,
use `--in=here`
-* --copies=number
+* `--copies=number`
Matches only files that git-annex believes to have the specified number
of copies, or more. Note that it does not check remotes to verify that
the copies still exist.
-* --copies=trustlevel:number
+* `--copies=trustlevel:number`
Matches only files that git-annex believes have the specified number of
copies, on remotes with the specified trust level. For example,
@@ -875,24 +881,24 @@ file contents are present at either of two repositories.
To match any trust level at or higher than a given level,
use 'trustlevel+'. For example, `--copies=semitrusted+:2`
-* --copies=groupname:number
+* `--copies=groupname:number`
Matches only files that git-annex believes have the specified number of
copies, on remotes in the specified group. For example,
`--copies=archive:2`
-* --inbackend=name
+* `--inbackend=name`
Matches only files whose content is stored using the specified key-value
backend.
-* --inallgroup=groupname
+* `--inallgroup=groupname`
Matches only files that git-annex believes are present in all repositories
in the specified group.
-* --smallerthan=size
-* --largerthan=size
+* `--smallerthan=size`
+* `--largerthan=size`
Matches only files whose content is smaller than, or larger than the
specified size.
@@ -900,25 +906,25 @@ file contents are present at either of two repositories.
The size can be specified with any commonly used units, for example,
"0.5 gb" or "100 KiloBytes"
-* --not
+* `--not`
Inverts the next file matching option. For example, to only act on
files with less than 3 copies, use `--not --copies=3`
-* --and
+* `--and`
Requires that both the previous and the next file matching option matches.
The default.
-* --or
+* `--or`
Requires that either the previous, or the next file matching option matches.
-* -(
+* `-(`
Opens a group of file matching options.
-* -)
+* `-)`
Closes a group of file matching options.
diff --git a/doc/install.mdwn b/doc/install.mdwn
index 27cd00a96..ecbf11a15 100644
--- a/doc/install.mdwn
+++ b/doc/install.mdwn
@@ -25,3 +25,7 @@ As a haskell package, git-annex can be installed from source pretty easily
## Installation from scratch
This is not recommended, but if you really want to, see [[fromscratch]].
+
+## See also
+
+[[autobuild overview|builds]]
diff --git a/doc/install/Android.mdwn b/doc/install/Android.mdwn
index dbd0c0198..6b2cb3a53 100644
--- a/doc/install/Android.mdwn
+++ b/doc/install/Android.mdwn
@@ -12,7 +12,8 @@ onto your Android device, and open it to install.
## autobuilds
-A daily build is also available.
+A daily build is also available, thanks to Mesar Hameed and the University
+of Bath CS department.
* [download apk](http://downloads.kitenet.net/git-annex/autobuild/android/git-annex.apk) ([build logs](http://downloads.kitenet.net/git-annex/autobuild/android/))
diff --git a/doc/install/ArchLinux/comment_2_e5f923e6d81cfb3fba7a72f60baaf4ab._comment b/doc/install/ArchLinux/comment_2_e5f923e6d81cfb3fba7a72f60baaf4ab._comment
new file mode 100644
index 000000000..9b1f29623
--- /dev/null
+++ b/doc/install/ArchLinux/comment_2_e5f923e6d81cfb3fba7a72f60baaf4ab._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="http://olivier.mehani.name/"
+ nickname="olivier-mehani"
+ subject="Stalling when creating repository in assistant"
+ date="2013-09-13T05:09:49Z"
+ content="""
+I am experiencing a weird issue with any install I've had on this one (and only) ArchLinux machine: all of aur/git-annex 4.20130516-1, aur/git-annex-bin-4.20130909-1, aur/git-annex-standalone-4.20130909-1 and a Cabal install just stall when trying to create the initial Git annex repo in the webapp.
+
+When started, it offers me to create the annex in ~/annex/ or ~/Desktop/annex/, where ~ gets turned into /home/USER when I press “Make repository”, but nothing else happens. This is regardless of if that repo exists when I try to create it or start the webapp.
+
+If I start the webapp from an existing annex (now in ~/annex), it seems to work a bit better, but any other remote (SSH) server that I try to add fails. I just get a fleeting Bootstrap message box when I click “Check this server”, and nothing in the logs of eithr git annex webapp or the ssh logs of the server.
+
+Any idea? Where should I look for more debug information?
+.
+
+"""]]
diff --git a/doc/install/ArchLinux/comment_3_8e607cd883ec174571e9dfe3b25bfd05._comment b/doc/install/ArchLinux/comment_3_8e607cd883ec174571e9dfe3b25bfd05._comment
new file mode 100644
index 000000000..48a2888a2
--- /dev/null
+++ b/doc/install/ArchLinux/comment_3_8e607cd883ec174571e9dfe3b25bfd05._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.2.134"
+ subject="comment 3"
+ date="2013-09-13T15:35:59Z"
+ content="""
+Please post a [[bug report|bugs]] and start the webapp with the --debug option.
+"""]]
diff --git a/doc/install/ArchLinux/comment_4_a378391dd218859f381c479259dd8fe3._comment b/doc/install/ArchLinux/comment_4_a378391dd218859f381c479259dd8fe3._comment
new file mode 100644
index 000000000..9146da9c8
--- /dev/null
+++ b/doc/install/ArchLinux/comment_4_a378391dd218859f381c479259dd8fe3._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://olivier.mehani.name/"
+ nickname="olivier-mehani"
+ subject="comment 4"
+ date="2013-09-16T01:23:58Z"
+ content="""
+Done [0]. Not much debug output, unfortunately...
+
+[0] http://git-annex.branchable.com/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/?updated
+"""]]
diff --git a/doc/install/Linux_standalone.mdwn b/doc/install/Linux_standalone.mdwn
index ccebd3798..c37fbaff0 100644
--- a/doc/install/Linux_standalone.mdwn
+++ b/doc/install/Linux_standalone.mdwn
@@ -20,7 +20,8 @@ Warning: This is a last resort. Most Linux users should instead
## autobuilds
-A daily build is also available.
+A daily build is also available, thanks to Mesar Hameed and the University
+of Bath CS department.
* i386: [download tarball](https://downloads.kitenet.net/git-annex/autobuild/i386/git-annex-standalone-i386.tar.gz) ([build logs](https://downloads.kitenet.net/git-annex/autobuild/i386/))
* amd64: [download tarball](https://downloads.kitenet.net/git-annex/autobuild/amd64/git-annex-standalone-amd64.tar.gz) ([build logs](https://downloads.kitenet.net/git-annex/autobuild/amd64/))
diff --git a/doc/install/OSX/comment_23_3d82a270dd4b0159f4aab5675166e1e3._comment b/doc/install/OSX/comment_23_3d82a270dd4b0159f4aab5675166e1e3._comment
new file mode 100644
index 000000000..08792aa21
--- /dev/null
+++ b/doc/install/OSX/comment_23_3d82a270dd4b0159f4aab5675166e1e3._comment
@@ -0,0 +1,30 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmL8pteP2jbYJUn1M3CbeLDvz2SWAA1wtg"
+ nickname="Kristian"
+ subject="Build failure using Haskel Platform"
+ date="2013-09-15T18:49:01Z"
+ content="""
+I get this error when I try to build git-annex using \"cabal install git-annex\"
+
+ [ 34 of 347] Compiling Utility.Misc ( Utility/Misc.hs, dist/build/git-annex/git-annex-tmp/Utility/Misc.o )
+ [ 35 of 347] Compiling Utility.Process ( Utility/Process.hs, dist/build/git-annex/git-annex-tmp/Utility/Process.o )
+ [ 36 of 347] Compiling Utility.Network ( Utility/Network.hs, dist/build/git-annex/git-annex-tmp/Utility/Network.o )
+ [ 37 of 347] Compiling Utility.SRV ( Utility/SRV.hs, dist/build/git-annex/git-annex-tmp/Utility/SRV.o )
+
+ Utility/SRV.hs:70:54:
+ Couldn't match expected type `Maybe
+ [(Int, Int, Integer, B8.ByteString)]'
+ with actual type `Either
+ dns-1.0.0:Network.DNS.Internal.DNSError
+ [(Int, Int, Int, dns-1.0.0:Network.DNS.Internal.Domain)]'
+ In the third argument of `maybe', namely `r'
+ In the second argument of `($)', namely
+ `maybe [] (orderHosts . map tohosts) r'
+ In a stmt of a 'do' block:
+ return $ maybe [] (orderHosts . map tohosts) r
+ Failed to install git-annex-4.20130909
+ cabal: Error: some packages failed to install:
+ git-annex-4.20130909 failed during the building phase. The exception was:
+ ExitFailure 1
+
+"""]]
diff --git a/doc/install/OSX/comment_24_b9d3563a2cc3d769f27876e028dc344d._comment b/doc/install/OSX/comment_24_b9d3563a2cc3d769f27876e028dc344d._comment
new file mode 100644
index 000000000..4b4bf3eb7
--- /dev/null
+++ b/doc/install/OSX/comment_24_b9d3563a2cc3d769f27876e028dc344d._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.152.108.128"
+ subject="comment 24"
+ date="2013-09-17T15:56:17Z"
+ content="""
+@Kristian, a new version of the DNS library has caused this. A workaround is to pass `-f-DNS` to the cabal command.
+
+I am in the process of adding support for the new DNS library version in git now.
+
+By the way, please [[file_a_bug|bugs]] if you have a big ugly looking build failure like that, so as to not clutter up this page.
+"""]]
diff --git a/doc/install/cabal/comment_19_74639fe525042aca12f9557d5d6a4f98._comment b/doc/install/cabal/comment_19_74639fe525042aca12f9557d5d6a4f98._comment
deleted file mode 100644
index e9fcb94b8..000000000
--- a/doc/install/cabal/comment_19_74639fe525042aca12f9557d5d6a4f98._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://id.koumbit.net/anarcat"
- ip="2001:1928:1:9::1"
- subject="manpages?"
- date="2013-09-10T05:00:49Z"
- content="""
-the manual install process doesn't seem to install manpages - how do we do that?
-"""]]
diff --git a/doc/install/fromscratch.mdwn b/doc/install/fromscratch.mdwn
index 17444a4fd..64e2fa84e 100644
--- a/doc/install/fromscratch.mdwn
+++ b/doc/install/fromscratch.mdwn
@@ -62,6 +62,8 @@ quite a lot.
* [gpg](http://gnupg.org/) (optional; needed for encryption)
* [lsof](ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/)
(optional; recommended for watch mode)
+ * [gcrypt](https://github.com/joeyh/git-remote-gcrypt)
+ (optional)
* multicast DNS support, provided on linux by [nss-mdns](http://www.0pointer.de/lennart/projects/nss-mdns/)
(optional; recommended for the assistant to support pairing well)
* [ikiwiki](http://ikiwiki.info) (optional; used to build the docs)
diff --git a/doc/related_software.mdwn b/doc/related_software.mdwn
index e436092a3..024a155e3 100644
--- a/doc/related_software.mdwn
+++ b/doc/related_software.mdwn
@@ -10,4 +10,3 @@ designed to interoperate with it.
* [sizes](http://hackage.haskell.org/package/sizes) is another du-like
utility, with a `-A` switch that enables git-annex support.
* Emacs Org mode can auto-commit attached files to git-annex.
-* [[todo/nicer whereis output]] improves the output of the whereis command to be more human-readable.
diff --git a/doc/special_remotes/xmpp/comment_3_48ddbba1402d89acaea07cff747c48e0._comment b/doc/special_remotes/xmpp/comment_3_48ddbba1402d89acaea07cff747c48e0._comment
new file mode 100644
index 000000000..7643d4d7d
--- /dev/null
+++ b/doc/special_remotes/xmpp/comment_3_48ddbba1402d89acaea07cff747c48e0._comment
@@ -0,0 +1,28 @@
+[[!comment format=mdwn
+ username="RaspberryPie"
+ ip="46.19.143.203"
+ subject="Missing prerequisites for XMPP syncing?"
+ date="2013-09-17T06:53:59Z"
+ content="""
+I set up two fresh annexes that can talk via XMPP and no other way. After I fire up the assistants I expect them to sync their metadata, but nothing happens. One log gives me an 'XMPPClient: received: [\"Unknown message\"]' message every two minutes. The other one doesn't contain the string XMPP at all, not once. So my suspicion is that this particular version of git-annex doesn't support XMPP, which is weird because:
+
+ $ git annex version
+ git-annex version: 4.20130909
+ build flags: Assistant Pairing Testsuite S3 Inotify XMPP DNS Feeds
+ local repository version: 3
+ default repository version: 3
+ supported repository versions: 3 4
+ upgrade supported from repository versions: 0 1 2
+
+This is the version output from the other machine:
+
+ $ git annex version
+ git-annex version: 4.20130827
+ build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP
+ local repository version: 3
+ default repository version: 3
+ supported repository versions: 3 4
+ upgrade supported from repository versions: 0 1 2
+
+What am I missing? Are there more build flags for XMPP than the one called XMPP? (Also, no, I can't just copy versions between machines b/c the architectures are different. And yep, the one giving me trouble is ARM.)
+"""]]
diff --git a/doc/tips/flickrannex.mdwn b/doc/tips/flickrannex.mdwn
index 47d834177..202d5ee53 100644
--- a/doc/tips/flickrannex.mdwn
+++ b/doc/tips/flickrannex.mdwn
@@ -1,3 +1,4 @@
+# Latest version 0.1.10
Hook program for gitannex to use flickr as backend.
This allows storing any type of file on flickr, not only images and movies.
@@ -10,7 +11,7 @@ Credit for the flickr api interface goes to: <http://stuvel.eu/flickrapi>
Credit for the png library goes to: <https://github.com/drj11/pypng>
Credit for the png tEXt patch goes to: <https://code.google.com/p/pypng/issues/detail?id=65>
-## Install
+# Install
Clone the git repository in your home folder.
@@ -18,7 +19,7 @@ Clone the git repository in your home folder.
This should make a ~/flickrannex folder
-## Setup
+# Setup
Run the program once to set it up.
@@ -26,24 +27,36 @@ Run the program once to set it up.
After the setup has finished, it will print the git-annex configure lines.
-## Configuring git-annex
+# Configuring git-annex
git config annex.flickr-hook '/usr/bin/python2 ~/flickrannex/flickrannex.py'
git annex initremote flickr type=hook hooktype=flickr encryption=shared
git annex describe flickr "the flickr library"
-## Notes
+# Notes
-### Unencrypted mode
+## Unencrypted mode
+The photo name on flickr is currently the GPGHMACSHA1 version.
-The photo name on flickr is currently the [[key|backends]] used by git-annex.
+Run the following command in your annex directory
+ git annex content flickr uuid include=*.jpg or include=*.jpeg or include=*.gif or include=*.png
-### Encrypted mode
+## Encrypted mode
+The current version base64 encodes all the data, which results in ~35% larger filesize.
-The current version base64 encodes all the data, which results in ~35%
-larger filesize.
+I might look into yyenc instead. I'm not sure if it will work in the tEXt field.
-I might look into yyenc instead. I'm not sure if it will work in the tEXt
-field.
+Run the following command in your annex directory
+ git annex content flickr exclude=largerthan=30mb
--- Tobias
+## Including directories as tags
+Get get each of the directories below the top level git directory added as tags to uploads:
+
+ git config annex.flickr-hook 'GIT_TOP_LEVEL=`git rev-parse --show-toplevel` /usr/bin/python2 %s/flickrannex.py'
+
+In this case the image:
+ /home/me/annex-photos/holidays/2013/Greenland/img001.jpg
+would get the following tags: "holidays" "2013" "Greenland"
+(assuming "/home/me/annex-photos" is the top level in the annex...)
+
+Caveat Emptor - Tags will *always* be NULL for indirect repos - we don't (easily) know the human-readable file name.
diff --git a/doc/tips/flickrannex/comment_13_1596e70dca71c853fd1d6fc9bde02b18._comment b/doc/tips/flickrannex/comment_13_1596e70dca71c853fd1d6fc9bde02b18._comment
new file mode 100644
index 000000000..19faa585e
--- /dev/null
+++ b/doc/tips/flickrannex/comment_13_1596e70dca71c853fd1d6fc9bde02b18._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmkBwMWvNKZZCge_YqobCSILPMeK6xbFw8"
+ nickname="develop"
+ subject="Version 0.1.10 pushed"
+ date="2013-09-11T20:31:25Z"
+ content="""
+Since the initial release of this hook a lot of issues have been fixed, and a few features added.
+
+I would highly suggest that everyone who is using this hook update to the latest version as i would consider one of the bugs to be fairly major.
+
+
+"""]]
diff --git a/doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant/comment_6_6a5d6af107b297afd008b021f73d787b._comment b/doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant/comment_6_6a5d6af107b297afd008b021f73d787b._comment
new file mode 100644
index 000000000..bd2212ffb
--- /dev/null
+++ b/doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant/comment_6_6a5d6af107b297afd008b021f73d787b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnPOttrEmm9CQYxzWrmgGN7LXy98gDkrlM"
+ nickname="binet"
+ subject="annex.largefiles and direct mode"
+ date="2013-09-16T22:50:48Z"
+ content="""
+I was wondering if the annex.largefiles feature was compatible with direct mode?
+"""]]
diff --git a/doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant/comment_7_74d57cf503a86d8f7ace2d769dbb58be._comment b/doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant/comment_7_74d57cf503a86d8f7ace2d769dbb58be._comment
new file mode 100644
index 000000000..2144b0ec8
--- /dev/null
+++ b/doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant/comment_7_74d57cf503a86d8f7ace2d769dbb58be._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.153.14.105"
+ subject="comment 7"
+ date="2013-09-19T18:03:29Z"
+ content="""
+annex.largefiles does not support mime types. I agree it would be a useful addition.
+
+annex.largefiles can be used with direct mode. I would only recommending using it this way using the assistant, which will keep straight which files are which and commit them appropriately.
+"""]]
diff --git a/doc/tips/using_the_web_as_a_special_remote.mdwn b/doc/tips/using_the_web_as_a_special_remote.mdwn
index 05b5e03a4..4304c0e77 100644
--- a/doc/tips/using_the_web_as_a_special_remote.mdwn
+++ b/doc/tips/using_the_web_as_a_special_remote.mdwn
@@ -68,7 +68,7 @@ number takes that many paths from the end.
## videos
-<a name=quvi>
+<a name=quvi />
There's support for downloading videos from sites like YouTube, Vimeo,
and many more. This relies on [quvi](http://quvi.sourceforge.net/) to find
diff --git a/doc/todo/__96__git_annex_status__47__version__96___should_print_the_local_OS.mdwn b/doc/todo/__96__git_annex_status__47__version__96___should_print_the_local_OS.mdwn
new file mode 100644
index 000000000..9c2afecb4
--- /dev/null
+++ b/doc/todo/__96__git_annex_status__47__version__96___should_print_the_local_OS.mdwn
@@ -0,0 +1,6 @@
+That would make assessing weird reports like [[bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/]] easier and quicker.
+
+> No, if people want to file a bug report, it's up to them to tell me
+> relevant details about their OS. I'm not going down the rathole
+> of making git-annex muck about trying to gather such information.
+> [[done]] --[[Joey]]
diff --git a/doc/todo/faster_rsync_remotes.mdwn b/doc/todo/faster_rsync_remotes.mdwn
index 5ece25008..8c40b2816 100644
--- a/doc/todo/faster_rsync_remotes.mdwn
+++ b/doc/todo/faster_rsync_remotes.mdwn
@@ -1 +1,4 @@
Using an rsync remote is currently very slow when there are a lot of files, since rsync appears to be called for each file copied. It would be awesome if each call to rsync was amortized to copy many files; rsync is very good at copying many small files quickly.
+
+> [[done]]; bug submitter was apparently not using a version
+> with rsync connection caching. --[[Joey]]
diff --git a/doc/bugs/http_git_annex_404_retry.mdwn b/doc/todo/http_git_annex_404_retry.mdwn
index 38ab860bb..38ab860bb 100644
--- a/doc/bugs/http_git_annex_404_retry.mdwn
+++ b/doc/todo/http_git_annex_404_retry.mdwn
diff --git a/doc/todo/importfeed:_allow___36____123__itemdate__125___with_--template.mdwn b/doc/todo/importfeed:_allow___36____123__itemdate__125___with_--template.mdwn
new file mode 100644
index 000000000..46d9de34f
--- /dev/null
+++ b/doc/todo/importfeed:_allow___36____123__itemdate__125___with_--template.mdwn
@@ -0,0 +1,5 @@
+It would be great to be able to use the pubDate of the entries with the --template option of importfeed.
+
+Text.Feed.Query has a getItemPublishDate (and a getFeedPubDate, if we want some kind of ${feeddate}).
+
+The best would be to allow a reformating of the date(s) with (for example) %Y-%m-%D
diff --git a/doc/todo/importfeed:_allow___36____123__itemdate__125___with_--template/comment_1_62752c760fc12eca0c34d67d58753d00._comment b/doc/todo/importfeed:_allow___36____123__itemdate__125___with_--template/comment_1_62752c760fc12eca0c34d67d58753d00._comment
new file mode 100644
index 000000000..cc3d85faf
--- /dev/null
+++ b/doc/todo/importfeed:_allow___36____123__itemdate__125___with_--template/comment_1_62752c760fc12eca0c34d67d58753d00._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="gueux"
+ ip="2a01:240:fe6d:0:7986:3659:a8bd:64f1"
+ subject="syntax"
+ date="2013-09-12T14:05:16Z"
+ content="""
+use \"itemdate\" and \"feeddate\" as names?
+
+use ${itemdate=%Y-%m-%D} syntax option?
+"""]]
diff --git a/doc/todo/importfeed:_allow___36____123__itemdate__125___with_--template/comment_2_21672360060f48bc2eacfa535ff4c94d._comment b/doc/todo/importfeed:_allow___36____123__itemdate__125___with_--template/comment_2_21672360060f48bc2eacfa535ff4c94d._comment
new file mode 100644
index 000000000..c8770ec6e
--- /dev/null
+++ b/doc/todo/importfeed:_allow___36____123__itemdate__125___with_--template/comment_2_21672360060f48bc2eacfa535ff4c94d._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.2.134"
+ subject="comment 2"
+ date="2013-09-13T19:53:52Z"
+ content="""
+getItemPublishDate returns a String, which can contain any of several date formats. Deferred until the feed library has something more sane.
+Upstream bug: <https://github.com/sof/feed/issues/6>
+
+As for how to format the date in the feed, I would be ok with having itemdate (YYYYMMDD), itemyear (YYYY), itemmonth (MM) and itemday (DD). Full date formatting seems like overkill here.
+"""]]
diff --git a/doc/todo/makefile:_respect___36__PREFIX.mdwn b/doc/todo/makefile:_respect___36__PREFIX.mdwn
new file mode 100644
index 000000000..12d7274b9
--- /dev/null
+++ b/doc/todo/makefile:_respect___36__PREFIX.mdwn
@@ -0,0 +1,25 @@
+The `Makefile` should respect a `PREFIX` passed on the commandline so git-annex can be installed in (say) `$HOME`.
+
+Simple patch:
+
+[[!format diff """
+diff --git a/Makefile b/Makefile
+index b8995b2..5b1a6d4 100644
+--- a/Makefile
++++ b/Makefile
+@@ -3,7 +3,7 @@ all=git-annex $(mans) docs
+
+ GHC?=ghc
+ GHCMAKE=$(GHC) $(GHCFLAGS) --make
+-PREFIX=/usr
++PREFIX?=/usr
+ CABAL?=cabal # set to "./Setup" if you lack a cabal program
+
+ # Am I typing :make in vim? Do a fast build.
+"""]]
+
+--[[anarcat]]
+
+> [[done]] --[[Joey]]
+
+> > [[thanks]]! ;) --[[anarcat]]
diff --git a/doc/todo/mdwn2man:_make_backticks_bold.mdwn b/doc/todo/mdwn2man:_make_backticks_bold.mdwn
index 87c228ab8..21707a309 100644
--- a/doc/todo/mdwn2man:_make_backticks_bold.mdwn
+++ b/doc/todo/mdwn2man:_make_backticks_bold.mdwn
@@ -18,3 +18,5 @@ index ba5919b..7f819ad 100755
"""]]
I tested it against the git-annex manpage and it seems to work well. --[[anarcat]]
+
+> [[done]], thanks --[[Joey]]
diff --git a/doc/todo/nicer_whereis_output.mdwn b/doc/todo/nicer_whereis_output.mdwn
index 22be93bd2..871eee01a 100644
--- a/doc/todo/nicer_whereis_output.mdwn
+++ b/doc/todo/nicer_whereis_output.mdwn
@@ -38,12 +38,14 @@ Fourth version: tuning and blocked
This required more advanced parsing of the remotes, and instead of starting to do some JSON parsing, [[anarcat]] figured it was time to learn some Haskell instead.
-Current status: needs work
-==========================
+Current status: needs merge
+===========================
+
+So right now, the most recent version of the python script is in [anarcat's gist](https://gist.github.com/anarcat/6502988) and works reasonably well. However, it doesn't distinguish between trusted and untrusted repos and so on.
-So right now, the most recent version is in [anarcat's gist](https://gist.github.com/anarcat/6502988) and works reasonably well. However, it doesn't distinguish between trusted and untrusted repos and so on.
+Furthermore, we'd like to see this factored into the `whereis` command directly. A [raw.hs](http://codepad.org/miVJb5oK) file has been programmed by `mastensg`, and is now available in the above gist. It fits the desired output and prototypes, and has been `haskellized` thanks to [[guilhem]].
-Furthermore, we'd like to see this factored into the `whereis` command directly.
+Now we just need to merge those marvelous functions in `Whereis.hs` - but I can't quite figure out where to throw that code, so I'll leave it to someone more familiar with the internals of git-annex. The most recent version is still in [anarcat's gist](https://gist.github.com/anarcat/6502988). --[[anarcat]]
Desired output
--------------
@@ -77,3 +79,22 @@ Implementation notes
20:49:37 <joeyh> gah, typos
20:49:45 <joeyh> suppose you don't need the RemoteName either
"""]]
+
+> So, I incorporated this, in a new remotes command.
+> Showing all known repositories seemed a bit much
+> (I have 30-some known repositories in some cases),
+> so just showing configured remotes seems a good simplification.
+> [[done]]
+> --[[Joey]]
+
+> > I would have prefered this to be optional since I don't explicitely configure all remotes in git, especially if I can't reach them all the time (e.g. my laptop). It seems to me this should at least be an option, but I am confused as to why `Remote.List.remoteList` doesn't list all remotes the same way `Remote.remote_list` does... Also, it's unfortunate that the +/!/count flags have been dropped, it would have been useful... Thanks for the merge anyways! --[[done]]
+> >
+> > The more I look at this, the more i think there are a few things wrong with the new `remotes` command.
+> >
+> > 1. the name is confusing: being a git addict, I would expect the `git annex remote` command to behave like the `git remote` command: list remotes, add remotes, remove remotes and so on. it would actually be useful to have such a command (which would replace `initremote`, I guess). i recommend replacing the current `whereis` command, even if enabled through a special flag
+> >
+> > 2. its behavior is inconsistent with other git annex commands: `git annex status`, for example, lists information about all remotes, regardless of whether they are configured in git. `remotes` (whatever it's called), should do the same, or at least provide an option to allow the user to list files on all remotes. The way things stand, there is no way to list files on non-git remotes, even if they are added explicitely as a remote, if the remote is not actually reachable: the files are just marked as absent (even thought `whereis` actually finds them). i recommend showing all remotes regardless, either opt-in or opt-out using a flag.
+> >
+> > 3. having the `!` flag, at least, would be useful because it would allow users to intuitively grep for problematic files without having to learn extra syntax. same with + and having an explicit count.
+> >
+> > thanks. --[[anarcat]]
diff --git a/doc/todo/support_for_lossy_remotes.mdwn b/doc/todo/support_for_lossy_remotes.mdwn
index e757343f4..23083b2d7 100644
--- a/doc/todo/support_for_lossy_remotes.mdwn
+++ b/doc/todo/support_for_lossy_remotes.mdwn
@@ -3,3 +3,9 @@ I'm curious if there's a possibility to support lossy remotes. It may be handy t
1. an online place that their videos are available from
2. a worst-case scenario "backup"
3. a remote that they could download smaller video files
+
+> [[done]]; lossy remotes are supported as seen with `git annex addurl
+> --fast` and also with the new addurl support for using quvi to get
+> videos fro youtube. Just make a key with a URL or something in it, and
+> no size or checksum, and any content will be assumed to be the right
+> content. --[[Joey]]
diff --git a/doc/todo/wishlist:___34__quiet__34___annex_get_for_centralized_use_case.mdwn b/doc/todo/wishlist:___34__quiet__34___annex_get_for_centralized_use_case.mdwn
index 27f4744c8..d53fa56ab 100644
--- a/doc/todo/wishlist:___34__quiet__34___annex_get_for_centralized_use_case.mdwn
+++ b/doc/todo/wishlist:___34__quiet__34___annex_get_for_centralized_use_case.mdwn
@@ -7,3 +7,8 @@ We would like to be able to get the files without updating the `git-annex` branc
I think the easiest way would be to just add an option to not update the `git-annex` branch when `annex get` is executed.
Thoughts?
+
+> See [[untracked_remotes]] for a todo item that will probably
+> be useful in this sitation. Since that describes better what
+> this bug report seems to be asking for, I am closing this one.
+> [[closed|done]] --[[Joey]]
diff --git a/doc/todo/wishlist:_allow_the_same_remote_to_be_accissable_via_different_methods.mdwn b/doc/todo/wishlist:_allow_the_same_remote_to_be_accissable_via_different_methods.mdwn
index 9a3d953cb..849e73cc3 100644
--- a/doc/todo/wishlist:_allow_the_same_remote_to_be_accissable_via_different_methods.mdwn
+++ b/doc/todo/wishlist:_allow_the_same_remote_to_be_accissable_via_different_methods.mdwn
@@ -1,3 +1,5 @@
This is a wishlist item:
Please allow the same remote to be available via different remotes. So in my LAN my remote is available using a ssh-connection, and when I travel with my laptop, the git-annex can also reach this remote using the Jabber transport.
+
+> [[done]]; this has always been fully supported. --[[Joey]]
diff --git a/doc/bugs/wishlist:_allow_users_to_provide_UUID_when_running___96__git_annex_init__96__.mdwn b/doc/todo/wishlist:_allow_users_to_provide_UUID_when_running___96__git_annex_init__96__.mdwn
index 0dc9ec08a..0dc9ec08a 100644
--- a/doc/bugs/wishlist:_allow_users_to_provide_UUID_when_running___96__git_annex_init__96__.mdwn
+++ b/doc/todo/wishlist:_allow_users_to_provide_UUID_when_running___96__git_annex_init__96__.mdwn
diff --git a/doc/todo/wishlist:_archive_from_remote_with_the_least_free_space.mdwn b/doc/todo/wishlist:_archive_from_remote_with_the_least_free_space.mdwn
new file mode 100644
index 000000000..acc8b363e
--- /dev/null
+++ b/doc/todo/wishlist:_archive_from_remote_with_the_least_free_space.mdwn
@@ -0,0 +1 @@
+An interesting feature, when an archived file cannot be removed from all clients because of the minimum number of copies required, would be to remove it from the repositories with the smallest amount of free space available.
diff --git a/doc/todo/wishlist:_display_name_of_object_when_addWatcher_gets_a_permission_denied.mdwn b/doc/todo/wishlist:_display_name_of_object_when_addWatcher_gets_a_permission_denied.mdwn
new file mode 100644
index 000000000..004194a79
--- /dev/null
+++ b/doc/todo/wishlist:_display_name_of_object_when_addWatcher_gets_a_permission_denied.mdwn
@@ -0,0 +1 @@
+When addWatcher gets a permission denied, it would be helpful to display the name of the object on which the permission was denied, in the error message which shows in the webapp.
diff --git a/doc/todo/wishlist:_display_status_of_remotes_in_the_webapp.mdwn b/doc/todo/wishlist:_display_status_of_remotes_in_the_webapp.mdwn
new file mode 100644
index 000000000..741466994
--- /dev/null
+++ b/doc/todo/wishlist:_display_status_of_remotes_in_the_webapp.mdwn
@@ -0,0 +1 @@
+It would be nice to have an indication of the status of the remotes in the webapp, for example with a field showing "In Sync", "Syncing", or the date of the last successful synchronization for unreachable remotes.
diff --git a/doc/bugs/wishlist:_generic_annex.cost-command.mdwn b/doc/todo/wishlist:_generic_annex.cost-command.mdwn
index 6adf1460e..6adf1460e 100644
--- a/doc/bugs/wishlist:_generic_annex.cost-command.mdwn
+++ b/doc/todo/wishlist:_generic_annex.cost-command.mdwn
diff --git a/doc/bugs/wishlist:_make_git_annex_reinject_work_in_direct_mode.mdwn b/doc/todo/wishlist:_make_git_annex_reinject_work_in_direct_mode.mdwn
index 41c8e574b..41c8e574b 100644
--- a/doc/bugs/wishlist:_make_git_annex_reinject_work_in_direct_mode.mdwn
+++ b/doc/todo/wishlist:_make_git_annex_reinject_work_in_direct_mode.mdwn
diff --git a/doc/bugs/wishlist:_more_descriptive_commit_messages_in_git-annex_branch.mdwn b/doc/todo/wishlist:_more_descriptive_commit_messages_in_git-annex_branch.mdwn
index 3a891fc9b..3a891fc9b 100644
--- a/doc/bugs/wishlist:_more_descriptive_commit_messages_in_git-annex_branch.mdwn
+++ b/doc/todo/wishlist:_more_descriptive_commit_messages_in_git-annex_branch.mdwn
diff --git a/doc/bugs/wishlist:_option_to_print_more_info_with___39__unused__39__.mdwn b/doc/todo/wishlist:_option_to_print_more_info_with___39__unused__39__.mdwn
index 7a9b81f72..7a9b81f72 100644
--- a/doc/bugs/wishlist:_option_to_print_more_info_with___39__unused__39__.mdwn
+++ b/doc/todo/wishlist:_option_to_print_more_info_with___39__unused__39__.mdwn
diff --git a/doc/bugs/wishlist:_query_things_like_description__44___trust_level.mdwn b/doc/todo/wishlist:_query_things_like_description__44___trust_level.mdwn
index d158850cd..d158850cd 100644
--- a/doc/bugs/wishlist:_query_things_like_description__44___trust_level.mdwn
+++ b/doc/todo/wishlist:_query_things_like_description__44___trust_level.mdwn
diff --git a/doc/bugs/wishlist:_query_things_like_description__44___trust_level/comment_1_14311384788312b96e550749ab7de9ea._comment b/doc/todo/wishlist:_query_things_like_description__44___trust_level/comment_1_14311384788312b96e550749ab7de9ea._comment
index 3ac4ba267..3ac4ba267 100644
--- a/doc/bugs/wishlist:_query_things_like_description__44___trust_level/comment_1_14311384788312b96e550749ab7de9ea._comment
+++ b/doc/todo/wishlist:_query_things_like_description__44___trust_level/comment_1_14311384788312b96e550749ab7de9ea._comment
diff --git a/doc/bugs/wishlist:_query_things_like_description__44___trust_level/comment_2_342d1ac07573c7ef4e27f003a692e261._comment b/doc/todo/wishlist:_query_things_like_description__44___trust_level/comment_2_342d1ac07573c7ef4e27f003a692e261._comment
index 3bb92919f..3bb92919f 100644
--- a/doc/bugs/wishlist:_query_things_like_description__44___trust_level/comment_2_342d1ac07573c7ef4e27f003a692e261._comment
+++ b/doc/todo/wishlist:_query_things_like_description__44___trust_level/comment_2_342d1ac07573c7ef4e27f003a692e261._comment
diff --git a/doc/bugs/wishlist:_simple_url_for_webapp.mdwn b/doc/todo/wishlist:_simple_url_for_webapp.mdwn
index 4549f2e74..4549f2e74 100644
--- a/doc/bugs/wishlist:_simple_url_for_webapp.mdwn
+++ b/doc/todo/wishlist:_simple_url_for_webapp.mdwn
diff --git a/doc/bugs/wishlist:_simple_url_for_webapp/comment_1_552aad504fbb68d1f85abfde8c535e69._comment b/doc/todo/wishlist:_simple_url_for_webapp/comment_1_552aad504fbb68d1f85abfde8c535e69._comment
index 1211be9b5..1211be9b5 100644
--- a/doc/bugs/wishlist:_simple_url_for_webapp/comment_1_552aad504fbb68d1f85abfde8c535e69._comment
+++ b/doc/todo/wishlist:_simple_url_for_webapp/comment_1_552aad504fbb68d1f85abfde8c535e69._comment
diff --git a/doc/bugs/wishlist:_support_drop__44___find_on_special_remotes.mdwn b/doc/todo/wishlist:_support_drop__44___find_on_special_remotes.mdwn
index 24cacbf71..24cacbf71 100644
--- a/doc/bugs/wishlist:_support_drop__44___find_on_special_remotes.mdwn
+++ b/doc/todo/wishlist:_support_drop__44___find_on_special_remotes.mdwn
diff --git a/doc/bugs/wishlist:_support_drop__44___find_on_special_remotes/comment_1_f11ed642a83d965076778a162f701e84._comment b/doc/todo/wishlist:_support_drop__44___find_on_special_remotes/comment_1_f11ed642a83d965076778a162f701e84._comment
index 6028933b4..6028933b4 100644
--- a/doc/bugs/wishlist:_support_drop__44___find_on_special_remotes/comment_1_f11ed642a83d965076778a162f701e84._comment
+++ b/doc/todo/wishlist:_support_drop__44___find_on_special_remotes/comment_1_f11ed642a83d965076778a162f701e84._comment
diff --git a/doc/users/tobiastheviking.mdwn b/doc/users/tobiastheviking.mdwn
new file mode 100644
index 000000000..0629e34a9
--- /dev/null
+++ b/doc/users/tobiastheviking.mdwn
@@ -0,0 +1,20 @@
+Tobias Ussing
+
+See:
+
+[[https://github.com/TobiasTheViking/flickrannex/]]
+
+[[https://github.com/TobiasTheViking/imapannex]]
+
+[[https://github.com/TobiasTheViking/dropboxannex]]
+
+[[https://github.com/TobiasTheViking/skydriveannex]]
+
+[[https://github.com/TobiasTheViking/googledriveannex]]
+
+[[https://github.com/TobiasTheViking/owncloudannex]]
+
+[[https://github.com/TobiasTheViking/megaannex]]
+
+[[http://git-annex.branchable.com/forum/nntp__47__usenet_special_remote/]]
+
diff --git a/git-annex.cabal b/git-annex.cabal
index fad2f3d0b..1b96a6365 100644
--- a/git-annex.cabal
+++ b/git-annex.cabal
@@ -1,5 +1,5 @@
Name: git-annex
-Version: 4.20130909
+Version: 4.20130911
Cabal-Version: >= 1.8
License: GPL-3
Maintainer: Joey Hess <joey@kitenet.net>
diff --git a/standalone/licences.gz b/standalone/licences.gz
index 1adb9eb4f..422f84225 100644
--- a/standalone/licences.gz
+++ b/standalone/licences.gz
Binary files differ
diff --git a/standalone/linux/runshell b/standalone/linux/runshell
index a36e49083..6e2e21906 100755
--- a/standalone/linux/runshell
+++ b/standalone/linux/runshell
@@ -19,6 +19,9 @@ if [ ! -e "$base/bin/git" ]; then
echo "** base directory $base does not contain bin/git" >&2
exit 1
fi
+if [ -n "$GIT_ANNEX_STANDLONE_ENV" ]; then
+ echo "** runshell loop detected!"> &2
+fi
# Get absolute path to base, to avoid breakage when things change directories.
orig="$(pwd)"
diff --git a/standalone/osx/git-annex.app/Contents/MacOS/runshell b/standalone/osx/git-annex.app/Contents/MacOS/runshell
index 9f1457e25..5094ad0b2 100755
--- a/standalone/osx/git-annex.app/Contents/MacOS/runshell
+++ b/standalone/osx/git-annex.app/Contents/MacOS/runshell
@@ -21,6 +21,9 @@ if [ ! -e "$bundle/git" ]; then
echo "** bundle directory $bundle does not contain git" >&2
exit 1
fi
+if [ -n "$GIT_ANNEX_STANDLONE_ENV" ]; then
+ echo "** runshell loop detected!"> &2
+fi
# Get absolute path to base, to avoid breakage when things change directories.
orig="$(pwd)"