summaryrefslogtreecommitdiff
path: root/Assistant/Types
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2013-03-10 18:16:03 -0400
committerGravatar Joey Hess <joey@kitenet.net>2013-03-10 18:16:03 -0400
commit2a6fc46baf66d19da150dd5bfb91c3dd9e33e244 (patch)
treea72376f7a4b45069f1a8c8bb5155be46d25f9f30 /Assistant/Types
parent5335b4edc67513354c723d51d4f9a7a99cf144c4 (diff)
moved transfer queueing out of watcher and into committer
This cleaned up the code quite a bit; now the committer just looks at the Change to see if it's a change that needs to have a transfer queued for it. If I later want to add dropping keys for files that were removed, or something like that, this should make it straightforward. This also fixes a bug. In direct mode, moving a file out of an archive directory failed to start a transfer to get its content. The problem was that the file had not been committed to git yet, and so the transfer code didn't want to touch it, since fileKey failed to get its key. Only starting transfers after a commit avoids this problem.
Diffstat (limited to 'Assistant/Types')
-rw-r--r--Assistant/Types/Changes.hs19
1 files changed, 12 insertions, 7 deletions
diff --git a/Assistant/Types/Changes.hs b/Assistant/Types/Changes.hs
index 887aa819e..d4e1b28bc 100644
--- a/Assistant/Types/Changes.hs
+++ b/Assistant/Types/Changes.hs
@@ -8,20 +8,26 @@
module Assistant.Types.Changes where
import Types.KeySource
+import Types.Key
import Utility.TSet
import Data.Time.Clock
-data ChangeType = AddChange | LinkChange | RmChange | RmDirChange
+data ChangeInfo = AddChange Key | LinkChange (Maybe Key) | RmChange | RmDirChange
deriving (Show, Eq)
+changeInfoKey :: ChangeInfo -> Maybe Key
+changeInfoKey (AddChange k) = Just k
+changeInfoKey (LinkChange (Just k)) = Just k
+changeInfoKey _ = Nothing
+
type ChangeChan = TSet Change
data Change
= Change
{ changeTime :: UTCTime
, changeFile :: FilePath
- , changeType :: ChangeType
+ , changeInfo :: ChangeInfo
}
| PendingAddChange
{ changeTime ::UTCTime
@@ -44,11 +50,10 @@ isInProcessAddChange :: Change -> Bool
isInProcessAddChange (InProcessAddChange {}) = True
isInProcessAddChange _ = False
-finishedChange :: Change -> Change
-finishedChange c@(InProcessAddChange { keySource = ks }) = Change
+finishedChange :: Change -> Key -> Change
+finishedChange c@(InProcessAddChange { keySource = ks }) k = Change
{ changeTime = changeTime c
, changeFile = keyFilename ks
- , changeType = AddChange
+ , changeInfo = AddChange k
}
-finishedChange c = c
-
+finishedChange c _ = c