# HG changeset patch # User wenzelm # Date 1406191126 -7200 # Node ID ed58e740a699c47bac1beec8c3d2b962ecd56721 # Parent eeb2d50ec71fe59c1078896dd1c8a99a34bd7f66 less authentic SHA1.digest: trust Scala side on blobs and avoid re-calculation via Foreign Language Interface, which might be a cause of problems; diff -r eeb2d50ec71f -r ed58e740a699 src/Pure/General/sha1.ML --- a/src/Pure/General/sha1.ML Thu Jul 24 10:22:34 2014 +0200 +++ b/src/Pure/General/sha1.ML Thu Jul 24 10:38:46 2014 +0200 @@ -10,6 +10,7 @@ eqtype digest val digest: string -> digest val rep: digest -> string + val fake: string -> digest end; structure SHA1: SHA1 = @@ -136,4 +137,6 @@ val digest = Digest o digest_string; fun rep (Digest s) = s; +val fake = Digest; + end; diff -r eeb2d50ec71f -r ed58e740a699 src/Pure/General/sha1.scala --- a/src/Pure/General/sha1.scala Thu Jul 24 10:22:34 2014 +0200 +++ b/src/Pure/General/sha1.scala Thu Jul 24 10:38:46 2014 +0200 @@ -65,5 +65,7 @@ def digest(bytes: Bytes): Digest = bytes.sha1_digest def digest(string: String): Digest = digest(Bytes(string)) + + def fake(rep: String): Digest = new Digest(rep) } diff -r eeb2d50ec71f -r ed58e740a699 src/Pure/General/sha1_polyml.ML --- a/src/Pure/General/sha1_polyml.ML Thu Jul 24 10:22:34 2014 +0200 +++ b/src/Pure/General/sha1_polyml.ML Thu Jul 24 10:38:46 2014 +0200 @@ -46,4 +46,6 @@ val digest = Digest o digest_string; fun rep (Digest s) = s; +val fake = Digest; + end; diff -r eeb2d50ec71f -r ed58e740a699 src/Pure/PIDE/document.ML --- a/src/Pure/PIDE/document.ML Thu Jul 24 10:22:34 2014 +0200 +++ b/src/Pure/PIDE/document.ML Thu Jul 24 10:38:46 2014 +0200 @@ -296,12 +296,7 @@ fun define_blob digest text = map_state (fn (versions, blobs, commands, execution) => - let - val sha1_digest = SHA1.digest text; - val _ = - digest = SHA1.rep sha1_digest orelse - error ("Ill-defined blob: bad SHA1 digest " ^ digest ^ " vs. " ^ SHA1.rep sha1_digest); - val blobs' = Symtab.update (digest, (sha1_digest, split_lines text)) blobs; + let val blobs' = Symtab.update (digest, (SHA1.fake digest, split_lines text)) blobs in (versions, blobs', commands, execution) end); fun the_blob (State {blobs, ...}) digest =