When built with ut uid-1.3.12, generate more random UUIDs than before

Use nextRandom to generate the random UUID, rather than using randomIO.
This gets fixes for the following two bugs in the uuid library.

However, this did not impact git-annex much, so a hard depedency has
not been added on uuid-1.3.12.

https://github.com/aslatter/uuid/issues/15
	"v4 UUIDs are not that random"

	This doesn't greatly affect git-annex, because even with only
	2^64 possible UUIDs, the chance that two git-annex repositories
	that are clones of the same git repo get the same UUID is miniscule.

	And, git-annex generates only one UUID per run, so preducting
	subsequent UUIDs is not a problem.

https://github.com/aslatter/uuid/issues/16
	"Remove Random instance for UUID, or mark it as deprecated"

	git-annex was using that instance; let's stop before it gets
	deprecated or removed.
This commit is contained in:
Joey Hess 2016-07-27 07:38:11 -04:00
parent 5235fb1185
commit e5225f08fc
Failed to extract signature
3 changed files with 7 additions and 3 deletions

View file

@ -35,8 +35,8 @@ import qualified Git.Config
import Config import Config
import qualified Data.UUID as U import qualified Data.UUID as U
import qualified Data.UUID.V4 as U4
import qualified Data.UUID.V5 as U5 import qualified Data.UUID.V5 as U5
import System.Random
import Data.Bits.Utils import Data.Bits.Utils
configkey :: ConfigKey configkey :: ConfigKey
@ -44,7 +44,7 @@ configkey = annexConfig "uuid"
{- Generates a random UUID, that does not include the MAC address. -} {- Generates a random UUID, that does not include the MAC address. -}
genUUID :: IO UUID genUUID :: IO UUID
genUUID = UUID . show <$> (randomIO :: IO U.UUID) genUUID = UUID . show <$> U4.nextRandom
{- Generates a UUID from a given string, using a namespace. {- Generates a UUID from a given string, using a namespace.
- Given the same namespace, the same string will always result - Given the same namespace, the same string will always result

View file

@ -13,6 +13,9 @@ git-annex (6.20160726) UNRELEASED; urgency=medium
* git-annex.cabal: Temporarily limit to persistent <2.5 * git-annex.cabal: Temporarily limit to persistent <2.5
since esqueleto 2.4.3 is not compatible with the newer version. since esqueleto 2.4.3 is not compatible with the newer version.
* Removed dependency on json library; all JSON is now handled by aeson. * Removed dependency on json library; all JSON is now handled by aeson.
* When built with uuid-1.3.12, generate more random UUIDs than before.
(However, this did not impact git-annex much, so a hard depedency has
not been added on uuid-1.3.12.)
-- Joey Hess <id@joeyh.name> Wed, 20 Jul 2016 12:03:15 -0400 -- Joey Hess <id@joeyh.name> Wed, 20 Jul 2016 12:03:15 -0400

View file

@ -328,7 +328,8 @@ Executable git-annex
QuickCheck (>= 2.1), QuickCheck (>= 2.1),
stm (>= 2.3), stm (>= 2.3),
mtl (>= 2), mtl (>= 2),
process, data-default, case-insensitive, uuid, random, dlist, uuid (>= 1.2.6),
process, data-default, case-insensitive, random, dlist,
unix-compat, SafeSemaphore, async, directory, filepath, IfElse, unix-compat, SafeSemaphore, async, directory, filepath, IfElse,
MissingH, hslogger, monad-logger, MissingH, hslogger, monad-logger,
utf8-string, bytestring, text, sandi, utf8-string, bytestring, text, sandi,