def clear_git_lock(role, remote=None, **kwargs):
    '''
    .. versionadded:: 2015.8.2

    Remove the update locks for Salt components (gitfs, git_pillar, winrepo)
    which use gitfs backend code from salt.utils.gitfs.

    .. note::
        Running :py:func:`cache.clear_all <salt.runners.cache.clear_all>` will
        not include this function as it does for pillar, grains, and mine.

        Additionally, executing this function with a ``role`` of ``gitfs`` is
        equivalent to running ``salt-run fileserver.clear_lock backend=git``.

    role
        Which type of lock to remove (``gitfs``, ``git_pillar``, or
        ``winrepo``)

    remote
        If specified, then any remotes which contain the passed string will
        have their lock cleared. For example, a ``remote`` value of **github**
        will remove the lock from all github.com remotes.

    type : update,checkout,mountpoint
        The types of lock to clear. Can be one or more of ``update``,
        ``checkout``, and ``mountpoint``, and can be passed either as a
        comma-separated or Python list.

        .. versionadded:: 2015.8.8
        .. versionchanged:: 2018.3.0
            ``mountpoint`` lock type added

    CLI Examples:

    .. code-block:: bash

        salt-run cache.clear_git_lock gitfs
        salt-run cache.clear_git_lock git_pillar
        salt-run cache.clear_git_lock git_pillar type=update
        salt-run cache.clear_git_lock git_pillar type=update,checkout
        salt-run cache.clear_git_lock git_pillar type='["update", "mountpoint"]'
    '''
    kwargs = salt.utils.args.clean_kwargs(**kwargs)
    type_ = salt.utils.args.split_input(
        kwargs.pop('type', ['update', 'checkout', 'mountpoint']))
    if kwargs:
        salt.utils.args.invalid_kwargs(kwargs)

    if role == 'gitfs':
        git_objects = [
            salt.utils.gitfs.GitFS(
                __opts__,
                __opts__['gitfs_remotes'],
                per_remote_overrides=salt.fileserver.gitfs.PER_REMOTE_OVERRIDES,
                per_remote_only=salt.fileserver.gitfs.PER_REMOTE_ONLY
            )
        ]
    elif role == 'git_pillar':
        git_objects = []
        for ext_pillar in __opts__['ext_pillar']:
            key = next(iter(ext_pillar))
            if key == 'git':
                if not isinstance(ext_pillar['git'], list):
                    continue
                obj = salt.utils.gitfs.GitPillar(
                    __opts__,
                    ext_pillar['git'],
                    per_remote_overrides=salt.pillar.git_pillar.PER_REMOTE_OVERRIDES,
                    per_remote_only=salt.pillar.git_pillar.PER_REMOTE_ONLY,
                    global_only=salt.pillar.git_pillar.GLOBAL_ONLY)
                git_objects.append(obj)
    elif role == 'winrepo':
        winrepo_dir = __opts__['winrepo_dir']
        winrepo_remotes = __opts__['winrepo_remotes']

        git_objects = []
        for remotes, base_dir in (
            (winrepo_remotes, winrepo_dir),
            (__opts__['winrepo_remotes_ng'], __opts__['winrepo_dir_ng'])
        ):
            obj = salt.utils.gitfs.WinRepo(
                __opts__,
                remotes,
                per_remote_overrides=salt.runners.winrepo.PER_REMOTE_OVERRIDES,
                per_remote_only=salt.runners.winrepo.PER_REMOTE_ONLY,
                global_only=salt.runners.winrepo.GLOBAL_ONLY,
                cache_root=base_dir)
            git_objects.append(obj)
    else:
        raise SaltInvocationError('Invalid role \'{0}\''.format(role))

    ret = {}
    for obj in git_objects:
        for lock_type in type_:
            cleared, errors = _clear_lock(obj.clear_lock,
                                          role,
                                          remote=remote,
                                          lock_type=lock_type)
            if cleared:
                ret.setdefault('cleared', []).extend(cleared)
            if errors:
                ret.setdefault('errors', []).extend(errors)
    if not ret:
        return 'No locks were removed'
    return ret
def clear_git_lock ( role , remote = None , ** kwargs ) : kwargs = salt . utils . args . clean_kwargs ( ** kwargs ) type_ = salt . utils . args . split_input ( kwargs . pop ( 'type' , [ 'update' , 'checkout' , 'mountpoint' ] ) ) if kwargs : salt . utils . args . invalid_kwargs ( kwargs ) if role == 'gitfs' : git_objects = [ salt . utils . gitfs . GitFS ( __opts__ , __opts__ [ 'gitfs_remotes' ] , per_remote_overrides = salt . fileserver . gitfs . PER_REMOTE_OVERRIDES , per_remote_only = salt . fileserver . gitfs . PER_REMOTE_ONLY ) ] elif role == 'git_pillar' : git_objects = [ ] for ext_pillar in __opts__ [ 'ext_pillar' ] : key = next ( iter ( ext_pillar ) ) if key == 'git' : if not isinstance ( ext_pillar [ 'git' ] , list ) : continue obj = salt . utils . gitfs . GitPillar ( __opts__ , ext_pillar [ 'git' ] , per_remote_overrides = salt . pillar . git_pillar . PER_REMOTE_OVERRIDES , per_remote_only = salt . pillar . git_pillar . PER_REMOTE_ONLY , global_only = salt . pillar . git_pillar . GLOBAL_ONLY ) git_objects . append ( obj ) elif role == 'winrepo' : winrepo_dir = __opts__ [ 'winrepo_dir' ] winrepo_remotes = __opts__ [ 'winrepo_remotes' ] git_objects = [ ] for remotes , base_dir in ( ( winrepo_remotes , winrepo_dir ) , ( __opts__ [ 'winrepo_remotes_ng' ] , __opts__ [ 'winrepo_dir_ng' ] ) ) : obj = salt . utils . gitfs . WinRepo ( __opts__ , remotes , per_remote_overrides = salt . runners . winrepo . PER_REMOTE_OVERRIDES , per_remote_only = salt . runners . winrepo . PER_REMOTE_ONLY , global_only = salt . runners . winrepo . GLOBAL_ONLY , cache_root = base_dir ) git_objects . append ( obj ) else : raise SaltInvocationError ( 'Invalid role \'{0}\'' . format ( role ) ) ret = { } for obj in git_objects : for lock_type in type_ : cleared , errors = _clear_lock ( obj . clear_lock , role , remote = remote , lock_type = lock_type ) if cleared : ret . setdefault ( 'cleared' , [ ] ) . extend ( cleared ) if errors : ret . setdefault ( 'errors' , [ ] ) . extend ( errors ) if not ret : return 'No locks were removed' return ret
.. versionadded:: 2015.8.2

    Remove the update locks for Salt components (gitfs, git_pillar, winrepo)
    which use gitfs backend code from salt.utils.gitfs.

    .. note::
        Running :py:func:`cache.clear_all <salt.runners.cache.clear_all>` will
        not include this function as it does for pillar, grains, and mine.

        Additionally, executing this function with a ``role`` of ``gitfs`` is
        equivalent to running ``salt-run fileserver.clear_lock backend=git``.

    role
        Which type of lock to remove (``gitfs``, ``git_pillar``, or
        ``winrepo``)

    remote
        If specified, then any remotes which contain the passed string will
        have their lock cleared. For example, a ``remote`` value of **github**
        will remove the lock from all github.com remotes.

    type : update,checkout,mountpoint
        The types of lock to clear. Can be one or more of ``update``,
        ``checkout``, and ``mountpoint``, and can be passed either as a
        comma-separated or Python list.

        .. versionadded:: 2015.8.8
        .. versionchanged:: 2018.3.0
            ``mountpoint`` lock type added

    CLI Examples:

    .. code-block:: bash

        salt-run cache.clear_git_lock gitfs
        salt-run cache.clear_git_lock git_pillar
        salt-run cache.clear_git_lock git_pillar type=update
        salt-run cache.clear_git_lock git_pillar type=update,checkout
        salt-run cache.clear_git_lock git_pillar type='["update", "mountpoint"]'