hup-0.3.0.2: Upload packages or documentation to a hackage server

Safe HaskellNone
LanguageHaskell2010

Distribution.Hup

Contents

Description

Bits and pieces for building and uploading source or documentation .tar files for Hackage, intended to make it easy to write your own Haskell programs/scripts for managing uploads.

This is the main entry-point to look at, and more low-level functions are available in the other modules.

Synopsis

Finding and parsing Cabal files

findCabal :: IO (Maybe FilePath) Source #

if there's a .cabal file in the current dir, return its file name.

from NDM's neil-0.10

readCabal :: IO String Source #

find & read contents of Cabal file from current dir, if it exists. else returns empty string.

from NDM's neil-0.10

extractCabal :: String -> String -> String Source #

extractCabal fieldName cabalConts: extract contents of field named fieldName from a Cabal file string.

field name is case-insensitive [folded to lowercase]

from NDM's neil-0.10

Parsing .tgz file names

parseTgzFilename :: (IsString s, MonadError s m) => FilePath -> m (IsDocumentation, Package) Source #

Inspect the name of a .tar.gz file to work out the package name and version it's for, and whether it is for documentation or a package.

parseTgzFilename' :: IsString s => FilePath -> Either s (IsDocumentation, Package) Source #

parseTgzFilename' specialized to Either.

>>> (parseTgzFilename' "foo-bar-baz-0.1.0.0.2.3.0.1.tar.gz") :: Either String (IsDocumentation, Package)
Right (IsPackage,Package {packageName = "foo-bar-baz", packageVersion = "0.1.0.0.2.3.0.1"})

Building tar files

buildTar :: FilePath -> FilePath -> [FilePath] -> IO () Source #

buildTar tarFileName baseDir paths - create a gz-compressed tar file with name tarFileName, with files in it from baseDir, "paths" being the files & directories to archive, relative to baseDir.

Uploading

getUploadUrl :: String -> Upload -> String Source #

work out what URL to upload a .tgz file to. getUploadUrl server upload returns a URL.

>>> getUploadUrl "http://localhost:8080/" $ Upload (Package "foo" "0.1.0.0") "./foo-0.1.0.0.tar.gz" Nothing IsDocumentation CandidatePkg
"http://localhost:8080/package/foo-0.1.0.0/candidate/docs"

mkAuth :: String -> String -> Maybe Auth Source #

pack a name and password into an Auth structure

>>> mkAuth "myname" "mypassword"
Just (Auth {authUser = "myname", authPassword = "mypassword"})

postPkg :: String -> FilePath -> Maybe ByteString -> Maybe Auth -> IO Request Source #

Construct a POST request for uploading a package.

postPkg url conts userAuth creates a request which will upload the file conts in conts to the URL at url, using the user authentication userAuth.

putDocs :: String -> FilePath -> Maybe ByteString -> Maybe Auth -> IO Request Source #

Build a PUT request to upload package documentation.

putDocs url fileConts userAuth creates a request which will upload the file contents in fileConts to the URL at url, using the user authentication userAuth.

buildRequest :: String -> Upload -> Maybe Auth -> IO Request Source #

buildRequest serverUrl upl userAuth - create an HTTP request for uploading some package (details packed into upl) to the server at serverUrl, using the credentials in userAuth.

e.g. usage:

let p = Package "foo" "0.1.0.0"
let u = Upload p "./foo-0.1.0.0.tar.gz" Nothing IsDocumentation CandidatePkg
req <- buildRequest "http://localhost:8080/" u (mkAuth "tmp" "tmp")
sendRequest req

sendRequest :: Request -> IO (Either HttpException Response) Source #

Send an HTTP request and get the response (or an exception)

Types

data IsCandidate Source #

whether a package is a normal one or a candidate

Constructors

NormalPkg 
CandidatePkg 

data Package Source #

name and version of a package

Constructors

Package 
Instances
Eq Package Source # 
Instance details

Defined in Distribution.Hup.Types

Methods

(==) :: Package -> Package -> Bool #

(/=) :: Package -> Package -> Bool #

Read Package Source # 
Instance details

Defined in Distribution.Hup.Types

Show Package Source # 
Instance details

Defined in Distribution.Hup.Types

data Upload Source #

Bundle together information useful for an upload.

Constructors

Upload 

Fields

Instances
Eq Upload Source # 
Instance details

Defined in Distribution.Hup.Types

Methods

(==) :: Upload -> Upload -> Bool #

(/=) :: Upload -> Upload -> Bool #

Show Upload Source # 
Instance details

Defined in Distribution.Hup.Types

data Auth Source #

Username and password for HTTP basic access authentication.

Constructors

Auth 
Instances
Eq Auth Source # 
Instance details

Defined in Distribution.Hup.Upload

Methods

(==) :: Auth -> Auth -> Bool #

(/=) :: Auth -> Auth -> Bool #

Show Auth Source # 
Instance details

Defined in Distribution.Hup.Upload

Methods

showsPrec :: Int -> Auth -> ShowS #

show :: Auth -> String #

showList :: [Auth] -> ShowS #