# HG changeset patch # User Martin Geisler # Date 1241468092 -7200 # Node ID 7f27e69dd27f2ab6d17c8a5b0589faa8840467c6 # Parent 908c5906091bf9a229be085a5752fc8b3604b78e 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. diff -r 908c5906091b -r 7f27e69dd27f mercurial/util.py --- 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