diff options
author | 2013-02-15 18:19:27 -0400 | |
---|---|---|
committer | 2013-02-15 18:19:27 -0400 | |
commit | 149762502a17ad70e6e6a4904840c405274fbed3 (patch) | |
tree | 194b834c07ada1cfdc9052219731602f4c1eb1f9 /doc/design | |
parent | 03889cb48c3c9a0eb02f1a364ddfbb26c401fcaa (diff) |
blog for the looooong day
Diffstat (limited to 'doc/design')
-rw-r--r-- | doc/design/assistant/blog/day_189__more_crippling.mdwn | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/doc/design/assistant/blog/day_189__more_crippling.mdwn b/doc/design/assistant/blog/day_189__more_crippling.mdwn new file mode 100644 index 000000000..f3ddad266 --- /dev/null +++ b/doc/design/assistant/blog/day_189__more_crippling.mdwn @@ -0,0 +1,44 @@ +Finished crippled filesystem support, except for symlink handling. +This was straightforward, just got lsof working in that mode, made +`migrate` copy key contents, and adapted the rsync special remote to +support it. Encrypted rsync special remotes have no more overhead on +crippled filesystems than normally. Un-encrypted rsync special remotes +have some added overhead, but less than encrypted remotes. Acceptable +for now. + +I've now successfully run the assistant on a FAT filesystem. + +---- + +Git handles symlinks on crippled filesystems by setting +`core.symlinks=false` and checking them out as files containing the link +text. So to finish up crippled filesystem support, git-annex needs to +do the same whenever it creates a symlink, and needs to read file contents +when it normally reads a symlink target. + +There are rather a lot of calls to `createSymbolicLink`, +`readSymbolicLink`, `getSymbolicLinkStatus`, `isSymbolicLink`, and `isSymLink` +in the tree; only ones that are used in direct mode +need to be converted. This will take a while. + +Checking whether something is a symlink, or where it points is especially +tricky. How to tell if a small file in a git working tree is intended to be +a symlink or not? Well, it can look at the content and see if it makes +sense as a link text pointing at a git-annex key. As long as the +possibility of false positives is ok. It might be possible, in some cases, +to query git to verify if the object stored for that file is really a +symlink, but that won't work if the file has been renamed, for example. + +Converted some of the most commonly used symlink code to handle this. +Much more to do, but it basically works; I can `git annex get` and `git +annex drop` on FAT, and it works. + +----- + +Unfortunately, got side-tracked when I discovered that the last release +introduced a bug in direct mode. Due to the bug, "git annex get file; git annex +drop file; git annex get file" would end up with the file being an indirect +mode symlink to the content, rather than a direct mode file. No data loss, +but not right. So, spent several hours fixing that reversion, which was +caused by me stupidly fixing another bug at 5 am in the morning last week.. +and I'll probably be pushing out another release tomorrow with the fix. |