summaryrefslogtreecommitdiff
path: root/doc/design/assistant/desymlink.mdwn
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2012-10-04 20:38:39 -0400
committerGravatar Joey Hess <joey@kitenet.net>2012-10-04 20:38:39 -0400
commite7158bcbeaf76df0c2469cba58b6af813cb44d20 (patch)
tree33f6045198e5f8d66b97b3a14ceb996db23ea276 /doc/design/assistant/desymlink.mdwn
parent0af2ae49f949ac7bf18bb22a131833daa3efb096 (diff)
update
Diffstat (limited to 'doc/design/assistant/desymlink.mdwn')
-rw-r--r--doc/design/assistant/desymlink.mdwn43
1 files changed, 40 insertions, 3 deletions
diff --git a/doc/design/assistant/desymlink.mdwn b/doc/design/assistant/desymlink.mdwn
index e12cd52dc..d7ebc8969 100644
--- a/doc/design/assistant/desymlink.mdwn
+++ b/doc/design/assistant/desymlink.mdwn
@@ -1,5 +1,42 @@
While dropbox allows modifying files in the folder, git-annex freezes
-them upon creation.
+them upon creation, using symlinks.
-To allow editing files in its folder, something like [[todo/smudge]] is
-needed, to get rid of the symlinks that stand in for the files.
+This is a core design simplification of git-annex.
+But it is problimatic too:
+
+* To allow directly editing files in its folder, something like [[todo/smudge]] is
+ needed, to get rid of the symlinks that stand in for the files.
+* OSX seems to have a [[lot_of_problems|bugs/OSX_alias_permissions_and_versions_problem]]
+ with stupid programs that follow symlinks and present the git-annex
+ hash filename to the user.
+* FAT sucks and doesn't support symlinks at all, so [[Android]] can't
+ have regular repos on it.
+
+One approach for this would be to hide the git repo away somewhere,
+and have the git-annex assistant watch a regular directory, with
+regular files.
+
+There would have to be a mapping from files to git-annex objects.
+And some intelligent way to determine when a file has been changed
+and no longer corresponds to its object. (Not expensive hashing every time,
+plz.)
+
+Since this leaves every file open to modification, any such repository
+probably needs to be considered untrusted by git-annex. So it doesn't
+leave its only copy of a file in such a repository, but instead
+syncs it to a proper git-annex repository.
+
+The assistant would make git commits still, of symlinks. It can already do
+that with without actual symlinks existing on disk. More difficult is
+handling merging; git merge wants a real repository with files it can
+really operate on. The assistant would need to calculate merges on its own,
+and update the regular directory to reflect changes made in the merge.
+
+Another massive problem with this idea is that it doesn't allow for
+[[partial_content]]. The symlinks that everyone loves to hate on are what
+make it possible for the contents of some files to not be present on
+disk, while the files are still in git and can be retreived as desired.
+With real files, some other standin for a missing file would be needed.
+Perhaps a 0 length, unreadable, unwritable file? On systems that
+support symlinks it could be a broken symlink like is used now, that
+is converted to a real file when it becomes present.