/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

  • Committer: Aaron Bentley
  • Date: 2009-09-29 04:40:55 UTC
  • mfrom: (4717 +trunk)
  • mto: This revision was merged to the branch mainline in revision 4718.
  • Revision ID: aaron@aaronbentley.com-20090929044055-e9jtpmz6eyut711h
Merged bzr.dev into fix_get_mtime.

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
                  S_ISCHR, S_ISBLK, S_ISFIFO, S_ISSOCK)
22
22
import sys
23
23
import time
 
24
import warnings
24
25
 
25
26
from bzrlib.lazy_import import lazy_import
26
27
lazy_import(globals(), """
881
882
    return parents
882
883
 
883
884
 
 
885
_extension_load_failures = []
 
886
 
 
887
 
 
888
def failed_to_load_extension(exception):
 
889
    """Handle failing to load a binary extension.
 
890
 
 
891
    This should be called from the ImportError block guarding the attempt to
 
892
    import the native extension.  If this function returns, the pure-Python
 
893
    implementation should be loaded instead::
 
894
 
 
895
    >>> try:
 
896
    >>>     import bzrlib._fictional_extension_pyx
 
897
    >>> except ImportError, e:
 
898
    >>>     bzrlib.osutils.failed_to_load_extension(e)
 
899
    >>>     import bzrlib._fictional_extension_py
 
900
    """
 
901
    # NB: This docstring is just an example, not a doctest, because doctest
 
902
    # currently can't cope with the use of lazy imports in this namespace --
 
903
    # mbp 20090729
 
904
    
 
905
    # This currently doesn't report the failure at the time it occurs, because
 
906
    # they tend to happen very early in startup when we can't check config
 
907
    # files etc, and also we want to report all failures but not spam the user
 
908
    # with 10 warnings.
 
909
    from bzrlib import trace
 
910
    exception_str = str(exception)
 
911
    if exception_str not in _extension_load_failures:
 
912
        trace.mutter("failed to load compiled extension: %s" % exception_str)
 
913
        _extension_load_failures.append(exception_str)
 
914
 
 
915
 
 
916
def report_extension_load_failures():
 
917
    if not _extension_load_failures:
 
918
        return
 
919
    from bzrlib.config import GlobalConfig
 
920
    if GlobalConfig().get_user_option_as_bool('ignore_missing_extensions'):
 
921
        return
 
922
    # the warnings framework should by default show this only once
 
923
    from bzrlib.trace import warning
 
924
    warning(
 
925
        "bzr: warning: some compiled extensions could not be loaded; "
 
926
        "see <https://answers.launchpad.net/bzr/+faq/703>")
 
927
    # we no longer show the specific missing extensions here, because it makes
 
928
    # the message too long and scary - see
 
929
    # https://bugs.launchpad.net/bzr/+bug/430529
 
930
 
 
931
 
884
932
try:
885
933
    from bzrlib._chunks_to_lines_pyx import chunks_to_lines
886
 
except ImportError:
 
934
except ImportError, e:
 
935
    failed_to_load_extension(e)
887
936
    from bzrlib._chunks_to_lines_py import chunks_to_lines
888
937
 
889
938
 
1466
1515
            try:
1467
1516
                from bzrlib._readdir_pyx import UTF8DirReader
1468
1517
                _selected_dir_reader = UTF8DirReader()
1469
 
            except ImportError:
 
1518
            except ImportError, e:
 
1519
                failed_to_load_extension(e)
1470
1520
                pass
1471
1521
 
1472
1522
    if _selected_dir_reader is None:
1778
1828
        try:
1779
1829
            from bzrlib._readdir_pyx import UTF8DirReader
1780
1830
            file_kind_from_stat_mode = UTF8DirReader().kind_from_mode
1781
 
        except ImportError:
 
1831
        except ImportError, e:
 
1832
            # This is one time where we won't warn that an extension failed to
 
1833
            # load. The extension is never available on Windows anyway.
1782
1834
            from bzrlib._readdir_py import (
1783
1835
                _kind_from_mode as file_kind_from_stat_mode
1784
1836
                )