util: stop overwriting sha1, overwrite _fastsha1 instead
Some modules (like revlog) would import util.sha1 as _sha1. This
defeats the purpose of having util.sha1 overwrite itself with a faster
version -- revlog would end up always calling the slow version. By
always delegating to util._fastsha1 we avoid this at the cost of an
extra (but unconditional) indirection.
--- a/mercurial/util.py Mon May 04 21:30:39 2009 +0200
+++ b/mercurial/util.py Mon May 04 22:14:52 2009 +0200
@@ -21,13 +21,18 @@
# Python compatibility
def sha1(s):
+ return _fastsha1(s)
+
+def _fastsha1(s):
+ # This function will import sha1 from hashlib or sha (whichever is
+ # available) and overwrite itself with it on the first call.
+ # Subsequent calls will go directly to the imported function.
try:
- import hashlib
- _sha1 = hashlib.sha1
+ from hashlib import sha1 as _sha1
except ImportError:
from sha import sha as _sha1
- global sha1
- sha1 = _sha1
+ global _fastsha1
+ _fastsha1 = _sha1
return _sha1(s)
import subprocess