tests/hghave
branchstable
changeset 1056 0e6cee08a2f8
parent 1055 dabed2cabd5e
child 1063 0e3b1a8a243c
equal deleted inserted replaced
1055:dabed2cabd5e 1056:0e6cee08a2f8
     2 """Test the running system for features availability. Exit with zero
     2 """Test the running system for features availability. Exit with zero
     3 if all features are there, non-zero otherwise. If a feature name is
     3 if all features are there, non-zero otherwise. If a feature name is
     4 prefixed with "no-", the absence of feature is tested.
     4 prefixed with "no-", the absence of feature is tested.
     5 """
     5 """
     6 import optparse
     6 import optparse
     7 import os
     7 import os, stat
     8 import re
     8 import re
     9 import sys
     9 import sys
    10 import tempfile
    10 import tempfile
    11 
    11 
    12 tempprefix = 'hg-hghave-'
    12 tempprefix = 'hg-hghave-'
    62         return True
    62         return True
    63     except:
    63     except:
    64         return False
    64         return False
    65 
    65 
    66 def has_executablebit():
    66 def has_executablebit():
    67     fd, path = tempfile.mkstemp(prefix=tempprefix)
    67     try:
    68     os.close(fd)
    68         EXECFLAGS = stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH
    69     try:
    69         fh, fn = tempfile.mkstemp(dir=".", prefix='hg-checkexec-')
    70         s = os.lstat(path).st_mode
    70         try:
    71         os.chmod(path, s | 0100)
    71             os.close(fh)
    72         return (os.lstat(path).st_mode & 0100 != 0)
    72             m = os.stat(fn).st_mode & 0777
    73     finally:
    73             new_file_has_exec = m & EXECFLAGS
    74         os.remove(path)
    74             os.chmod(fn, m ^ EXECFLAGS)
       
    75             exec_flags_cannot_flip = ((os.stat(fn).st_mode & 0777) == m)
       
    76         finally:
       
    77             os.unlink(fn)
       
    78     except (IOError, OSError):
       
    79         # we don't care, the user probably won't be able to commit anyway
       
    80         return False
       
    81     return not (new_file_has_exec or exec_flags_cannot_flip)
    75 
    82 
    76 def has_icasefs():
    83 def has_icasefs():
    77     # Stolen from mercurial.util
    84     # Stolen from mercurial.util
    78     fd, path = tempfile.mkstemp(prefix=tempprefix, dir='.')
    85     fd, path = tempfile.mkstemp(prefix=tempprefix, dir='.')
    79     os.close(fd)
    86     os.close(fd)