summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CmdLine/GitAnnex.hs4
-rw-r--r--Command/Import.hs69
2 files changed, 35 insertions, 38 deletions
diff --git a/CmdLine/GitAnnex.hs b/CmdLine/GitAnnex.hs
index 21e780398..ede943804 100644
--- a/CmdLine/GitAnnex.hs
+++ b/CmdLine/GitAnnex.hs
@@ -87,7 +87,7 @@ import qualified Command.AddUrl
import qualified Command.ImportFeed
#endif
import qualified Command.RmUrl
---import qualified Command.Import
+import qualified Command.Import
import qualified Command.Map
import qualified Command.Direct
import qualified Command.Indirect
@@ -136,7 +136,7 @@ cmds =
, Command.ImportFeed.cmd
#endif
, Command.RmUrl.cmd
--- , Command.Import.cmd
+ , Command.Import.cmd
, Command.Init.cmd
, Command.Describe.cmd
, Command.InitRemote.cmd
diff --git a/Command/Import.hs b/Command/Import.hs
index 684641ea3..e84618173 100644
--- a/Command/Import.hs
+++ b/Command/Import.hs
@@ -23,53 +23,50 @@ import Types.TrustLevel
import Logs.Trust
cmd :: Command
-cmd = withOptions opts $ notBareRepo $
+cmd = withGlobalOptions fileMatchingOptions $ notBareRepo $
command "import" SectionCommon
"move and add files from outside git working copy"
- paramPaths (withParams seek)
-
-opts :: [GlobalOption]
-opts = duplicateModeOptions ++ fileMatchingOptions
+ paramPaths (seek <$$> optParser)
data DuplicateMode = Default | Duplicate | DeDuplicate | CleanDuplicates | SkipDuplicates
- deriving (Eq, Enum, Bounded)
+ deriving (Eq)
-associatedOption :: DuplicateMode -> Maybe Option
-associatedOption Default = Nothing
-associatedOption Duplicate = Just $
- flagOption [] "duplicate" "do not delete source files"
-associatedOption DeDuplicate = Just $
- flagOption [] "deduplicate" "delete source files whose content was imported before"
-associatedOption CleanDuplicates = Just $
- flagOption [] "clean-duplicates" "delete duplicate source files (import nothing)"
-associatedOption SkipDuplicates = Just $
- flagOption [] "skip-duplicates" "import only new files"
+data ImportOptions = ImportOptions
+ { importFiles :: CmdParams
+ , duplicateMode :: DuplicateMode
+ }
-duplicateModeOptions :: [Option]
-duplicateModeOptions = mapMaybe associatedOption [minBound..maxBound]
+optParser :: CmdParamsDesc -> Parser ImportOptions
+optParser desc = ImportOptions
+ <$> cmdParams desc
+ <*> (fromMaybe Default <$> optional duplicateModeParser)
-getDuplicateMode :: Annex DuplicateMode
-getDuplicateMode = go . catMaybes <$> mapM getflag [minBound..maxBound]
- where
- getflag m = case associatedOption m of
- Nothing -> return Nothing
- Just o -> ifM (Annex.getFlag (optionName o))
- ( return (Just m)
- , return Nothing
- )
- go [] = Default
- go [m] = m
- go ms = error $ "cannot combine " ++
- unwords (map (optionParam . fromJust . associatedOption) ms)
+duplicateModeParser :: Parser DuplicateMode
+duplicateModeParser =
+ flag' Duplicate
+ ( long "duplicate"
+ <> help "do not delete source files"
+ )
+ <|> flag' DeDuplicate
+ ( long "deduplicate"
+ <> help "delete source files whose content was imported before"
+ )
+ <|> flag' CleanDuplicates
+ ( long "clean-duplicates"
+ <> help "delete duplicate source files (import nothing)"
+ )
+ <|> flag' SkipDuplicates
+ ( long "skip-duplicates"
+ <> help "import only new files"
+ )
-seek :: CmdParams -> CommandSeek
-seek ps = do
- mode <- getDuplicateMode
+seek :: ImportOptions -> CommandSeek
+seek o = do
repopath <- liftIO . absPath =<< fromRepo Git.repoPath
- inrepops <- liftIO $ filter (dirContains repopath) <$> mapM absPath ps
+ inrepops <- liftIO $ filter (dirContains repopath) <$> mapM absPath (importFiles o)
unless (null inrepops) $ do
error $ "cannot import files from inside the working tree (use git annex add instead): " ++ unwords inrepops
- withPathContents (start mode) ps
+ withPathContents (start (duplicateMode o)) (importFiles o)
start :: DuplicateMode -> (FilePath, FilePath) -> CommandStart
start mode (srcfile, destfile) =