Merge branch 'master' into ghc7.0

This commit is contained in:
Joey Hess 2012-02-14 12:41:17 -04:00
commit 4f1a0eca6c
12 changed files with 25 additions and 16 deletions

View file

@ -28,8 +28,8 @@ type Params = [String]
type Flags = [Annex ()]
{- Runs the passed command line. -}
dispatch :: Bool -> Params -> [Command] -> [Option] -> String -> IO Git.Repo -> IO ()
dispatch oneshot args cmds commonoptions header getgitrepo = do
dispatch :: Params -> [Command] -> [Option] -> String -> IO Git.Repo -> IO ()
dispatch args cmds commonoptions header getgitrepo = do
setupConsole
r <- E.try getgitrepo :: IO (Either E.SomeException Git.Repo)
case r of
@ -39,7 +39,7 @@ dispatch oneshot args cmds commonoptions header getgitrepo = do
(actions, state') <- Annex.run state $ do
sequence_ flags
prepCommand cmd params
tryRun state' cmd $ [startup] ++ actions ++ [shutdown oneshot]
tryRun state' cmd $ [startup] ++ actions ++ [shutdown $ cmdoneshot cmd]
where
(flags, cmd, params) = parseCmd args cmds commonoptions header

View file

@ -8,6 +8,7 @@
module Command (
command,
noRepo,
oneShot,
withOptions,
next,
stop,
@ -39,7 +40,11 @@ import Annex.CheckAttr
{- Generates a normal command -}
command :: String -> String -> [CommandSeek] -> String -> Command
command = Command [] Nothing commonChecks
command = Command [] Nothing commonChecks False
{- Makes a command run in oneshot mode. -}
oneShot :: Command -> Command
oneShot c = c { cmdoneshot = True }
{- Adds a fallback action to a command, that will be run if it's used
- outside a git repository. -}

View file

@ -12,7 +12,7 @@ import Command
import Annex.UUID
def :: [Command]
def = [command "configlist" paramNothing seek
def = [oneShot $ command "configlist" paramNothing seek
"outputs relevant git configuration"]
seek :: [CommandSeek]

View file

@ -14,7 +14,7 @@ import Logs.Location
import Annex.Content
def :: [Command]
def = [command "dropkey" (paramRepeating paramKey) seek
def = [oneShot $ command "dropkey" (paramRepeating paramKey) seek
"drops annexed content for specified keys"]
seek :: [CommandSeek]

View file

@ -12,7 +12,7 @@ import Command
import Annex.Content
def :: [Command]
def = [command "inannex" (paramRepeating paramKey) seek
def = [oneShot $ command "inannex" (paramRepeating paramKey) seek
"checks if keys are present in the annex"]
seek :: [CommandSeek]

View file

@ -14,7 +14,7 @@ import Annex.Content
import Utility.RsyncFile
def :: [Command]
def = [command "recvkey" paramKey seek
def = [oneShot $ command "recvkey" paramKey seek
"runs rsync in server mode to receive content"]
seek :: [CommandSeek]

View file

@ -13,7 +13,7 @@ import Annex.Content
import Utility.RsyncFile
def :: [Command]
def = [command "sendkey" paramKey seek
def = [oneShot $ command "sendkey" paramKey seek
"runs rsync in server mode to send content"]
seek :: [CommandSeek]

View file

@ -11,10 +11,9 @@ import Common.Annex
import Command
import qualified Build.SysConfig as SysConfig
import Annex.Version
import CmdLine
def :: [Command]
def = [noRepo showPackageVersion $ dontCheck repoExists $
def = [oneShot $ noRepo showPackageVersion $ dontCheck repoExists $
command "version" paramNothing seek "show version info"]
seek :: [CommandSeek]
@ -29,9 +28,7 @@ start = do
putStrLn $ "default repository version: " ++ defaultVersion
putStrLn $ "supported repository versions: " ++ vs supportedVersions
putStrLn $ "upgrade supported from repository versions: " ++ vs upgradableVersions
-- avoid normal cleanup
_ <- shutdown True
liftIO exitSuccess
stop
where
vs = join " "

View file

@ -129,4 +129,4 @@ header :: String
header = "Usage: git-annex command [option ..]"
run :: [String] -> IO ()
run args = dispatch False args cmds options header Git.Construct.fromCurrent
run args = dispatch args cmds options header Git.Construct.fromCurrent

View file

@ -36,6 +36,7 @@ data Command = Command
{ cmdoptions :: [Option] -- command-specific options
, cmdnorepo :: Maybe (IO ()) -- an action to run when not in a repo
, cmdcheck :: [CommandCheck] -- check stage
, cmdoneshot :: Bool -- don't save state after running
, cmdname :: String
, cmdparamdesc :: String -- description of params for usage
, cmdseek :: [CommandSeek] -- seek stage

View file

@ -0,0 +1,6 @@
Hi,
I use git-annex 3.20120123 on a debian-testing amd-64 machine with software RAID6 and LVM2 on it. I needed to move the whole `/home` directory to another LV (the new LV is on encrypted PV, the old LV is encrypted and not properly aligned; I'm changing from encrypted `/home` only to encrypted everything except `/boot`), so I have used the `rsync -aAXH` from a `ro` mounted `/home` to a new LV mounted on `/mnt/home_2`. After the move was complete I run the `git annex fsck` on my (4TB of) data. The fsck finds some files bad, and moves them to the `..../bad` directory. So far so good, this is how it should be, right? But then- I have a file with sha1sum of all my files. So - I checked the 'bad' file against that. It was OK. Then I computed the SHA256 of the file - this is used by `git annex fsck`. It was OK, too. So how did it happen, that the file was marked as bad? Do I miss something here? Could it be related to the hardware (HDDs) and silent data corruption? Or is it the undesirable effect of rsync? Or maybe the fsck is at fault here?
Any ideas?

View file

@ -82,7 +82,7 @@ builtins = map cmdname cmds
builtin :: String -> String -> [String] -> IO ()
builtin cmd dir params = do
checkNotReadOnly cmd
dispatch True (cmd : filterparams params) cmds options header $
dispatch (cmd : filterparams params) cmds options header $
Git.Construct.repoAbsPath dir >>= Git.Construct.fromAbsPath
external :: [String] -> IO ()