packages feed

darcswatch-0.4: src/Darcs/Watch/Data.hs

{-
Copyright (C) 2009 Joachim Breitner

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; see the file COPYING.  If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
-}

module Darcs.Watch.Data where

import Data.Time
import Data.Maybe

type BundleHash = String

-- | the path to the storage directory
type StorageConf = String

-- | A history entry is a state change
type BundleHistory = (ZonedTime, Source, BundleState)

data BundleState
	= New
	| Applicable
	| Rejected
	| Obsoleted
	| Applied -- ^ Repository URL
	deriving (Read, Show, Ord, Eq)
	
data Source
	= ManualImport
	| ViaEMail String String String (Maybe String) -- ^ From, To, Subject, Message-Id 
	| ViaBugtracker String -- ^ URL
	| ViaWeb String -- ^ OpenID Username
	| ViaRepository RepositoryURL -- ^ Repository-URL
	deriving (Read, Show, Eq, Ord)

type RepositoryURL = String
type EMailAddress = String -- ^ not use for patch authors, but subscriptions etc.

type Author = String -- ^ the email-address of an patch author

data BundleList = RepositoryBundleList RepositoryURL
                | AuthorBundleList Author
		| UnmatchedBundleList
	deriving (Read, Show, Eq, Ord)

data RepositoryInfo = RepositoryInfo 
	{ lastCheck :: Maybe UTCTime
	, lastUpdate :: Maybe UTCTime
	}
	deriving (Read, Show)

data DarcsWatchConfig = DarcsWatchConfig {
        cRepositories :: [RepositoryURL],
	cData :: String,
        cOutput :: String,
        cMails :: String,
	cDarcsWatchURL :: String,
	cDarcsWatchAddress :: String,
	cRepoSubscriptions :: [(RepositoryURL, EMailAddress)],
	cSendMails :: Bool
        } deriving (Show, Read)


stateOfRepo history repo = fromMaybe New (lookup repo (repoStates history))

repoStates history = [ (repo, state)
	             | (_,ViaRepository repo, state) <- history ]