module Darcs.UI.Commands.ShowPatchIndex ( showPatchIndex ) where import Darcs.Prelude import Darcs.UI.Commands ( DarcsCommand(..), withStdOpts, nodefaults, amInHashedRepository ) import Darcs.UI.Completion ( noArgs ) import Darcs.UI.Flags ( DarcsFlag, useCache, verbose ) import Darcs.UI.Options ( (^), oid, (?) ) import qualified Darcs.UI.Options.All as O import Darcs.Util.Path ( AbsolutePath ) import Darcs.Repository ( withRepository, RepoJob(..), repoLocation ) import Darcs.Repository.PatchIndex ( dumpPatchIndex, piTest, doesPatchIndexExist, isPatchIndexInSync) import Darcs.Util.Printer ( Doc, text ) help :: Doc help :: Doc help = String -> Doc text (String -> Doc) -> String -> Doc forall a b. (a -> b) -> a -> b $ String "When given the `--verbose` flag, the command dumps the complete content\n" String -> String -> String forall a. [a] -> [a] -> [a] ++ String "of the patch index and checks its integrity." showPatchIndex :: DarcsCommand showPatchIndex :: DarcsCommand showPatchIndex = DarcsCommand { commandProgramName :: String commandProgramName = String "darcs" , commandName :: String commandName = String "patch-index" , commandDescription :: String commandDescription = String "Check integrity of patch index" , commandHelp :: Doc commandHelp = Doc help , commandExtraArgs :: Int commandExtraArgs = Int 0 , commandExtraArgHelp :: [String] commandExtraArgHelp = [] , commandCommand :: (AbsolutePath, AbsolutePath) -> [DarcsFlag] -> [String] -> IO () commandCommand = (AbsolutePath, AbsolutePath) -> [DarcsFlag] -> [String] -> IO () showPatchIndexCmd , commandPrereq :: [DarcsFlag] -> IO (Either String ()) commandPrereq = [DarcsFlag] -> IO (Either String ()) amInHashedRepository , commandCompleteArgs :: (AbsolutePath, AbsolutePath) -> [DarcsFlag] -> [String] -> IO [String] commandCompleteArgs = (AbsolutePath, AbsolutePath) -> [DarcsFlag] -> [String] -> IO [String] noArgs , commandArgdefaults :: [DarcsFlag] -> AbsolutePath -> [String] -> IO [String] commandArgdefaults = [DarcsFlag] -> AbsolutePath -> [String] -> IO [String] nodefaults , commandOptions :: CommandOptions commandOptions = CommandOptions showPatchIndexOpts } where showPatchIndexBasicOpts :: OptSpec DarcsOptDescr DarcsFlag a (Bool -> Maybe String -> a) showPatchIndexBasicOpts = PrimOptSpec DarcsOptDescr DarcsFlag (Maybe String -> a) Bool PrimDarcsOption Bool O.nullFlag PrimOptSpec DarcsOptDescr DarcsFlag (Maybe String -> a) Bool -> OptSpec DarcsOptDescr DarcsFlag a (Maybe String -> a) -> OptSpec DarcsOptDescr DarcsFlag a (Bool -> Maybe String -> a) forall (d :: * -> *) f b c a. OptSpec d f b c -> OptSpec d f a b -> OptSpec d f a c ^ OptSpec DarcsOptDescr DarcsFlag a (Maybe String -> a) PrimDarcsOption (Maybe String) O.repoDir showPatchIndexOpts :: CommandOptions showPatchIndexOpts = OptSpec DarcsOptDescr DarcsFlag (Maybe StdCmdAction -> Verbosity -> UseCache -> UseIndex -> HooksConfig -> Bool -> Bool -> [DarcsFlag]) (Bool -> Maybe String -> Maybe StdCmdAction -> Verbosity -> UseCache -> UseIndex -> HooksConfig -> Bool -> Bool -> [DarcsFlag]) forall {a}. OptSpec DarcsOptDescr DarcsFlag a (Bool -> Maybe String -> a) showPatchIndexBasicOpts OptSpec DarcsOptDescr DarcsFlag (Maybe StdCmdAction -> Verbosity -> UseCache -> UseIndex -> HooksConfig -> Bool -> Bool -> [DarcsFlag]) (Bool -> Maybe String -> Maybe StdCmdAction -> Verbosity -> UseCache -> UseIndex -> HooksConfig -> Bool -> Bool -> [DarcsFlag]) -> DarcsOption (UseCache -> UseIndex -> HooksConfig -> Bool -> Bool -> [DarcsFlag]) (UseCache -> UseIndex -> HooksConfig -> Bool -> Bool -> [DarcsFlag]) -> CommandOptions forall b c. DarcsOption (Maybe StdCmdAction -> Verbosity -> b) c -> DarcsOption (UseCache -> UseIndex -> HooksConfig -> Bool -> Bool -> [DarcsFlag]) b -> CommandOptions `withStdOpts` DarcsOption (UseCache -> UseIndex -> HooksConfig -> Bool -> Bool -> [DarcsFlag]) (UseCache -> UseIndex -> HooksConfig -> Bool -> Bool -> [DarcsFlag]) forall (d :: * -> *) f a. OptSpec d f a a oid showPatchIndexCmd :: (AbsolutePath, AbsolutePath) -> [DarcsFlag] -> [String] -> IO () showPatchIndexCmd :: (AbsolutePath, AbsolutePath) -> [DarcsFlag] -> [String] -> IO () showPatchIndexCmd (AbsolutePath, AbsolutePath) _ [DarcsFlag] opts [String] _ | [DarcsFlag] -> Bool verbose [DarcsFlag] opts = UseCache -> RepoJob 'RO () -> IO () forall a. UseCache -> RepoJob 'RO a -> IO a withRepository (PrimOptSpec DarcsOptDescr DarcsFlag a UseCache PrimDarcsOption UseCache useCache PrimDarcsOption UseCache -> [DarcsFlag] -> UseCache forall (d :: * -> *) f v. (forall a. PrimOptSpec d f a v) -> [f] -> v ? [DarcsFlag] opts) (RepoJob 'RO () -> IO ()) -> RepoJob 'RO () -> IO () forall a b. (a -> b) -> a -> b $ TreePatchJob 'RO () -> RepoJob 'RO () forall (rt :: AccessType) a. TreePatchJob rt a -> RepoJob rt a RepoJob (TreePatchJob 'RO () -> RepoJob 'RO ()) -> TreePatchJob 'RO () -> RepoJob 'RO () forall a b. (a -> b) -> a -> b $ \Repository 'RO p wU wR repo -> let loc :: String loc = Repository 'RO p wU wR -> String forall (rt :: AccessType) (p :: * -> * -> *) wU wR. Repository rt p wU wR -> String repoLocation Repository 'RO p wU wR repo in String -> IO () dumpPatchIndex String loc IO () -> IO () -> IO () forall a b. IO a -> IO b -> IO b forall (m :: * -> *) a b. Monad m => m a -> m b -> m b >> String -> IO () piTest String loc | Bool otherwise = UseCache -> RepoJob 'RO () -> IO () forall a. UseCache -> RepoJob 'RO a -> IO a withRepository (PrimOptSpec DarcsOptDescr DarcsFlag a UseCache PrimDarcsOption UseCache useCache PrimDarcsOption UseCache -> [DarcsFlag] -> UseCache forall (d :: * -> *) f v. (forall a. PrimOptSpec d f a v) -> [f] -> v ? [DarcsFlag] opts) (RepoJob 'RO () -> IO ()) -> RepoJob 'RO () -> IO () forall a b. (a -> b) -> a -> b $ TreePatchJob 'RO () -> RepoJob 'RO () forall (rt :: AccessType) a. TreePatchJob rt a -> RepoJob rt a RepoJob (TreePatchJob 'RO () -> RepoJob 'RO ()) -> TreePatchJob 'RO () -> RepoJob 'RO () forall a b. (a -> b) -> a -> b $ \Repository 'RO p wU wR repo -> do Bool ex <- String -> IO Bool doesPatchIndexExist (Repository 'RO p wU wR -> String forall (rt :: AccessType) (p :: * -> * -> *) wU wR. Repository rt p wU wR -> String repoLocation Repository 'RO p wU wR repo) if Bool ex then do Bool sy <- Repository 'RO p wU wR -> IO Bool forall (rt :: AccessType) (p :: * -> * -> *) wU wR. Repository rt p wU wR -> IO Bool isPatchIndexInSync Repository 'RO p wU wR repo if Bool sy then String -> IO () putStrLn String "Patch Index is in sync with repo." else String -> IO () putStrLn String "Patch Index is outdated. Run darcs optimize enable-patch-index" else String -> IO () putStrLn String "Patch Index is not yet created. Run darcs optimize enable-patch-index"