~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

  • Committer: Andrew Bennetts
  • Date: 2008-09-08 14:14:20 UTC
  • mto: This revision was merged to the branch mainline in revision 3756.
  • Revision ID: andrew.bennetts@canonical.com-20080908141420-6wru593pporl9oao
Allow the 'sha' module to be lazy_imported.

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
import stat
20
20
from stat import (S_ISREG, S_ISDIR, S_ISLNK, ST_MODE, ST_SIZE,
21
21
                  S_ISCHR, S_ISBLK, S_ISFIFO, S_ISSOCK)
22
 
import sha
23
22
import sys
24
23
import time
25
24
 
35
34
                    splitdrive as _nt_splitdrive,
36
35
                    )
37
36
import posixpath
 
37
import sha
38
38
import shutil
39
39
from shutil import (
40
40
    rmtree,
627
627
        os.close(f)
628
628
 
629
629
 
630
 
def sha_strings(strings, _factory=sha.new):
 
630
def sha_strings(strings):
631
631
    """Return the sha-1 of concatenation of strings"""
632
 
    s = _factory()
633
 
    map(s.update, strings)
634
 
    return s.hexdigest()
635
 
 
636
 
 
637
 
def sha_string(f, _factory=sha.new):
638
 
    return _factory(f).hexdigest()
 
632
    # Do some hackery here to install an optimised version of this function on
 
633
    # the first invocation of this function.  (We don't define it like this
 
634
    # initially so that we can avoid loading the sha module, which takes up to
 
635
    # 2ms, unless we need to.)
 
636
    global sha_strings
 
637
    def sha_strings(strings, _factory=sha.new):
 
638
        """Return the sha-1 of concatenation of strings"""
 
639
        s = _factory()
 
640
        map(s.update, strings)
 
641
        return s.hexdigest()
 
642
    # Now that we've installed the real version, call it.
 
643
    return sha_strings(strings)
 
644
 
 
645
 
 
646
def sha_string(f):
 
647
    global sha_string
 
648
    def sha_string(f, _factory=sha.new):
 
649
        return _factory(f).hexdigest()
 
650
    return sha_string(f)
 
651
 
639
652
 
640
653
 
641
654
def fingerprint_file(f):