summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2015-02-22 14:12:07 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2015-02-22 14:12:42 -0400
commitd99f98187fc2cb79e879dcc5047fcf31fd934782 (patch)
treeedd5563f5efe83a9ce6a8bb515c6e9b1379b8319
parent6173c44d0738ca8c9381189a819edecf1d39df3d (diff)
parentd6e7d47a6b8c853e68bf73586a7d5f451760737c (diff)
Merge branch 'master' into database
Conflicts: debian/changelog
-rw-r--r--Build/DistributionUpdate.hs1
-rw-r--r--Utility/Quvi.hs2
-rw-r--r--debian/changelog25
-rw-r--r--doc/bugs/Assistant_merge_loop/comment_15_494f55419f131495a7994afe2a0e9bc3._comment54
-rw-r--r--doc/bugs/SignatureDoesNotMatch_error_when_trying_to_enable_S3_remote_with_IAM_credentials/comment_4_17391f47897f166b763e8f3e33426fcf._comment15
-rw-r--r--doc/bugs/git-annex_on_NAS_eats_all_memory/comment_8_5cabffc139a8db7680346ccf0f4dc429._comment254
-rw-r--r--doc/devblog/day_255__sqlite_concurrent_writers_problem.mdwn2
-rw-r--r--doc/devblog/day_256__sqlite_concurrency_argh.mdwn28
-rw-r--r--doc/devblog/day_257__release_day.mdwn17
-rw-r--r--doc/forum/What_happens_after_terminated_add_of_huge_picture_folder__63__/comment_3_f0a2ec3d0b05d84fb05a1708313a6762._comment12
-rw-r--r--doc/forum/lsof_resource_use_problems/comment_2_7b0d4109c04c47e65420105f0de3b7a2._comment8
-rw-r--r--doc/forum/optimising_lookupkey/comment_3_2c895e4494cddab70ba761c6c48e7cf8._comment11
-rw-r--r--doc/news/version_5.20141219.mdwn20
-rw-r--r--doc/news/version_5.20150219.mdwn34
-rw-r--r--doc/preferred_content/standard_groups/comment_4_f5cd38886b58917fa3c417861fd10a10._comment9
-rw-r--r--doc/related_software.mdwn16
-rw-r--r--doc/special_remotes/S3/comment_17_52d3510016c099d083553f9b3fa40db9._comment10
-rw-r--r--doc/tips/dumb_metadata_extraction_from_xbmc/git-annex-xbmc-playcount.pl2
-rw-r--r--doc/todo/server-level_daemon__63__.mdwn3
-rw-r--r--git-annex.cabal2
20 files changed, 484 insertions, 41 deletions
diff --git a/Build/DistributionUpdate.hs b/Build/DistributionUpdate.hs
index e3990d039..ce5edcdd9 100644
--- a/Build/DistributionUpdate.hs
+++ b/Build/DistributionUpdate.hs
@@ -19,7 +19,6 @@ import Annex.Content
import Backend
import Git.Command
-import Data.Default
import Data.Time.Clock
import Data.Char
import System.Posix.Directory
diff --git a/Utility/Quvi.hs b/Utility/Quvi.hs
index 33653b07b..0669e7351 100644
--- a/Utility/Quvi.hs
+++ b/Utility/Quvi.hs
@@ -63,7 +63,7 @@ parseEnum s = Page
probeVersion :: IO QuviVersion
probeVersion = catchDefaultIO NoQuvi $
- examine <$> processTranscript "quviaaa" ["--version"] Nothing
+ examine <$> processTranscript "quvi" ["--version"] Nothing
where
examine (s, True)
| "quvi v0.4" `isInfixOf` s = Quvi04
diff --git a/debian/changelog b/debian/changelog
index 1daa00176..c579b73b7 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,16 @@
-git-annex (5.20150206) UNRELEASED; urgency=medium
+git-annex (5.2015022) UNRELEASED; urgency=medium
+
+ * fsck: Incremental fsck uses sqlite to store its records, instead
+ of abusing the sticky bit. Existing sticky bits are ignored;
+ incremental fscks started by old versions won't be resumed by
+ this version.
+ * fsck: Multiple incremental fscks of different repos (including remotes)
+ can now be running at the same time in the same repo without it
+ getting confused about which files have been checked for which remotes.
+
+ -- Joey Hess <id@joeyh.name> Thu, 19 Feb 2015 14:16:03 -0400
+
+git-annex (5.20150219) unstable; urgency=medium
* glacier: Detect when the glacier command in PATH is the wrong one,
from boto, rather than from glacier-cli, and refuse to use it,
@@ -21,7 +33,7 @@ git-annex (5.20150206) UNRELEASED; urgency=medium
* addurl: Avoid crash if quvi is not installed, when git-annex was
built with process-1.2
* bittorrent: Fix mojibake introduced in parsing arai2c progress output.
- * fsck --from: If a download from a remote fails, propigate the failure.
+ * fsck --from: If a download from a remote fails, propagate the failure.
* metadata: When setting metadata, do not recurse into directories by
default, since that can be surprising behavior and difficult to recover
from. The old behavior is available by using --force.
@@ -32,15 +44,8 @@ git-annex (5.20150206) UNRELEASED; urgency=medium
and push.
* remotedaemon: Use the ssh-options git config.
* Linux standalone: Improved process names of linker shimmed programs.
- * fsck: Incremental fsck uses sqlite to store its records, instead
- of abusing the sticky bit. Existing sticky bits are ignored,
- incremental fscks started by old versions won't be resumed by
- this version.
- * fsck: Multiple incremental fscks of different repos (some remote)
- can now be in progress at the same time in the same repo without it
- getting confused about which files have been checked for which remotes.
- -- Joey Hess <id@joeyh.name> Fri, 06 Feb 2015 13:57:08 -0400
+ -- Joey Hess <id@joeyh.name> Thu, 19 Feb 2015 14:16:03 -0400
git-annex (5.20150205) unstable; urgency=medium
diff --git a/doc/bugs/Assistant_merge_loop/comment_15_494f55419f131495a7994afe2a0e9bc3._comment b/doc/bugs/Assistant_merge_loop/comment_15_494f55419f131495a7994afe2a0e9bc3._comment
new file mode 100644
index 000000000..db92aadc6
--- /dev/null
+++ b/doc/bugs/Assistant_merge_loop/comment_15_494f55419f131495a7994afe2a0e9bc3._comment
@@ -0,0 +1,54 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk9nck8WX8-ADF3Fdh5vFo4Qrw1I_bJcR8"
+ nickname="Jon Ander"
+ subject="comment 15"
+ date="2015-02-18T12:39:04Z"
+ content="""
+This is happening in in a repo shared by two computers using the webapp with version 5.20141125. All are empty commits.
+
+ * 23da33e - (7 minutes ago) merge refs/remotes/bitbucket/synced/master (HEAD, bitbucket/synced/master, annex/direct/master)
+ * 7bd23db - (67 minutes ago) merge refs/remotes/bitbucket/synced/master
+ * d2f5c6b - (2 hours ago) merge refs/remotes/bitbucket/synced/master
+ * 05c0448 - (12 hours ago) merge refs/remotes/bitbucket/synced/master
+ * 5c370aa - (19 hours ago) merge refs/remotes/bitbucket/synced/master
+ * c6d7be4 - (20 hours ago) merge refs/remotes/bitbucket/synced/master
+ * 507a6c7 - (21 hours ago) merge refs/remotes/bitbucket/synced/master
+ * 6932fec - (22 hours ago) merge refs/remotes/bitbucket/synced/master
+ * cc0efa1 - (23 hours ago) merge refs/remotes/bitbucket/synced/master
+ * 12a7b8f - (24 hours ago) merge refs/remotes/bitbucket/synced/master
+ * 49a3f2c - (25 hours ago) merge refs/remotes/bitbucket/synced/master
+ * 6611612 - (26 hours ago) merge refs/remotes/bitbucket/synced/master
+ * 303895c - (2 days ago) merge refs/remotes/bitbucket/synced/master
+ * 3f8c96b - (2 days ago) merge refs/remotes/bitbucket/synced/master
+ * f283e20 - (2 days ago) merge refs/remotes/bitbucket/synced/master
+ * 96b920e - (2 days ago) merge refs/remotes/bitbucket/synced/master
+ * 2c88b50 - (2 days ago) merge refs/remotes/bitbucket/synced/master
+ * 5f6643b - (2 days ago) merge refs/remotes/bitbucket/synced/master
+ * 7a2f5ff - (2 days ago) merge refs/remotes/bitbucket/synced/master
+ * 3bdb942 - (2 days ago) merge refs/remotes/bitbucket/synced/master
+ * d24de2b - (2 days ago) merge refs/remotes/bitbucket/synced/master
+ * b29d45e - (2 days ago) merge refs/remotes/bitbucket/synced/master
+ * 871adb7 - (2 days ago) merge refs/remotes/bitbucket/synced/master
+ |\
+ * | 4138b01 - (2 days ago) merge refs/remotes/bitbucket/synced/master
+ |/
+ * c754adc - (2 days ago) merge refs/remotes/bitbucket/synced/master
+ * 587a56a - (2 days ago) merge refs/remotes/bitbucket/synced/master
+ * 2d257fd - (2 days ago) merge refs/remotes/bitbucket/synced/master
+ * 23018bf - (2 days ago) merge refs/remotes/bitbucket/synced/master
+ * 9f202b7 - (2 days ago) merge refs/remotes/bitbucket/synced/master
+ * bdd40f4 - (2 days ago) merge refs/remotes/bitbucket/synced/master
+ * 146b1a5 - (4 days ago) merge refs/remotes/bitbucket/synced/master (bitbucket/master)
+ |\
+ * | 3886b4a - (4 days ago) merge refs/remotes/github/synced/master
+ * | 5714860 - (4 days ago) merge refs/remotes/github/synced/master
+ * | 64325a0 - (4 days ago) merge refs/remotes/github/synced/master
+ * | f1b49e6 - (5 days ago) merge refs/remotes/github/synced/master
+ * | 17330c8 - (5 days ago) merge refs/remotes/github/synced/master
+ |/
+ * 54f9a8b - (6 days ago) (synced/master, master)
+ * ceb8133 - (6 days ago)
+ * f36ae3b - (6 days ago)
+ * 6acdf4c - (6 days ago)
+
+"""]]
diff --git a/doc/bugs/SignatureDoesNotMatch_error_when_trying_to_enable_S3_remote_with_IAM_credentials/comment_4_17391f47897f166b763e8f3e33426fcf._comment b/doc/bugs/SignatureDoesNotMatch_error_when_trying_to_enable_S3_remote_with_IAM_credentials/comment_4_17391f47897f166b763e8f3e33426fcf._comment
new file mode 100644
index 000000000..1d221cb3a
--- /dev/null
+++ b/doc/bugs/SignatureDoesNotMatch_error_when_trying_to_enable_S3_remote_with_IAM_credentials/comment_4_17391f47897f166b763e8f3e33426fcf._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmg0NqVniTETKYIWr6eyYRJnakNg0A6tRc"
+ nickname="Oliver"
+ subject="comment 4"
+ date="2015-02-19T11:54:14Z"
+ content="""
+I used `s3cmd` with the same credentials and I'm able to list the bucket contents. That file does exist, and it does contain the line expected. If I try and make the bucket:
+
+s3cmd mb s3://s3musicencrypted-a7e22956-5ce2-11e2-97a5-6f33220ffbf3
+ERROR: S3 error: 409 (BucketAlreadyOwnedByYou): Your previous request to create the named bucket succeeded and you already own it.
+
+So I should be able to create buckets, but of course creating a bucket that already exists doesn't really do anything.
+
+Taking exactly the same credentials as my .s3cfg and using them with git annex continues to fail with signature errors.
+"""]]
diff --git a/doc/bugs/git-annex_on_NAS_eats_all_memory/comment_8_5cabffc139a8db7680346ccf0f4dc429._comment b/doc/bugs/git-annex_on_NAS_eats_all_memory/comment_8_5cabffc139a8db7680346ccf0f4dc429._comment
new file mode 100644
index 000000000..b0cb8674f
--- /dev/null
+++ b/doc/bugs/git-annex_on_NAS_eats_all_memory/comment_8_5cabffc139a8db7680346ccf0f4dc429._comment
@@ -0,0 +1,254 @@
+[[!comment format=c
+ username="https://www.google.com/accounts/o8/id?id=AItOawlmLuHhscJsoAqb9q0N3LdtHum6LjY1LK4"
+ nickname="Markus"
+ subject="comment 8"
+ date="2015-02-18T12:39:17Z"
+ content="""
+Diff between the straces (the first ~490 lines have been identical and are removed for simplicity)
+
+Running per ssh:
+mprotect(0x2b1e2000, 8192, PROT_READ) = 0
+mprotect(0x2aafb000, 4096, PROT_READ) = 0
+mprotect(0x2b24e000, 4096, PROT_READ) = 0
+mprotect(0x2aca5000, 4096, PROT_READ) = 0
+mprotect(0x2ad6d000, 4096, PROT_READ) = 0
+mprotect(0x2b21f000, 4096, PROT_READ) = 0
+mprotect(0x2acdd000, 4096, PROT_READ) = 0
+mprotect(0x2ac24000, 4096, PROT_READ) = 0
+mprotect(0x2aae5000, 4096, PROT_READ) = 0
+mprotect(0x2ad27000, 20480, PROT_READ) = 0
+mprotect(0x2acbd000, 4096, PROT_READ) = 0
+mprotect(0x2b0a0000, 4096, PROT_READ) = 0
+mprotect(0x2ab55000, 4096, PROT_READ) = 0
+mprotect(0x2aacd000, 4096, PROT_READ) = 0
+mprotect(0x2ab32000, 4096, PROT_READ) = 0
+mprotect(0x2afeb000, 16384, PROT_READ) = 0
+mprotect(0x2aeaf000, 20480, PROT_READ) = 0
+mprotect(0x2abfd000, 4096, PROT_READ) = 0
+mprotect(0x2ada4000, 4096, PROT_READ) = 0
+mprotect(0x2abbc000, 4096, PROT_READ) = 0
+set_tid_address(0x2ac28068) = 18015
+set_robust_list(0x2ac28070, 0xc) = 0
+rt_sigaction(SIGRTMIN, {0x2ac04550, [], SA_SIGINFO|0x4000000}, NULL, 8) = 0
+rt_sigaction(SIGRT_1, {0x2ac043e4, [], SA_RESTART|SA_SIGINFO|0x4000000}, NULL, 8) = 0
+rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
+getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0
+futex(0x2ad2cc44, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+brk(0) = 0x2bf15000
+brk(0x2bf36000) = 0x2bf36000
+open(\"/dev/urandom\", O_RDONLY|O_LARGEFILE) = 3
+fcntl64(3, F_GETFD) = 0
+fcntl64(3, F_SETFD, FD_CLOEXEC) = 0
+fstat64(3, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 9), ...}) = 0
+clock_gettime(CLOCK_REALTIME, {1424257023, 820788195}) = 0
+getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 20000}, ru_stime={0, 10000}, ...}) = 0
+read(3, \"yx$\17\207\4\364\233\366\361\210[,\334(\214\\"\343\226\2'd\303\24\306\254\323\363\2523\36\2\", 32) = 32
+read(3, \"\243e\370\36n\320@l\345\27\6/\323<U\240xM\221\2507m\24\31\200mI\355\0043*\375\", 32) = 32
+read(3, \">%5`2\355\355B\", 8) = 8
+clock_getres(0x2 /* CLOCK_??? */, {0, 1}) = 0
+clock_gettime(0x2 /* CLOCK_??? */, {0, 44157400}) = 0
+clock_gettime(CLOCK_MONOTONIC, {438775, 660164522}) = 0
+brk(0x2bf57000) = 0x2bf57000
+mmap2(NULL, 2097152, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b250000
+munmap(0x2b250000, 720896) = 0
+munmap(0x2b400000, 327680) = 0
+timer_create(CLOCK_MONOTONIC, {0, SIGVTALRM, SIGEV_SIGNAL, {...}}, {0x1}) = 0
+rt_sigaction(SIGVTALRM, {0x3cc4e08, [], SA_RESTART|0x4000000}, NULL, 8) = 0
+timer_settime(0x1, 0, {it_interval={0, 10000000}, it_value={0, 10000000}}, NULL) = 0
+rt_sigaction(SIGINT, {0x3cce17c, [], 0x4000000 /* SA_??? */}, {SIG_DFL, [], 0}, 8) = 0
+rt_sigaction(SIGINT, NULL, {0x3cce17c, [], 0x4000000 /* SA_??? */}, 8) = 0
+rt_sigaction(SIGINT, {0x3cce17c, [], 0x4000000 /* SA_??? */}, NULL, 8) = 0
+rt_sigaction(SIGPIPE, {0x3cce0b4, [], 0x4000000 /* SA_??? */}, {SIG_DFL, [], 0}, 8) = 0
+rt_sigaction(SIGTSTP, {0x3cce1c0, [], 0x4000000 /* SA_??? */}, NULL, 8) = 0
+epoll_create(0x100) = 4
+fcntl64(4, F_SETFD, FD_CLOEXEC) = 0
+pipe([5, 6]) = 0
+fcntl64(6, F_GETFL) = 0x1 (flags O_WRONLY)
+fcntl64(6, F_SETFL, O_WRONLY|O_NONBLOCK) = 0
+fcntl64(5, F_SETFD, FD_CLOEXEC) = 0
+fcntl64(6, F_SETFD, FD_CLOEXEC) = 0
+mmap2(NULL, 8388608, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS|0x20000, -1, 0) = 0x2b400000
+mprotect(0x2b400000, 4096, PROT_NONE) = 0
+clone(child_stack=0x2bbfef98, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x2bbff4c8, tls=0x2bbff920, child_tidptr=0x2bbff4c8) = 18039
+futex(0x2bf3aa6c, FUTEX_WAIT_PRIVATE, 1, NULL) = 0
+futex(0x2bf3aa98, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
+futex(0x2bf3aa98, FUTEX_WAKE_PRIVATE, 1) = 0
+futex(0x41981d0, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
+futex(0x41981d0, FUTEX_WAKE_PRIVATE, 1) = 0
+eventfd2(0, 0) = 7
+fcntl64(7, F_GETFL) = 0x2 (flags O_RDWR)
+fcntl64(7, F_SETFL, O_RDWR|O_NONBLOCK) = 0
+fcntl64(7, F_SETFD, FD_CLOEXEC) = 0
+epoll_ctl(0x4, 0x1, 0x5, 0x2b304430) = 0
+epoll_ctl(0x4, 0x1, 0x7, 0x2b304448) = 0
+clock_gettime(0x2 /* CLOCK_??? */, {0, 46001320}) = 0
+clock_gettime(CLOCK_MONOTONIC, {438775, 665190920}) = 0
+futex(0x2bf3aa6c, FUTEX_WAIT_PRIVATE, 3, NULL) = 0
+futex(0x2bf3aa98, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
+futex(0x2bf3aa98, FUTEX_WAKE_PRIVATE, 1) = 0
+futex(0x41981d0, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
+futex(0x41981d0, FUTEX_WAKE_PRIVATE, 1) = 0
+rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
+rt_sigaction(SIGINT, {0x3cce0b8, [], SA_RESETHAND|SA_SIGINFO|0x4000000}, NULL, 8) = 0
+rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
+open(\"/usr/lib/arm-linux-gnueabi/gconv/gconv-modules.cache\", O_RDONLY) = -1 ENOENT (No such file or directory)
+open(\"/usr/lib/arm-linux-gnueabi/gconv/gconv-modules\", O_RDONLY|0x80000) = -1 ENOENT (No such file or directory)
+futex(0x2b1e4ef4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
+sigreturn() = ? (mask now [TRAP FPE KILL SEGV USR2 TERM STKFLT CHLD CONT TSTP TTIN TTOU XCPU VTALRM WINCH PWR])
+--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
+sigreturn() = ? (mask now [TRAP FPE KILL SEGV USR2 TERM STKFLT CHLD CONT TSTP TTIN TTOU XCPU VTALRM WINCH PWR])
+
+Running local on NAS:
+mprotect(0x2b0dc000, 8192, PROT_READ) = 0
+mprotect(0x2ae4a000, 4096, PROT_READ) = 0
+mprotect(0x2b241000, 4096, PROT_READ) = 0
+mprotect(0x2aee9000, 4096, PROT_READ) = 0
+mprotect(0x2b19e000, 4096, PROT_READ) = 0
+mprotect(0x2b1d7000, 4096, PROT_READ) = 0
+mprotect(0x2b15c000, 4096, PROT_READ) = 0
+mprotect(0x2ae71000, 4096, PROT_READ) = 0
+mprotect(0x2ab70000, 4096, PROT_READ) = 0
+mprotect(0x2b138000, 20480, PROT_READ) = 0
+mprotect(0x2b0f8000, 4096, PROT_READ) = 0
+mprotect(0x2af9a000, 4096, PROT_READ) = 0
+mprotect(0x2ab57000, 4096, PROT_READ) = 0
+mprotect(0x2ab3a000, 4096, PROT_READ) = 0
+mprotect(0x2ab1b000, 4096, PROT_READ) = 0
+mprotect(0x2ae33000, 16384, PROT_READ) = 0
+mprotect(0x2acf7000, 20480, PROT_READ) = 0
+mprotect(0x2abec000, 4096, PROT_READ) = 0
+mprotect(0x2abab000, 4096, PROT_READ) = 0
+mprotect(0x2aaf3000, 4096, PROT_READ) = 0
+set_tid_address(0x2b2a8068) = 18072
+set_robust_list(0x2b2a8070, 0xc) = 0
+rt_sigaction(SIGRTMIN, {0x2ae51550, [], SA_SIGINFO|0x4000000}, NULL, 8) = 0
+rt_sigaction(SIGRT_1, {0x2ae513e4, [], SA_RESTART|SA_SIGINFO|0x4000000}, NULL, 8) = 0
+rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
+getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0
+futex(0x2b13dc44, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+brk(0) = 0x2ca10000
+brk(0x2ca31000) = 0x2ca31000
+open(\"/dev/urandom\", O_RDONLY|O_LARGEFILE) = 3
+fcntl64(3, F_GETFD) = 0
+fcntl64(3, F_SETFD, FD_CLOEXEC) = 0
+fstat64(3, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 9), ...}) = 0
+clock_gettime(CLOCK_REALTIME, {1424257086, 456931329}) = 0
+getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 20000}, ru_stime={0, 0}, ...}) = 0
+read(3, \"l\36K\322\231Ud\302.\335\301dhC)A\260\374~\350\254\341-\267\215\300\313\334\215XqI\", 32) = 32
+read(3, \"\25017J\372\361^\374\254\347$\f=Ag)\10r\25\317r]\216\337G\371M\27\321\326\0(\", 32) = 32
+read(3, \"\245\271\251\373\270\350S1\", 8) = 8
+open(\"/usr/lib/locale/locale-archive\", O_RDONLY|O_LARGEFILE|0x80000) = 4
+fstat64(4, {st_mode=S_IFREG|0644, st_size=14362288, ...}) = 0
+mmap2(NULL, 2097152, PROT_READ, MAP_PRIVATE, 4, 0) = 0x2b36b000
+close(4) = 0
+clock_getres(0x2 /* CLOCK_??? */, {0, 1}) = 0
+clock_gettime(0x2 /* CLOCK_??? */, {0, 29204680}) = 0
+clock_gettime(CLOCK_MONOTONIC, {438838, 301653485}) = 0
+brk(0x2ca52000) = 0x2ca52000
+mmap2(NULL, 2097152, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b579000
+munmap(0x2b579000, 552960) = 0
+munmap(0x2b700000, 495616) = 0
+timer_create(CLOCK_MONOTONIC, {0, SIGVTALRM, SIGEV_SIGNAL, {...}}, {0x2}) = 0
+rt_sigaction(SIGVTALRM, {0x3cc4e08, [], SA_RESTART|0x4000000}, NULL, 8) = 0
+timer_settime(0x2, 0, {it_interval={0, 10000000}, it_value={0, 10000000}}, NULL) = 0
+rt_sigaction(SIGINT, {0x3cce17c, [], 0x4000000 /* SA_??? */}, {SIG_DFL, [], 0}, 8) = 0
+rt_sigaction(SIGINT, NULL, {0x3cce17c, [], 0x4000000 /* SA_??? */}, 8) = 0
+rt_sigaction(SIGINT, {0x3cce17c, [], 0x4000000 /* SA_??? */}, NULL, 8) = 0
+rt_sigaction(SIGPIPE, {0x3cce0b4, [], 0x4000000 /* SA_??? */}, {SIG_DFL, [], 0}, 8) = 0
+rt_sigaction(SIGTSTP, {0x3cce1c0, [], 0x4000000 /* SA_??? */}, NULL, 8) = 0
+epoll_create(0x100) = 4
+fcntl64(4, F_SETFD, FD_CLOEXEC) = 0
+pipe([5, 6]) = 0
+fcntl64(6, F_GETFL) = 0x1 (flags O_WRONLY)
+fcntl64(6, F_SETFL, O_WRONLY|O_NONBLOCK) = 0
+fcntl64(5, F_SETFD, FD_CLOEXEC) = 0
+fcntl64(6, F_SETFD, FD_CLOEXEC) = 0
+mmap2(NULL, 8388608, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS|0x20000, -1, 0) = 0x2b700000
+mprotect(0x2b700000, 4096, PROT_NONE) = 0
+clone(child_stack=0x2befef98, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x2beff4c8, tls=0x2beff920, child_tidptr=0x2beff4c8) = 18073
+futex(0x2ca36264, FUTEX_WAIT_PRIVATE, 1, NULL) = 0
+futex(0x2ca36290, FUTEX_WAKE_PRIVATE, 1) = 0
+eventfd2(0, 0) = 7
+fcntl64(7, F_GETFL) = 0x2 (flags O_RDWR)
+fcntl64(7, F_SETFL, O_RDWR|O_NONBLOCK) = 0
+fcntl64(7, F_SETFD, FD_CLOEXEC) = 0
+epoll_ctl(0x4, 0x1, 0x5, 0x2b604430) = 0
+epoll_ctl(0x4, 0x1, 0x7, 0x2b604448) = 0
+futex(0x2ca36314, FUTEX_WAKE_OP_PRIVATE, 1, 1, 0x2ca36310, {FUTEX_OP_SET, 0, FUTEX_OP_CMP_GT, 1}) = 1
+clock_gettime(0x2 /* CLOCK_??? */, {0, 31248840}) = 0
+clock_gettime(CLOCK_MONOTONIC, {438838, 311493486}) = 0
+futex(0x2ca36264, FUTEX_WAIT_PRIVATE, 3, NULL) = 0
+futex(0x2ca36290, FUTEX_WAKE_PRIVATE, 1) = 0
+rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
+rt_sigaction(SIGINT, {0x3cce0b8, [], SA_RESETHAND|SA_SIGINFO|0x4000000}, NULL, 8) = 0
+rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
+ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
+stat64(\"/volume1/homes/admin/GitAnnex.git\", 0x2b604890) = -1 ENOENT (No such file or directory)
+getcwd(\"/volume1/homes/admin\", 4096) = 21
+getcwd(\"/volume1/homes/admin\", 4096) = 21
+getcwd(\"/volume1/homes/admin\", 4096) = 21
+pipe([8, 9]) = 0
+pipe([10, 11]) = 0
+rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
+timer_settime(0x2, 0, {it_interval={0, 0}, it_value={0, 0}}, NULL) = 0
+vfork() = 18074
+close(9) = 0
+fcntl64(8, F_SETFD, FD_CLOEXEC) = 0
+close(11) = 0
+fcntl64(10, F_SETFD, FD_CLOEXEC) = 0
+read(10, \"\", 4) = 0
+close(10) = 0
+rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
+timer_settime(0x2, 0, {it_interval={0, 10000000}, it_value={0, 10000000}}, NULL) = 0
+fcntl64(8, F_GETFL) = 0 (flags O_RDONLY)
+fcntl64(8, F_SETFL, O_RDONLY|O_NONBLOCK) = 0
+ioctl(8, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7ea3e7ac) = -1 EINVAL (Invalid argument)
+read(8, 0x2b6f1010, 8096) = -1 EAGAIN (Resource temporarily unavailable)
+epoll_ctl(0x4, 0x1, 0x8, 0x2b604d0c) = 0
+write(7, \"\1\0\0\0\0\0\0\0\", 8) = 8
+futex(0x2ca36314, FUTEX_WAKE_OP_PRIVATE, 1, 1, 0x2ca36310, {FUTEX_OP_SET, 0, FUTEX_OP_CMP_GT, 1}) = 1
+futex(0x2ca36340, FUTEX_WAKE_PRIVATE, 1) = 1
+futex(0x41981d0, FUTEX_WAKE_PRIVATE, 1) = 1
+futex(0x2ca36264, FUTEX_WAIT_PRIVATE, 5, NULL) = ? ERESTARTSYS (To be restarted)
+--- SIGCHLD (Child exited) @ 0 (0) ---
+futex(0x2ca36264, FUTEX_WAIT_PRIVATE, 5, NULL) = -1 EAGAIN (Resource temporarily unavailable)
+futex(0x2ca36290, FUTEX_WAKE_PRIVATE, 1) = 0
+read(8, \"user.email\nbraun_markus@gmx.de\0u\"..., 8096) = 211
+read(8, \"\", 8096) = 0
+close(8) = 0
+wait4(18074, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 18074
+rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
+rt_sigaction(SIGINT, {SIG_DFL, [], 0x4000000 /* SA_??? */}, NULL, 8) = 0
+rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
+select(2, [], [1], NULL, {0, 0}) = 1 (out [1], left {0, 0})
+write(1, \"annex.uuid=8d7304a1-6ea5-46cc-83\"..., 48) = 48
+select(2, [], [1], NULL, {0, 0}) = 1 (out [1], left {0, 0})
+write(1, \"core.gcrypt-id=\n\", 16) = 16
+wait4(-1, 0x2b604f10, WNOHANG|WSTOPPED, NULL) = -1 ECHILD (No child processes)
+clock_gettime(0x2 /* CLOCK_??? */, {0, 36727080}) = 0
+clock_gettime(CLOCK_MONOTONIC, {438838, 341180247}) = 0
+write(6, \"\376\", 1) = 1
+rt_sigprocmask(SIG_BLOCK, [], [], 8) = 0
+clock_gettime(0x2 /* CLOCK_??? */, {0, 36947040}) = 0
+clock_gettime(CLOCK_MONOTONIC, {438838, 341757433}) = 0
+clock_getres(0x3 /* CLOCK_??? */, {0, 1}) = 0
+clock_gettime(0x3 /* CLOCK_??? */, {0, 36313200}) = 0
+rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
+futex(0x2ca36314, FUTEX_WAKE_OP_PRIVATE, 1, 1, 0x2ca36310, {FUTEX_OP_SET, 0, FUTEX_OP_CMP_GT, 1}) = 1
+futex(0x2ca36340, FUTEX_WAKE_PRIVATE, 1) = 1
+futex(0x41981d0, FUTEX_WAKE_PRIVATE, 1) = 1
+timer_settime(0x2, 0, {it_interval={0, 0}, it_value={0, 0}}, NULL) = 0
+rt_sigaction(SIGVTALRM, {SIG_IGN, [], SA_INTERRUPT|SA_NODEFER|SA_RESETHAND|0x4000000}, {0x3cc4e08, [], SA_RESTART|0x4000000}, 8) = 0
+timer_delete(0x2) = 0
+rt_sigprocmask(SIG_BLOCK, [TTOU], [], 8) = 0
+rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
+rt_sigaction(SIGINT, {SIG_DFL, [], 0x4000000 /* SA_??? */}, NULL, 8) = 0
+rt_sigaction(SIGPIPE, {SIG_DFL, [], 0x4000000 /* SA_??? */}, NULL, 8) = 0
+rt_sigaction(SIGTSTP, {SIG_DFL, [], 0x4000000 /* SA_??? */}, NULL, 8) = 0
+clock_gettime(0x2 /* CLOCK_??? */, {0, 38184040}) = 0
+clock_gettime(CLOCK_MONOTONIC, {438838, 344573245}) = 0
+close(3) = 0
+exit_group(0) = ?
+
+"""]]
diff --git a/doc/devblog/day_255__sqlite_concurrent_writers_problem.mdwn b/doc/devblog/day_255__sqlite_concurrent_writers_problem.mdwn
index 779f3f7fd..05b431a4d 100644
--- a/doc/devblog/day_255__sqlite_concurrent_writers_problem.mdwn
+++ b/doc/devblog/day_255__sqlite_concurrent_writers_problem.mdwn
@@ -4,7 +4,7 @@ multiple concurrent fsck processes.
The first problem was that having `fsck --incremental` running and starting a
new `fsck --incremental` caused it to crash. And with good reason, since
starting a new incremental fsck deletes the old database, the old process
-was left writing to a datbase that had been deleted and recreated out from
+was left writing to a database that had been deleted and recreated out from
underneath it. Fixed with some locking.
Next problem is harder. Sqlite doesn't support multiple concurrent writers
diff --git a/doc/devblog/day_256__sqlite_concurrency_argh.mdwn b/doc/devblog/day_256__sqlite_concurrency_argh.mdwn
new file mode 100644
index 000000000..df02d47be
--- /dev/null
+++ b/doc/devblog/day_256__sqlite_concurrency_argh.mdwn
@@ -0,0 +1,28 @@
+Breaking news: gitlab.com repositories now support git-annex!
+
+* [GitLab Annex solves the problem of versioning large binaries with git](https://about.gitlab.com/2015/02/17/gitlab-annex-solves-the-problem-of-versioning-large-binaries-with-git/)
+* [freely licensed source code](https://gitlab.com/gitlab-org/gitlab-shell)
+
+A very nice surprise! More git hosters should do this..
+
+----
+
+Back to sqlite concurrency, I thought I had it dealt with, but more testing
+today has turned up a lot more problems with sqlite and concurrent writers
+(and readers).
+
+First, I noticed that a process can be happily writing changes to the
+database, but if a second process starts reading from the database, this
+will make the writier start failing with BUSY, and keep failing until the
+second process goes idle. It turns out the solution to this is to use WAL
+mode, which prevents readers from blocking writers.
+
+After several hours (persistent doesn't make it easy to enable WAL mode),
+it seemed pretty robust with concurrent fsck.
+
+But then I saw SELECT fail with BUSY. I don't understand why a reader would
+fail in WAL mode; that's counter to the documentation. My best guess is
+that this happens when a checkpoint is being made.
+
+This seems to be a real bug in sqlite. It may only affect the older
+versions bundled with persistent.
diff --git a/doc/devblog/day_257__release_day.mdwn b/doc/devblog/day_257__release_day.mdwn
new file mode 100644
index 000000000..bd3057145
--- /dev/null
+++ b/doc/devblog/day_257__release_day.mdwn
@@ -0,0 +1,17 @@
+Today's release doesn't have the database branch merged of course, but it
+still has a significant amount of changes.
+
+Developed a test case for the sqlite problem, that
+reliably reproduces it, and sent it to the sqlite mailing list. It seems
+that under heavy write load, when a new connection is made to the database,
+SELECT can fail for a little while. Once one SELECT succeeds, that database
+connection becomes solid, and won't fail any more (apparently). This makes
+me think there might be some connection initialization steps that don't end
+up finishing before the SELECT goes through in this situation. I should be
+able to work around this problem by probing new connections for stability,
+and probably will have to, since it'll be years before any bug fixed sqlite
+is available everywhere.
+
+I also noticed that current git-annex incremental parallel fsck doesn't
+really parallelize well; eg the processes do duplicate work. So, the
+database branch is not really a regression in this area.
diff --git a/doc/forum/What_happens_after_terminated_add_of_huge_picture_folder__63__/comment_3_f0a2ec3d0b05d84fb05a1708313a6762._comment b/doc/forum/What_happens_after_terminated_add_of_huge_picture_folder__63__/comment_3_f0a2ec3d0b05d84fb05a1708313a6762._comment
new file mode 100644
index 000000000..d06b50965
--- /dev/null
+++ b/doc/forum/What_happens_after_terminated_add_of_huge_picture_folder__63__/comment_3_f0a2ec3d0b05d84fb05a1708313a6762._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawldTFGlKsKUyq6F6CJ22CNBnmYJ0LQbLUQ"
+ nickname="Rolandas"
+ subject="comment 3"
+ date="2015-02-18T06:58:59Z"
+ content="""
+Jes, it was an entirely new git repo and I removed .git folder and start over.<br>
+The question was is there some sort of „UNDO“ in this case.<br>
+I get it now.<br>
+I will read internals documentation.<br>
+Thank You very much!<br>
+"""]]
diff --git a/doc/forum/lsof_resource_use_problems/comment_2_7b0d4109c04c47e65420105f0de3b7a2._comment b/doc/forum/lsof_resource_use_problems/comment_2_7b0d4109c04c47e65420105f0de3b7a2._comment
new file mode 100644
index 000000000..a74832bba
--- /dev/null
+++ b/doc/forum/lsof_resource_use_problems/comment_2_7b0d4109c04c47e65420105f0de3b7a2._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmuT_R0AecWcfCFTN055N8rD_WwQkgo1PE"
+ nickname="Tomas"
+ subject="macosx 10.9.5"
+ date="2015-02-19T20:18:05Z"
+ content="""
+I have the same issue.
+"""]]
diff --git a/doc/forum/optimising_lookupkey/comment_3_2c895e4494cddab70ba761c6c48e7cf8._comment b/doc/forum/optimising_lookupkey/comment_3_2c895e4494cddab70ba761c6c48e7cf8._comment
new file mode 100644
index 000000000..5ee659958
--- /dev/null
+++ b/doc/forum/optimising_lookupkey/comment_3_2c895e4494cddab70ba761c6c48e7cf8._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="anarcat"
+ subject="thanks"
+ date="2015-02-18T21:53:52Z"
+ content="""
+great, thanks for the feedback!
+
+i agree that 25ms is quite fast to fire up a 52MB binary. :) i am just saying that if this is going to end up as part of building a webpage, i need something faster, or cache the results somewhere.
+
+duly noted for the other points, thanks again. i see a great intimate relationship building between `git cat-file` and me. ;)
+"""]]
diff --git a/doc/news/version_5.20141219.mdwn b/doc/news/version_5.20141219.mdwn
deleted file mode 100644
index 74d228c52..000000000
--- a/doc/news/version_5.20141219.mdwn
+++ /dev/null
@@ -1,20 +0,0 @@
-git-annex 5.20141219 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
- * Webapp: When adding a new box.com remote, use the new style chunking.
- Thanks, Jon Ander Peñalba.
- * External special remote protocol now includes commands for setting
- and getting the urls associated with a key.
- * Urls can now be claimed by remotes. This will allow creating,
- for example, a external special remote that handles magnet: and
- *.torrent urls.
- * Use wget -q --show-progress for less verbose wget output,
- when built with wget 1.16.
- * Added bittorrent special remote.
- * addurl behavior change: When downloading an url ending in .torrent,
- it will download files from bittorrent, instead of the old behavior
- of adding the torrent file to the repository.
- * Added Recommends on aria2.
- * When possible, build with the haskell torrent library for parsing
- torrent files. As a fallback, can instead use btshowmetainfo from
- bittornado | bittorrent.
- * Fix build with -f-S3."""]] \ No newline at end of file
diff --git a/doc/news/version_5.20150219.mdwn b/doc/news/version_5.20150219.mdwn
new file mode 100644
index 000000000..0225e8562
--- /dev/null
+++ b/doc/news/version_5.20150219.mdwn
@@ -0,0 +1,34 @@
+git-annex 5.20150219 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * glacier: Detect when the glacier command in PATH is the wrong one,
+ from boto, rather than from glacier-cli, and refuse to use it,
+ since the boto program fails to fail when passed
+ parameters it does not understand.
+ * groupwanted: New command to set the groupwanted preferred content
+ expression.
+ * import: Support file matching options such as --exclude, --include,
+ --smallerthan, --largerthan
+ * The file matching options are now only accepted by commands that
+ can actually use them, instead of by all commands.
+ * import: Avoid checksumming file twice when run in the default
+ or --duplicate mode.
+ * Windows: Fix bug in dropping an annexed file, which
+ caused a symlink to be staged that contained backslashes.
+ * webapp: Fix reversion in opening webapp when starting it manually
+ inside a repository.
+ * assistant: Improve sanity check for control characters when pairing.
+ * Improve race recovery code when committing to git-annex branch.
+ * addurl: Avoid crash if quvi is not installed, when git-annex was
+ built with process-1.2
+ * bittorrent: Fix mojibake introduced in parsing arai2c progress output.
+ * fsck --from: If a download from a remote fails, propagate the failure.
+ * metadata: When setting metadata, do not recurse into directories by
+ default, since that can be surprising behavior and difficult to recover
+ from. The old behavior is available by using --force.
+ * sync, assistant: Include repository name in head branch commit message.
+ * The ssh-options git config is now used by gcrypt, rsync, and ddar
+ special remotes that use ssh as a transport.
+ * sync, assistant: Use the ssh-options git config when doing git pull
+ and push.
+ * remotedaemon: Use the ssh-options git config.
+ * Linux standalone: Improved process names of linker shimmed programs."""]] \ No newline at end of file
diff --git a/doc/preferred_content/standard_groups/comment_4_f5cd38886b58917fa3c417861fd10a10._comment b/doc/preferred_content/standard_groups/comment_4_f5cd38886b58917fa3c417861fd10a10._comment
new file mode 100644
index 000000000..495afaeee
--- /dev/null
+++ b/doc/preferred_content/standard_groups/comment_4_f5cd38886b58917fa3c417861fd10a10._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnbBRfl5F8gKRr1ko8Ai6FbEZStXXNF1S4"
+ nickname="Áron"
+ subject="&quot;new files&quot; group"
+ date="2015-02-19T11:06:34Z"
+ content="""
+In my mobile devices I would like to automatically have the newest files, because those have the biggest chance that I want to watch/read them on mobile. But I have found any preferred content expression that is about the age of a file. Is it possible to do something like this with the existing git-annex capabilities?
+thanks
+"""]]
diff --git a/doc/related_software.mdwn b/doc/related_software.mdwn
index f2b8e601b..4b6f42d2f 100644
--- a/doc/related_software.mdwn
+++ b/doc/related_software.mdwn
@@ -3,12 +3,10 @@ designed to interoperate with it.
* The [[git-annex assistant|assistant]] is included in git-annex,
and extends its use cases into new territory.
-* [git-annex-watcher](https://github.com/rubiojr/git-annex-watcher)
- is a status icon for your desktop.
-* [[forum/gadu_-_git-annex_disk_usage]] is a du like utility that
- is git-annex aware.
-* [sizes](http://hackage.haskell.org/package/sizes) is another du-like
- utility, with a `-A` switch that enables git-annex support.
+* [gitlab-shell](https://gitlab.com/gitlab-org/gitlab-shell) supports
+ git-annex. So git-annex can be used with repositries served by Gitlab,
+ including gitlab.com, or deploy your own.
+ [See Gitlab's announcment](https://about.gitlab.com/2015/02/17/gitlab-annex-solves-the-problem-of-versioning-large-binaries-with-git/)
* Emacs Org mode can auto-commit attached files to git-annex.
* [git annex darktable integration](https://github.com/xxv/darktable-git-annex)
* [Magit](http://github.com/magit/magit), an Emacs mode for Git, has
@@ -19,3 +17,9 @@ designed to interoperate with it.
built by the Brazilian [Mocambos network](http://www.mocambos.net/)
is [using git-annex to connect isolated communities](http://www.modspil.dk/itpolitik/baob_xia.html).
Repositories sync over satellite internet and/or sneakernet.
+* [[forum/gadu_-_git-annex_disk_usage]] is a du like utility that
+ is git-annex aware.
+* [sizes](http://hackage.haskell.org/package/sizes) is another du-like
+ utility, with a `-A` switch that enables git-annex support.
+* [git-annex-watcher](https://github.com/rubiojr/git-annex-watcher)
+ is a status icon for your desktop.
diff --git a/doc/special_remotes/S3/comment_17_52d3510016c099d083553f9b3fa40db9._comment b/doc/special_remotes/S3/comment_17_52d3510016c099d083553f9b3fa40db9._comment
new file mode 100644
index 000000000..85145ffb7
--- /dev/null
+++ b/doc/special_remotes/S3/comment_17_52d3510016c099d083553f9b3fa40db9._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlc-3pdibcizrdz4WmZooECL0k6AvM1cWc"
+ nickname="Joe"
+ subject="S3 file/folder names"
+ date="2015-02-19T22:22:26Z"
+ content="""
+Is there a way to tell the S3 backend to store the files as they are named locally, instead of by hashed content name? i.e., I've annexed foo/bar.txt and annex puts it in s3 as mybucket.name/foo/bar.txt instead of mybucket.name/GPGHMACSHA1-random.txt
+
+Or should I just write a script to s3cmd sync my annex, and add the S3/cloudfront distribution URL as a web remote?
+"""]]
diff --git a/doc/tips/dumb_metadata_extraction_from_xbmc/git-annex-xbmc-playcount.pl b/doc/tips/dumb_metadata_extraction_from_xbmc/git-annex-xbmc-playcount.pl
index 85b97188f..56f902cb0 100644
--- a/doc/tips/dumb_metadata_extraction_from_xbmc/git-annex-xbmc-playcount.pl
+++ b/doc/tips/dumb_metadata_extraction_from_xbmc/git-annex-xbmc-playcount.pl
@@ -158,7 +158,7 @@ B<^MyVideos.*\.db$> and will fail if none is found.
Manually specify the path to B<.xbmc/userdata/Database>. This
overrides B<--home>.
-Note that this doesn't point directly to the datbase itself, because
+Note that this doesn't point directly to the database itself, because
there are usually many database files and we want to automatically
find the latest. This may be a stupid limitation.
diff --git a/doc/todo/server-level_daemon__63__.mdwn b/doc/todo/server-level_daemon__63__.mdwn
new file mode 100644
index 000000000..dad11595b
--- /dev/null
+++ b/doc/todo/server-level_daemon__63__.mdwn
@@ -0,0 +1,3 @@
+coming from [[bugs/weird_entry_in_process_list]] - are there plans to make an init.d / systemd .service file for git-annex?
+
+my use case is that i have dedicated machines that will sync a common directory. they will run only one assistant - would patches to make a `git-annex` user, and the associated startup scripts, in the debian package be welcome? --[[anarcat]]
diff --git a/git-annex.cabal b/git-annex.cabal
index 75e483b84..7f2c50b80 100644
--- a/git-annex.cabal
+++ b/git-annex.cabal
@@ -1,5 +1,5 @@
Name: git-annex
-Version: 5.20150205
+Version: 5.20150219
Cabal-Version: >= 1.8
License: GPL-3
Maintainer: Joey Hess <id@joeyh.name>