document move subcommand

This commit is contained in:
Joey Hess 2010-10-21 17:59:32 -04:00
parent e8e397036f
commit 514b98ff55
3 changed files with 69 additions and 26 deletions

View file

@ -24,8 +24,7 @@ import Core
import qualified Remotes import qualified Remotes
import qualified TypeInternals import qualified TypeInternals
data CmdWants = FilesInGit | FilesNotInGit | FilesMissing | data CmdWants = FilesInGit | FilesNotInGit | FilesMissing | Description
RepoName | Description
data Command = Command { data Command = Command {
cmdname :: String, cmdname :: String,
cmdaction :: (String -> Annex ()), cmdaction :: (String -> Annex ()),
@ -41,10 +40,12 @@ cmds = [
"make content of annexed files available") "make content of annexed files available")
, (Command "drop" dropCmd FilesInGit , (Command "drop" dropCmd FilesInGit
"indicate content of files not currently wanted") "indicate content of files not currently wanted")
, (Command "unannex" unannexCmd FilesInGit , (Command "move" moveCmd FilesInGit
"undo accidential add command") "transfer content of files to another repository")
, (Command "init" initCmd Description , (Command "init" initCmd Description
"initialize git-annex with repository description") "initialize git-annex with repository description")
, (Command "unannex" unannexCmd FilesInGit
"undo accidential add command")
, (Command "fix" fixCmd FilesInGit , (Command "fix" fixCmd FilesInGit
"fix up files' symlinks to point to annexed content") "fix up files' symlinks to point to annexed content")
, (Command "fromkey" fromKeyCmd FilesMissing , (Command "fromkey" fromKeyCmd FilesMissing
@ -55,16 +56,18 @@ cmds = [
-- in the Annex monad that performs the necessary setting. -- in the Annex monad that performs the necessary setting.
options :: [OptDescr (Annex ())] options :: [OptDescr (Annex ())]
options = [ options = [
Option ['f'] ["force"] Option ['f'] ["force"] (NoArg (storebool "force" True))
(NoArg (Annex.flagChange "force" $ FlagBool True))
"allow actions that may lose annexed data" "allow actions that may lose annexed data"
, Option ['b'] ["backend"] , Option ['b'] ["backend"] (ReqArg (storestring "backend") "NAME")
(ReqArg (\s -> Annex.flagChange "backend" $ FlagString s) "NAME")
"specify default key-value backend to use" "specify default key-value backend to use"
, Option ['k'] ["key"] , Option ['k'] ["key"] (ReqArg (storestring "key") "KEY")
(ReqArg (\s -> Annex.flagChange "key" $ FlagString s) "KEY")
"specify a key to use" "specify a key to use"
, Option ['r'] ["repository"] (ReqArg (storestring "repository") "REPOSITORY")
"specify a repository"
] ]
where
storebool n b = Annex.flagChange n $ FlagBool b
storestring n s = Annex.flagChange n $ FlagString s
header = "Usage: git-annex " ++ (join "|" $ map cmdname cmds) header = "Usage: git-annex " ++ (join "|" $ map cmdname cmds)
@ -84,7 +87,6 @@ usage = usageInfo header options ++ "\nSubcommands:\n" ++ cmddescs
{- Generate descrioptions of wanted parameters for subcommands. -} {- Generate descrioptions of wanted parameters for subcommands. -}
descWanted :: CmdWants -> String descWanted :: CmdWants -> String
descWanted Description = "DESCRIPTION" descWanted Description = "DESCRIPTION"
descWanted RepoName = "REPO"
descWanted _ = "PATH ..." descWanted _ = "PATH ..."
{- Finds the type of parameters a command wants, from among the passed {- Finds the type of parameters a command wants, from among the passed
@ -105,8 +107,6 @@ findWanted FilesMissing params repo = do
if (e) then return False else return True if (e) then return False else return True
findWanted Description params _ = do findWanted Description params _ = do
return $ [unwords params] return $ [unwords params]
findWanted RepoName params _ = do
return $ params
{- Parses command line and returns two lists of actions to be {- Parses command line and returns two lists of actions to be
- run in the Annex monad. The first actions configure it - run in the Annex monad. The first actions configure it
@ -198,6 +198,18 @@ getCmd file = inBackend file $ \(key, backend) -> do
else do else do
showEndFail showEndFail
{- Moves the content of an annexed file to another repository,
- removing it from the current repository, and updates locationlog
- information on both.
-
- Note that unlike drop, this does not honor annex.numcopies.
- A file's content can be moved even if there are insufficient copies to
- allow it to be dropped.
-}
moveCmd :: FilePath -> Annex ()
moveCmd file = inBackend file $ \(key, backend) -> do
error "TODO"
{- Indicates a file's content is not wanted anymore, and should be removed {- Indicates a file's content is not wanted anymore, and should be removed
- if it's safe to do so. -} - if it's safe to do so. -}
dropCmd :: FilePath -> Annex () dropCmd :: FilePath -> Annex ()

View file

@ -48,12 +48,13 @@ content from the key-value store.
add iso/Debian_5.0.iso ok add iso/Debian_5.0.iso ok
# git commit -a -m "saving Debian CD for later" # git commit -a -m "saving Debian CD for later"
# git annex push usbdrive iso
error: push not yet implemented!
# git annex drop iso # git annex drop iso
drop iso/Debian_5.0.iso ok drop iso/Debian_5.0.iso ok
# git commit -a -m "freed up space" # git commit -a -m "freed up space"
# git annex move video --to=usbdrive
move iso/Debian_5.0.iso (to usbdrive...) ok
# SUBCOMMANDS # SUBCOMMANDS
Like many git commands, git-annex can be passed a path that Like many git commands, git-annex can be passed a path that
@ -77,8 +78,22 @@ Many git-annex subcommands will stage changes for later `git commit` by you.
Drops the content of annexed files from this repository. Drops the content of annexed files from this repository.
git-annex may refuse to drop a content if the backend does not think git-annex may refuse to drop content if the backend does not think
it is safe to do so. it is safe to do so, typically because of the setting of annex.numcopies.
* move [path ...]
Moves the content of annexed files from the current repository to
another one. Use with the --to option.
Note that unlike drop, this does not honor annex.numcopies.
A file's content can be moved even if there are insufficient
copies to allow it to be dropped.
* init description
Initializes git-annex with a descripotion of the git repository.
This is an optional, but recommended step.
* unannex [path ...] * unannex [path ...]
@ -87,11 +102,6 @@ Many git-annex subcommands will stage changes for later `git commit` by you.
any more. In that case you should use `git annex drop` instead, and you any more. In that case you should use `git annex drop` instead, and you
can also `git rm` the file. can also `git rm` the file.
* init description
Initializes git-annex with a descripotion of the git repository.
This is an optional, but recommended step.
* fix [path ...] * fix [path ...]
Fixes up symlinks that have become broken to again point to annexed content. Fixes up symlinks that have become broken to again point to annexed content.
@ -123,6 +133,11 @@ Many git-annex subcommands will stage changes for later `git commit` by you.
Specifies a key to operate on, for use with the addkey subcommand. Specifies a key to operate on, for use with the addkey subcommand.
* --to=repository
Specifies a git repository that content will be sent to.
It can be specified by a path, url, or remote name.
## CONFIGURATION ## CONFIGURATION
Like other git commands, git-annex is configured via `.git/config`. Like other git commands, git-annex is configured via `.git/config`.

View file

@ -64,9 +64,14 @@ make copies or delete them. `git-annex fix` needs to be run if a file
is moved into a different directory, in order to fix up the symlink is moved into a different directory, in order to fix up the symlink
pointing to the file's content. pointing to the file's content.
## transferring files around ## getting file content
Let's copy everything in the laptop's home annex to the USB drive. A repository does not always have all annexed file contents available.
When you need the content of a file, you can use "git annex get" to
make it available.
We can use this to copy everything in the laptop's home annex to the
USB drive.
# cd /media/usb/annex # cd /media/usb/annex
# git pull home master # git pull home master
@ -75,8 +80,8 @@ Let's copy everything in the laptop's home annex to the USB drive.
get iso/debian.iso (copying from home...) ok get iso/debian.iso (copying from home...) ok
Notice that you had to git pull from home first, this lets git-annex know Notice that you had to git pull from home first, this lets git-annex know
what has changed in home, and so it knows about the files you added and what has changed in home, and so it knows about the files present there and
can get them. can get them. See below for an easier way.
## transferring files: When things go wrong ## transferring files: When things go wrong
@ -135,6 +140,17 @@ But `other.iso` looks to have never been copied to anywhere else, so if
it's something you want to hold onto, you'd need to transfer it to it's something you want to hold onto, you'd need to transfer it to
some other repository before dropping it. some other repository before dropping it.
## moving file content to another repository
Often you will want to transfer some file contents from a repository to
some other one, and then drop it from the first repository. For example,
your laptop's disk is getting full; time to move some files to an external
disk. Doing that by hand is possible, but a bit of a pain. `git annex move`
makes it very easy.
# git annex move my_cool_big_file --to usbdrive
move my_cool_big_file (to usbdrive...) ok
## using the URL backend ## using the URL backend
git-annex has multiple key-value [[backends]]. So far this walkthrough has git-annex has multiple key-value [[backends]]. So far this walkthrough has