summaryrefslogtreecommitdiff
path: root/Annex/Transfer.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2016-06-02 13:50:05 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2016-06-02 13:50:43 -0400
commit60e30564338ebd9b18b5e229a9050478e5b8c423 (patch)
tree29f6aeecaea4ec7301951636b62b12980a816306 /Annex/Transfer.hs
parenta19c55d87ae35f4b65d3a4668c2dca1cf6f875df (diff)
sync --content: Fix bug that caused transfers of files to be made to a git remote that does not have a UUID. This particularly impacted clones from gcrypt repositories.
Added guard in Annex.Transfer to prevent this problem at a deeper level. I'm unhappy ith NoUUID, but having Maybe UUID instead wouldn't help either if nothing checked that there was a UUID. Since there legitimately need to be Remotes that do not have a UUID, I can't see a way to fix it at the type level, short making there be two separate types of Remotes.
Diffstat (limited to 'Annex/Transfer.hs')
-rw-r--r--Annex/Transfer.hs11
1 files changed, 9 insertions, 2 deletions
diff --git a/Annex/Transfer.hs b/Annex/Transfer.hs
index 213de0648..78ef0e502 100644
--- a/Annex/Transfer.hs
+++ b/Annex/Transfer.hs
@@ -46,10 +46,17 @@ noObserver :: TransferObserver
noObserver _ _ _ = noop
upload :: Observable v => UUID -> Key -> AssociatedFile -> RetryDecider -> TransferObserver -> (MeterUpdate -> Annex v) -> NotifyWitness -> Annex v
-upload u key f d o a _witness = runTransfer (Transfer Upload u key) f d o a
+upload u key f d o a _witness = guardHaveUUID u $
+ runTransfer (Transfer Upload u key) f d o a
download :: Observable v => UUID -> Key -> AssociatedFile -> RetryDecider -> TransferObserver -> (MeterUpdate -> Annex v) -> NotifyWitness -> Annex v
-download u key f d o a _witness = runTransfer (Transfer Download u key) f d o a
+download u key f d o a _witness = guardHaveUUID u $
+ runTransfer (Transfer Download u key) f d o a
+
+guardHaveUUID :: Observable v => UUID -> Annex v -> Annex v
+guardHaveUUID u a
+ | u == NoUUID = return observeFailure
+ | otherwise = a
{- Runs a transfer action. Creates and locks the lock file while the
- action is running, and stores info in the transfer information