upgrade thoughts

long comments :)
This commit is contained in:
Joey Hess 2011-03-16 00:32:15 -04:00
parent 5811139683
commit f1e010f42e
2 changed files with 46 additions and 2 deletions

View file

@ -38,12 +38,52 @@ upgrade = do
upgradeFrom1 :: Annex Bool upgradeFrom1 :: Annex Bool
upgradeFrom1 = do upgradeFrom1 = do
showSideAction "Upgrading object directory layout..." showSideAction "Upgrading object directory layout v1 to v2..."
error "upgradeFrom1 TODO FIXME" error "upgradeFrom1 TODO FIXME"
-- v2 adds hashing of filenames of content and location log files.
--
-- Key information is encoded in filenames differently.
--
-- When upgrading a v1 key to v2, file size metadata needs to be
-- added to the key (unless it is a WORM key, which encoded
-- mtime:size in v1). This can only be done when the file content
-- is present.
--
-- So there are two approaches -- either upgrade
-- everything, leaving out file size information for files not
-- present in the current repo; or upgrade peicemeil, only
-- upgrading keys whose content is present.
--
-- The latter approach would mean that, until every clone of an
-- annex is upgraded, git annex would refuse to operate on annexed
-- files that had not yet been committed. Unless it were taught to
-- work with both v1 and v2 keys in the same repo.
--
-- Another problem with the latter approach might involve content
-- being moved between repos while the conversion is still
-- incomplete. If repo A has already upgraded, and B has not, and B
-- has K, moving K from B -> A would result in it lurking
-- unconverted on A. Unless A upgraded it in passing. But that's
-- getting really complex, and would mean a constant trickle of
-- upgrade commits, which users would find annoying.
--
-- So, the former option it is! Note that file size metadata
-- will only be used for detecting situations where git-annex
-- would run out of disk space, so if some keys don't have it,
-- the impact is small. At least initially. It could be used in the
-- future by smart auto-repo balancing code, etc.
--
-- Anyway, since v2 plans ahead for other metadata being included
-- in keys, there should probably be a way to update a key.
-- Something similar to the migrate subcommand could be used,
-- and users could then run that at their leisure. Or, this upgrade
-- could to that key update for all keys that have been converted
-- and have content in the repo.
upgradeFrom0 :: Annex Bool upgradeFrom0 :: Annex Bool
upgradeFrom0 = do upgradeFrom0 = do
showSideAction "Upgrading object directory layout..." showSideAction "Upgrading object directory layout v0 to v1..."
g <- Annex.gitRepo g <- Annex.gitRepo
-- do the reorganisation of the files -- do the reorganisation of the files
@ -56,6 +96,9 @@ upgradeFrom0 = do
fixlinks files fixlinks files
Annex.queueRun Annex.queueRun
-- Few people had v0 repos, so go the long way around from 0 -> 1 -> 2
upgradeFrom1
setVersion setVersion
return True return True

1
debian/changelog vendored
View file

@ -1,5 +1,6 @@
git-annex (0.24) UNRELEASED; urgency=low git-annex (0.24) UNRELEASED; urgency=low
* TODO: upgrade v1 -> v2
* Reorganized annexed object store. annex.version=2 * Reorganized annexed object store. annex.version=2
* Colons are now avoided in filenames, so bare clones of git repos * Colons are now avoided in filenames, so bare clones of git repos
can be put on USB thumb drives formatted with vFAT or similar can be put on USB thumb drives formatted with vFAT or similar