content: module GitHUD.Git.Types (
    GitLocalRepoChanges(..)
    , zeroLocalRepoChanges
    , GitRepoState(..)
    , zeroGitRepoState
    , mergeGitLocalRepoChanges
    ) where
  
  data GitLocalRepoChanges = GitLocalRepoChanges { localMod :: Int
                                   , localAdd :: Int
                                   , localDel :: Int
                                   , indexMod :: Int
                                   , indexAdd :: Int
                                   , indexDel :: Int
                                   , renamed  :: Int
                                   , conflict :: Int
                                   } deriving (Show, Eq)
  
  zeroLocalRepoChanges :: GitLocalRepoChanges
  zeroLocalRepoChanges = GitLocalRepoChanges { localMod = 0
                               , localAdd = 0
                               , localDel = 0
                               , indexMod = 0
                               , indexAdd = 0
                               , indexDel = 0
                               , renamed  = 0
                               , conflict = 0
                               }
  
  mergeGitLocalRepoChanges :: GitLocalRepoChanges -> GitLocalRepoChanges -> GitLocalRepoChanges
  mergeGitLocalRepoChanges a b =
    GitLocalRepoChanges {
      localMod   = (localMod a) + (localMod b)
      , localAdd = (localAdd a) + (localAdd b)
      , localDel = (localDel a) + (localDel b)
      , indexMod = (indexMod a) + (indexMod b)
      , indexAdd = (indexAdd a) + (indexAdd b)
      , indexDel = (indexDel a) + (indexDel b)
      , renamed  = (renamed a) + (renamed b)
      , conflict = (conflict a) + (conflict b)
    }
  
  data GitRepoState =
    GitRepoState {
      gitLocalRepoChanges :: GitLocalRepoChanges
      , gitLocalBranch :: String
      , gitCommitShortSHA :: String
      , gitCommitTag :: String
      , gitRemote :: String
      , gitRemoteTrackingBranch :: String
      , gitStashCount :: Int
      , gitCommitsToPull :: Int
      , gitCommitsToPush :: Int
      , gitMergeBranchCommitsToPull :: Int
      , gitMergeBranchCommitsToPush :: Int
    }
    deriving (Eq, Show)
  
  zeroGitRepoState :: GitRepoState
  zeroGitRepoState =
    GitRepoState {
      gitLocalRepoChanges = zeroLocalRepoChanges
      , gitLocalBranch = ""
      , gitCommitShortSHA = ""
      , gitCommitTag = ""
      , gitRemote = ""
      , gitRemoteTrackingBranch = ""
      , gitStashCount = 0
      , gitCommitsToPull = 0
      , gitCommitsToPush = 0
      , gitMergeBranchCommitsToPull = 0
      , gitMergeBranchCommitsToPush = 0
    }
  