cabal-install-3.12.1.0: The command-line interface for Cabal and Hackage.

Safe Haskell | None
Language | Haskell2010

Distribution.Client.Glob

Contents

- cabal-install globbing features
- Additional re-exports

Synopsis

- data RootedGlob = RootedGlob FilePathRoot Glob
- isTrivialRootedGlob :: RootedGlob -> Maybe FilePath
- data FilePathRoot
  - = FilePathRelative
  - | FilePathRoot FilePath
  - | FilePathHomeDir
- getFilePathRootDirectory :: FilePathRoot -> FilePath -> IO FilePath
- module Distribution.Simple.Glob
- data Glob
  - = GlobDir !GlobPieces !Glob
  - | GlobDirRecursive !GlobPieces
  - | GlobFile !GlobPieces
  - | GlobDirTrailing
- data GlobPiece
  - = WildCard
  - | Literal String
  - | Union [GlobPieces]
- type GlobPieces = [GlobPiece]
- matchGlob :: FilePath -> Glob -> IO [FilePath]
- matchGlobPieces :: GlobPieces -> String -> Bool
- matchFileGlob :: FilePath -> RootedGlob -> IO [FilePath]

# cabal-install globbing features

data RootedGlob #

A file path specified by globbing, relative to some root directory.

Constructors

RootedGlob |
Fields FilePathRoot what the glob is relative to Glob the glob

#### Instances

Instances details

Parsec RootedGlob # |
Instance details Defined in Distribution.Client.Glob Methods parsec :: CabalParsing m => m RootedGlob #
Pretty RootedGlob # |
Instance details Defined in Distribution.Client.Glob Methods pretty :: RootedGlob -> Doc # prettyVersioned :: CabalSpecVersion -> RootedGlob -> Doc #
Structured RootedGlob # |
Instance details Defined in Distribution.Client.Glob Methods structure :: Proxy RootedGlob -> Structure # structureHash' :: Tagged RootedGlob MD5
Binary RootedGlob # |
Instance details Defined in Distribution.Client.Glob Methods put :: RootedGlob -> Put # get :: Get RootedGlob # putList :: [RootedGlob] -> Put #
Generic RootedGlob # |
Instance details Defined in Distribution.Client.Glob Associated Types
type Rep RootedGlob |
Instance details Defined in Distribution.Client.Glob type Rep RootedGlob = D1 ('MetaData "RootedGlob" "Distribution.Client.Glob" "cabal-install-3.12.1.0-G554PkJj2SpDqyarXp9tbt" 'False) (C1 ('MetaCons "RootedGlob" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 FilePathRoot) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Glob)))
Methods from :: RootedGlob -> Rep RootedGlob x # to :: Rep RootedGlob x -> RootedGlob #
Show RootedGlob # |
Instance details Defined in Distribution.Client.Glob Methods showsPrec :: Int -> RootedGlob -> ShowS # show :: RootedGlob -> String # showList :: [RootedGlob] -> ShowS #
Eq RootedGlob # |
Instance details Defined in Distribution.Client.Glob Methods (==) :: RootedGlob -> RootedGlob -> Bool # (/=) :: RootedGlob -> RootedGlob -> Bool #
type Rep RootedGlob # |
Instance details Defined in Distribution.Client.Glob type Rep RootedGlob = D1 ('MetaData "RootedGlob" "Distribution.Client.Glob" "cabal-install-3.12.1.0-G554PkJj2SpDqyarXp9tbt" 'False) (C1 ('MetaCons "RootedGlob" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 FilePathRoot) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Glob)))

isTrivialRootedGlob :: RootedGlob -> Maybe FilePath #

Check if a `RootedGlob` doesn't actually make use of any globbing and is in fact equivalent to a non-glob `FilePath`.

If it is trivial in this sense then the result is the equivalent constant `FilePath`. On the other hand, if it is not trivial (so could in principle match more than one file), then the result is `Nothing`.

data FilePathRoot #

Constructors

FilePathRelative |
FilePathRoot FilePath | e.g. `"/"`, `"c:"` or result of `takeDrive`
FilePathHomeDir |

#### Instances

Instances details

Parsec FilePathRoot # |
Instance details Defined in Distribution.Client.Glob Methods parsec :: CabalParsing m => m FilePathRoot #
Pretty FilePathRoot # |
Instance details Defined in Distribution.Client.Glob Methods pretty :: FilePathRoot -> Doc # prettyVersioned :: CabalSpecVersion -> FilePathRoot -> Doc #
Structured FilePathRoot # |
Instance details Defined in Distribution.Client.Glob Methods structure :: Proxy FilePathRoot -> Structure # structureHash' :: Tagged FilePathRoot MD5
Binary FilePathRoot # |
Instance details Defined in Distribution.Client.Glob Methods put :: FilePathRoot -> Put # get :: Get FilePathRoot # putList :: [FilePathRoot] -> Put #
Generic FilePathRoot # |
Instance details Defined in Distribution.Client.Glob Associated Types
type Rep FilePathRoot |
Instance details Defined in Distribution.Client.Glob type Rep FilePathRoot = D1 ('MetaData "FilePathRoot" "Distribution.Client.Glob" "cabal-install-3.12.1.0-G554PkJj2SpDqyarXp9tbt" 'False) (C1 ('MetaCons "FilePathRelative" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "FilePathRoot" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 FilePath)) :+: C1 ('MetaCons "FilePathHomeDir" 'PrefixI 'False) (U1 :: Type -> Type)))
Methods from :: FilePathRoot -> Rep FilePathRoot x # to :: Rep FilePathRoot x -> FilePathRoot #
Show FilePathRoot # |
Instance details Defined in Distribution.Client.Glob Methods showsPrec :: Int -> FilePathRoot -> ShowS # show :: FilePathRoot -> String # showList :: [FilePathRoot] -> ShowS #
Eq FilePathRoot # |
Instance details Defined in Distribution.Client.Glob Methods (==) :: FilePathRoot -> FilePathRoot -> Bool # (/=) :: FilePathRoot -> FilePathRoot -> Bool #
type Rep FilePathRoot # |
Instance details Defined in Distribution.Client.Glob type Rep FilePathRoot = D1 ('MetaData "FilePathRoot" "Distribution.Client.Glob" "cabal-install-3.12.1.0-G554PkJj2SpDqyarXp9tbt" 'False) (C1 ('MetaCons "FilePathRelative" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "FilePathRoot" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 FilePath)) :+: C1 ('MetaCons "FilePathHomeDir" 'PrefixI 'False) (U1 :: Type -> Type)))

getFilePathRootDirectory #

Arguments

:: FilePathRoot |
-> FilePath | root for relative paths
-> IO FilePath |

Get the `FilePath` corresponding to a `FilePathRoot`.

The `FilePath` argument is required to supply the path for the `FilePathRelative` case.

# Additional re-exports

module Distribution.Simple.Glob

data Glob #

A filepath specified by globbing.

Constructors

GlobDir !GlobPieces !Glob |
    dirGlob/glob
GlobDirRecursive !GlobPieces | `**/glob`, where `**` denotes recursively traversing all directories and matching filenames on glob.
GlobFile !GlobPieces | A file glob.
GlobDirTrailing | Trailing dir; a glob ending in `/`.

#### Instances

Instances details

Parsec Glob |
Instance details Defined in Distribution.Simple.Glob.Internal Methods parsec :: CabalParsing m => m Glob #
Pretty Glob |
Instance details Defined in Distribution.Simple.Glob.Internal Methods pretty :: Glob -> Doc # prettyVersioned :: CabalSpecVersion -> Glob -> Doc #
Structured Glob |
Instance details Defined in Distribution.Simple.Glob.Internal Methods structure :: Proxy Glob -> Structure # structureHash' :: Tagged Glob MD5
Binary Glob |
Instance details Defined in Distribution.Simple.Glob.Internal Methods put :: Glob -> Put # get :: Get Glob # putList :: [Glob] -> Put #
Generic Glob |
Instance details Defined in Distribution.Simple.Glob.Internal Associated Types
type Rep Glob |
Instance details Defined in Distribution.Simple.Glob.Internal type Rep Glob = D1 ('MetaData "Glob" "Distribution.Simple.Glob.Internal" "Cabal-3.12.0.0-inplace" 'False) ((C1 ('MetaCons "GlobDir" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 GlobPieces) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Glob)) :+: C1 ('MetaCons "GlobDirRecursive" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 GlobPieces))) :+: (C1 ('MetaCons "GlobFile" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 GlobPieces)) :+: C1 ('MetaCons "GlobDirTrailing" 'PrefixI 'False) (U1 :: Type -> Type)))
Methods from :: Glob -> Rep Glob x # to :: Rep Glob x -> Glob #
Show Glob |
Instance details Defined in Distribution.Simple.Glob.Internal Methods showsPrec :: Int -> Glob -> ShowS # show :: Glob -> String # showList :: [Glob] -> ShowS #
Eq Glob |
Instance details Defined in Distribution.Simple.Glob.Internal Methods (==) :: Glob -> Glob -> Bool # (/=) :: Glob -> Glob -> Bool #
type Rep Glob |
Instance details Defined in Distribution.Simple.Glob.Internal type Rep Glob = D1 ('MetaData "Glob" "Distribution.Simple.Glob.Internal" "Cabal-3.12.0.0-inplace" 'False) ((C1 ('MetaCons "GlobDir" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 GlobPieces) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Glob)) :+: C1 ('MetaCons "GlobDirRecursive" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 GlobPieces))) :+: (C1 ('MetaCons "GlobFile" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 GlobPieces)) :+: C1 ('MetaCons "GlobDirTrailing" 'PrefixI 'False) (U1 :: Type -> Type)))

data GlobPiece #

A piece of a globbing pattern

Constructors

WildCard | A wildcard `*`
Literal String | A literal string `dirABC`
Union [GlobPieces] | A union of patterns, e.g. `dir{a,*.txt,c}...`

#### Instances

Instances details

Structured GlobPiece |
Instance details Defined in Distribution.Simple.Glob.Internal Methods structure :: Proxy GlobPiece -> Structure # structureHash' :: Tagged GlobPiece MD5
Binary GlobPiece |
Instance details Defined in Distribution.Simple.Glob.Internal Methods put :: GlobPiece -> Put # get :: Get GlobPiece # putList :: [GlobPiece] -> Put #
Generic GlobPiece |
Instance details Defined in Distribution.Simple.Glob.Internal Associated Types
type Rep GlobPiece |
Instance details Defined in Distribution.Simple.Glob.Internal type Rep GlobPiece = D1 ('MetaData "GlobPiece" "Distribution.Simple.Glob.Internal" "Cabal-3.12.0.0-inplace" 'False) (C1 ('MetaCons "WildCard" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Literal" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String)) :+: C1 ('MetaCons "Union" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [GlobPieces]))))
Methods from :: GlobPiece -> Rep GlobPiece x # to :: Rep GlobPiece x -> GlobPiece #
Show GlobPiece |
Instance details Defined in Distribution.Simple.Glob.Internal Methods showsPrec :: Int -> GlobPiece -> ShowS # show :: GlobPiece -> String # showList :: [GlobPiece] -> ShowS #
Eq GlobPiece |
Instance details Defined in Distribution.Simple.Glob.Internal Methods (==) :: GlobPiece -> GlobPiece -> Bool # (/=) :: GlobPiece -> GlobPiece -> Bool #
type Rep GlobPiece |
Instance details Defined in Distribution.Simple.Glob.Internal type Rep GlobPiece = D1 ('MetaData "GlobPiece" "Distribution.Simple.Glob.Internal" "Cabal-3.12.0.0-inplace" 'False) (C1 ('MetaCons "WildCard" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Literal" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String)) :+: C1 ('MetaCons "Union" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [GlobPieces]))))

type GlobPieces = [GlobPiece] #

A single directory or file component of a globbed path

matchGlob :: FilePath -> Glob -> IO [FilePath] #

Match a `Glob` against the file system, starting from a given root directory. The results are all relative to the given root.

Since: Cabal-3.12.0.0

matchGlobPieces :: GlobPieces -> String -> Bool #

Match a globbing pattern against a file path component

matchFileGlob :: FilePath -> RootedGlob -> IO [FilePath] #

Match a `RootedGlob` against the file system, starting from a given root directory for relative paths. The results of relative globs are relative to the given root. Matches for absolute globs are absolute.