(cls, perms_s: T.Optional[str])
return perms
Does the opposite of stat.filemode(), converts strings of the form
        'rwxr-xr-x' to st_mode enums which can be passed to os.chmod()
Does the opposite of stat.filemode(), converts strings of the form
        'rwxr-xr-x' to st_mode enums which can be passed to os.chmod()
Does the opposite of stat . filemode () converts strings of the form rwxr - xr - x to st_mode enums which can be passed to os . chmod ()
def perms_s_to_bits(cls, perms_s: T.Optional[str]) -> int:
        '''
        Does the opposite of stat.filemode(), converts strings of the form
        'rwxr-xr-x' to st_mode enums which can be passed to os.chmod()
        '''
        if perms_s is None:
            # No perms specified, we will not touch the permissions
            return -1
        eg = 'rwxr-xr-x'
        if not isinstance(perms_s, str):
            raise MesonException(f'Install perms must be a string. For example, {eg!r}')
        if len(perms_s) != 9 or not cls.symbolic_perms_regex.match(perms_s):
            raise MesonException(f'File perms {perms_s!r} must be exactly 9 chars. For example, {eg!r}')
        perms = 0
        # Owner perms
        if perms_s[0] == 'r':
            perms |= stat.S_IRUSR
        if perms_s[1] == 'w':
            perms |= stat.S_IWUSR
        if perms_s[2] == 'x':
            perms |= stat.S_IXUSR
        elif perms_s[2] == 'S':
            perms |= stat.S_ISUID
        elif perms_s[2] == 's':
            perms |= stat.S_IXUSR
            perms |= stat.S_ISUID
        # Group perms
        if perms_s[3] == 'r':
            perms |= stat.S_IRGRP
        if perms_s[4] == 'w':
            perms |= stat.S_IWGRP
        if perms_s[5] == 'x':
            perms |= stat.S_IXGRP
        elif perms_s[5] == 'S':
            perms |= stat.S_ISGID
        elif perms_s[5] == 's':
            perms |= stat.S_IXGRP
            perms |= stat.S_ISGID
        # Others perms
        if perms_s[6] == 'r':
            perms |= stat.S_IROTH
        if perms_s[7] == 'w':
            perms |= stat.S_IWOTH
        if perms_s[8] == 'x':
            perms |= stat.S_IXOTH
        elif perms_s[8] == 'T':
            perms |= stat.S_ISVTX
        elif perms_s[8] == 't':
            perms |= stat.S_IXOTH
            perms |= stat.S_ISVTX
        return perms
def perms_s_to_bits ( cls , perms_s : T . Optional [ str ] ) -> int : if perms_s is None : # No perms specified, we will not touch the permissions return - 1 eg = 'rwxr-xr-x' if not isinstance ( perms_s , str ) : raise MesonException ( f'Install perms must be a string. For example, {eg!r}' ) if len ( perms_s ) != 9 or not cls . symbolic_perms_regex . match ( perms_s ) : raise MesonException ( f'File perms {perms_s!r} must be exactly 9 chars. For example, {eg!r}' ) perms = 0 # Owner perms if perms_s [ 0 ] == 'r' : perms |= stat . S_IRUSR if perms_s [ 1 ] == 'w' : perms |= stat . S_IWUSR if perms_s [ 2 ] == 'x' : perms |= stat . S_IXUSR elif perms_s [ 2 ] == 'S' : perms |= stat . S_ISUID elif perms_s [ 2 ] == 's' : perms |= stat . S_IXUSR perms |= stat . S_ISUID # Group perms if perms_s [ 3 ] == 'r' : perms |= stat . S_IRGRP if perms_s [ 4 ] == 'w' : perms |= stat . S_IWGRP if perms_s [ 5 ] == 'x' : perms |= stat . S_IXGRP elif perms_s [ 5 ] == 'S' : perms |= stat . S_ISGID elif perms_s [ 5 ] == 's' : perms |= stat . S_IXGRP perms |= stat . S_ISGID # Others perms if perms_s [ 6 ] == 'r' : perms |= stat . S_IROTH if perms_s [ 7 ] == 'w' : perms |= stat . S_IWOTH if perms_s [ 8 ] == 'x' : perms |= stat . S_IXOTH elif perms_s [ 8 ] == 'T' : perms |= stat . S_ISVTX elif perms_s [ 8 ] == 't' : perms |= stat . S_IXOTH perms |= stat . S_ISVTX return perms