unannex: Now skips files whose content is not present, rather than it being an error. This allows gradual conversion from one backend to another by running unannex followed by add in each repository.
This commit is contained in:
parent
82fe151f87
commit
32b0e10390
4 changed files with 33 additions and 6 deletions
|
@ -29,8 +29,12 @@ seek = [withFilesInGit start]
|
|||
{- The unannex subcommand undoes an add. -}
|
||||
start :: CommandStartString
|
||||
start file = isAnnexed file $ \(key, backend) -> do
|
||||
showStart "unannex" file
|
||||
return $ Just $ perform file key backend
|
||||
ishere <- inAnnex key
|
||||
if ishere
|
||||
then do
|
||||
showStart "unannex" file
|
||||
return $ Just $ perform file key backend
|
||||
else return Nothing
|
||||
|
||||
perform :: FilePath -> Key -> Backend -> CommandPerform
|
||||
perform file key backend = do
|
||||
|
|
8
debian/changelog
vendored
8
debian/changelog
vendored
|
@ -1,3 +1,11 @@
|
|||
git-annex (0.17) UNRELEASED; urgency=low
|
||||
|
||||
* unannex: Now skips files whose content is not present, rather than
|
||||
it being an error. This allows gradual conversion from one backend
|
||||
to another by running unannex followed by add in each repository.
|
||||
|
||||
-- Joey Hess <joeyh@debian.org> Sat, 08 Jan 2011 15:04:48 -0400
|
||||
|
||||
git-annex (0.16) unstable; urgency=low
|
||||
|
||||
* git-annex-shell: Avoid exposing any git repo config except for the
|
||||
|
|
|
@ -277,6 +277,19 @@ add something like this to `.gitattributes`:
|
|||
|
||||
* annex.backend=SHA1
|
||||
|
||||
## migrating between backends
|
||||
|
||||
Perhaps you had been using the WORM backend, but now have configured
|
||||
git-annex to use SHA1 for new files. Your old files are still in WORM. How
|
||||
to migrate that content? A quick and dirty way is to use the unannex
|
||||
subcommand, which removes a file from git-annex's control, followed by
|
||||
a re-add of the file, to put it in the new backend.
|
||||
|
||||
# git annex unannex my_cool_big_file
|
||||
unannex my_cool_big_file ok
|
||||
# git annex add my_cool_big_file
|
||||
add my_cool_big_file (checksum ...) ok
|
||||
|
||||
## unused data
|
||||
|
||||
It's possible for data to accumulate in the annex that no files point to
|
||||
|
|
10
test.hs
10
test.hs
|
@ -16,6 +16,7 @@ import Data.List
|
|||
import System.IO.Error
|
||||
import System.Posix.Env
|
||||
import qualified Control.Exception.Extensible as E
|
||||
import Control.Exception (throw)
|
||||
|
||||
import qualified GitRepo as Git
|
||||
import qualified Locations
|
||||
|
@ -87,10 +88,11 @@ test_unannex :: Test
|
|||
test_unannex = "git-annex unannex" ~: TestList [nocopy, withcopy]
|
||||
where
|
||||
nocopy = "no content" ~: intmpclonerepo $ do
|
||||
r <- git_annex "unannex" ["-q", annexedfile]
|
||||
not r @? "unannex incorrectly succeeded with no copy"
|
||||
unannexed annexedfile
|
||||
annexed_notpresent annexedfile
|
||||
git_annex "unannex" ["-q", annexedfile] @? "unannex failed with no copy"
|
||||
annexed_notpresent annexedfile
|
||||
withcopy = "with content" ~: intmpcopyrepo $ do
|
||||
annexed_present annexedfile
|
||||
git_annex "unannex" ["-q", annexedfile] @? "unannex failed"
|
||||
unannexed annexedfile
|
||||
git_annex "unannex" ["-q", annexedfile] @? "unannex failed on non-annexed file"
|
||||
|
@ -280,7 +282,7 @@ indir dir a = do
|
|||
(E.try (a)::IO (Either E.SomeException ()))
|
||||
case r of
|
||||
Right () -> return ()
|
||||
Left e -> error $ show e
|
||||
Left e -> throw e
|
||||
|
||||
setuprepo :: FilePath -> IO FilePath
|
||||
setuprepo dir = do
|
||||
|
|
Loading…
Add table
Reference in a new issue