403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /lib/python3.11/site-packages/ansible/modules/__pycache__/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /lib/python3.11/site-packages/ansible/modules/__pycache__/git.cpython-311.pyc
�

���c�����ddlmZmZmZeZdZdZdZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlmZddlmZmZddlmZdd	lmZdd
lmZddlmZmZd�Zd2d�Z d�Z!d�Z"d�Z#d�Z$d3d�Z%d�Z&d3d�Z'd�Z(d�Z)d�Z*d�Z+d�Z,d�Z-d�Z.d�Z/d�Z0d �Z1d!�Z2d"�Z3d4d#�Z4d$�Z5d%�Z6d4d&�Z7d'�Z8d4d(�Z9d)�Z:d*�Z;d+�Z<d,�Z=d-�Z>d.�Z?d/�Z@d0�ZAeBd1kreA��dSdS)5�)�absolute_import�division�print_functiona�"
---
module: git
author:
    - "Ansible Core Team"
    - "Michael DeHaan"
version_added: "0.0.1"
short_description: Deploy software (or files) from git checkouts
description:
    - Manage I(git) checkouts of repositories to deploy files or software.
extends_documentation_fragment: action_common_attributes
options:
    repo:
        description:
            - git, SSH, or HTTP(S) protocol address of the git repository.
        type: str
        required: true
        aliases: [ name ]
    dest:
        description:
            - The path of where the repository should be checked out. This
              is equivalent to C(git clone [repo_url] [directory]). The repository
              named in I(repo) is not appended to this path and the destination directory must be empty. This
              parameter is required, unless I(clone) is set to C(false).
        type: path
        required: true
    version:
        description:
            - What version of the repository to check out. This can be
              the literal string C(HEAD), a branch name, a tag name.
              It can also be a I(SHA-1) hash, in which case I(refspec) needs
              to be specified if the given revision is not already available.
        type: str
        default: "HEAD"
    accept_hostkey:
        description:
            - Will ensure or not that "-o StrictHostKeyChecking=no" is present as an ssh option.
            - Be aware that this disables a protection against MITM attacks.
            - Those using OpenSSH >= 7.5 might want to set I(ssh_opt) to 'StrictHostKeyChecking=accept-new'
              instead, it does not remove the MITM issue but it does restrict it to the first attempt.
        type: bool
        default: 'no'
        version_added: "1.5"
    accept_newhostkey:
        description:
            - As of OpenSSH 7.5, "-o StrictHostKeyChecking=accept-new" can be
              used which is safer and will only accepts host keys which are
              not present or are the same. if C(true), ensure that
              "-o StrictHostKeyChecking=accept-new" is present as an ssh option.
        type: bool
        default: 'no'
        version_added: "2.12"
    ssh_opts:
        description:
            - Options git will pass to ssh when used as protocol, it works via C(git)'s
              GIT_SSH/GIT_SSH_COMMAND environment variables.
            - For older versions it appends GIT_SSH_OPTS (specific to this module) to the
              variables above or via a wrapper script.
            - Other options can add to this list, like I(key_file) and I(accept_hostkey).
            - An example value could be "-o StrictHostKeyChecking=no" (although this particular
              option is better set by I(accept_hostkey)).
            - The module ensures that 'BatchMode=yes' is always present to avoid prompts.
        type: str
        version_added: "1.5"

    key_file:
        description:
            - Specify an optional private key file path, on the target host, to use for the checkout.
            - This ensures 'IdentitiesOnly=yes' is present in ssh_opts.
        type: path
        version_added: "1.5"
    reference:
        description:
            - Reference repository (see "git clone --reference ...").
        version_added: "1.4"
    remote:
        description:
            - Name of the remote.
        type: str
        default: "origin"
    refspec:
        description:
            - Add an additional refspec to be fetched.
              If version is set to a I(SHA-1) not reachable from any branch
              or tag, this option may be necessary to specify the ref containing
              the I(SHA-1).
              Uses the same syntax as the C(git fetch) command.
              An example value could be "refs/meta/config".
        type: str
        version_added: "1.9"
    force:
        description:
            - If C(true), any modified files in the working
              repository will be discarded.  Prior to 0.7, this was always
              C(true) and could not be disabled.  Prior to 1.9, the default was
              C(true).
        type: bool
        default: 'no'
        version_added: "0.7"
    depth:
        description:
            - Create a shallow clone with a history truncated to the specified
              number or revisions. The minimum possible value is C(1), otherwise
              ignored. Needs I(git>=1.9.1) to work correctly.
        type: int
        version_added: "1.2"
    clone:
        description:
            - If C(false), do not clone the repository even if it does not exist locally.
        type: bool
        default: 'yes'
        version_added: "1.9"
    update:
        description:
            - If C(false), do not retrieve new revisions from the origin repository.
            - Operations like archive will work on the existing (old) repository and might
              not respond to changes to the options version or remote.
        type: bool
        default: 'yes'
        version_added: "1.2"
    executable:
        description:
            - Path to git executable to use. If not supplied,
              the normal mechanism for resolving binary paths will be used.
        type: path
        version_added: "1.4"
    bare:
        description:
            - If C(true), repository will be created as a bare repo, otherwise
              it will be a standard repo with a workspace.
        type: bool
        default: 'no'
        version_added: "1.4"
    umask:
        description:
            - The umask to set before doing any checkouts, or any other
              repository maintenance.
        type: raw
        version_added: "2.2"

    recursive:
        description:
            - If C(false), repository will be cloned without the --recursive
              option, skipping sub-modules.
        type: bool
        default: 'yes'
        version_added: "1.6"

    single_branch:
        description:
            - Clone only the history leading to the tip of the specified revision.
        type: bool
        default: 'no'
        version_added: '2.11'

    track_submodules:
        description:
            - If C(true), submodules will track the latest commit on their
              master branch (or other branch specified in .gitmodules).  If
              C(false), submodules will be kept at the revision specified by the
              main project. This is equivalent to specifying the --remote flag
              to git submodule update.
        type: bool
        default: 'no'
        version_added: "1.8"

    verify_commit:
        description:
            - If C(true), when cloning or checking out a I(version) verify the
              signature of a GPG signed commit. This requires git version>=2.1.0
              to be installed. The commit MUST be signed and the public key MUST
              be present in the GPG keyring.
        type: bool
        default: 'no'
        version_added: "2.0"

    archive:
        description:
            - Specify archive file path with extension. If specified, creates an
              archive file of the specified format containing the tree structure
              for the source tree.
              Allowed archive formats ["zip", "tar.gz", "tar", "tgz"].
            - This will clone and perform git archive from local directory as not
              all git servers support git archive.
        type: path
        version_added: "2.4"

    archive_prefix:
        description:
            - Specify a prefix to add to each file path in archive. Requires I(archive) to be specified.
        version_added: "2.10"
        type: str

    separate_git_dir:
        description:
            - The path to place the cloned repository. If specified, Git repository
              can be separated from working tree.
        type: path
        version_added: "2.7"

    gpg_whitelist:
        description:
           - A list of trusted GPG fingerprints to compare to the fingerprint of the
             GPG-signed commit.
           - Only used when I(verify_commit=yes).
           - Use of this feature requires Git 2.6+ due to its reliance on git's C(--raw) flag to C(verify-commit) and C(verify-tag).
        type: list
        elements: str
        default: []
        version_added: "2.9"

requirements:
    - git>=1.7.1 (the command line tool)
attributes:
    check_mode:
        support: full
    diff_mode:
        support: full
    platform:
        platforms: posix
notes:
    - "If the task seems to be hanging, first verify remote host is in C(known_hosts).
      SSH will prompt user to authorize the first contact with a remote host.  To avoid this prompt,
      one solution is to use the option accept_hostkey. Another solution is to
      add the remote host public key in C(/etc/ssh/ssh_known_hosts) before calling
      the git module, with the following command: ssh-keyscan -H remote_host.com >> /etc/ssh/ssh_known_hosts."
az
- name: Git checkout
  ansible.builtin.git:
    repo: 'https://foosball.example.org/path/to/repo.git'
    dest: /srv/checkout
    version: release-0.22

- name: Read-write git checkout from github
  ansible.builtin.git:
    repo: git@github.com:mylogin/hello.git
    dest: /home/mylogin/hello

- name: Just ensuring the repo checkout exists
  ansible.builtin.git:
    repo: 'https://foosball.example.org/path/to/repo.git'
    dest: /srv/checkout
    update: no

- name: Just get information about the repository whether or not it has already been cloned locally
  ansible.builtin.git:
    repo: 'https://foosball.example.org/path/to/repo.git'
    dest: /srv/checkout
    clone: no
    update: no

- name: Checkout a github repo and use refspec to fetch all pull requests
  ansible.builtin.git:
    repo: https://github.com/ansible/ansible-examples.git
    dest: /src/ansible-examples
    refspec: '+refs/pull/*:refs/heads/*'

- name: Create git archive from repo
  ansible.builtin.git:
    repo: https://github.com/ansible/ansible-examples.git
    dest: /src/ansible-examples
    archive: /tmp/ansible-examples.zip

- name: Clone a repo with separate git directory
  ansible.builtin.git:
    repo: https://github.com/ansible/ansible-examples.git
    dest: /src/ansible-examples
    separate_git_dir: /src/ansible-examples.git

- name: Example clone of a single branch
  ansible.builtin.git:
    repo: https://github.com/ansible/ansible-examples.git
    dest: /src/ansible-examples
    single_branch: yes
    version: master

- name: Avoid hanging when http(s) password is missing
  ansible.builtin.git:
    repo: https://github.com/ansible/could-be-a-private-repo
    dest: /src/from-private-repo
  environment:
    GIT_TERMINAL_PROMPT: 0 # reports "terminal prompts disabled" on missing password
    # or GIT_ASKPASS: /bin/true # for git before version 2.3.0, reports "Authentication failed" on missing password
aR
after:
    description: Last commit revision of the repository retrieved during the update.
    returned: success
    type: str
    sample: 4c020102a9cd6fe908c9a4a326a38f972f63a903
before:
    description: Commit revision before the repository was updated, "null" for new repository.
    returned: success
    type: str
    sample: 67c04ebe40a003bda0efb34eacfb93b0cafdf628
remote_url_changed:
    description: Contains True or False whether or not the remote URL was changed.
    returned: success
    type: bool
    sample: True
warnings:
    description: List of warnings if requested features were not available due to a too old git version.
    returned: error
    type: str
    sample: git version is too old to fully support the depth argument. Falling back to full checkouts.
git_dir_now:
    description: Contains the new path of .git directory if it is changed.
    returned: success
    type: str
    sample: /path/to/new/git/dir
git_dir_before:
    description: Contains the original path of .git directory if it is changed.
    returned: success
    type: str
    sample: /path/to/old/git/dir
N)�LooseVersion)�	to_native�to_text)�
AnsibleModule)�get_best_parsable_locale)�get_bin_path)�b�string_typesc�p�tj�|��r|�d|z���|r�tj�|d��}	tj||��t|d��5}|�d|z��ddd��n#1swxYwY||d<||d<dS#ttf$re}tj�|��rtj||��|�dt|��z���Yd}~dSd}~wwxYwdS)	Nz(Separate-git-dir path %s already exists.��msg�.git�wz
gitdir: %s�git_dir_before�git_dir_nowzUnable to move git dir. %s)�os�path�exists�	fail_json�join�shutil�move�open�write�IOError�OSErrorr)�module�result�repo_dir�old_repo_dir�worktree_dir�dot_git_file_path�dot_git_file�errs        �8/usr/lib/python3.11/site-packages/ansible/modules/git.py�
relocate_repor)[s���	�w�~�~�h���T����G�(�R��S�S�S��O��G�L�L��v�>�>��
	O��K��h�/�/�/��'��-�-�
<���"�"�<�(�#:�;�;�;�
<�
<�
<�
<�
<�
<�
<�
<�
<�
<�
<����
<�
<�
<�
<�'3�F�#�$�$,�F�=�!�!�!����!�	O�	O�	O��w�~�~�h�'�'�
4���H�l�3�3�3����!>�����!M��N�N�N�N�N�N�N�N�N�����		O����O�Os=�%B=�B&�B=�&B*�*B=�-B*�.
B=�=D3�AD.�.D3Fc�N�d}tj�|���rd}	t|d��}|���}|���n-#t$r |r|r|�d|z���YnwxYw|r�	|�d|zdd��}|�	d��}|d	}|�	d
d��}	|	d	�
d��}n-#t$r |r|r|�d
|z���YnwxYw|S)zExtract the head referenceN�rzUnable to read %srzrefs/remotes/%s��� ����/��
zUnable to split head from '%s')rrrr�readline�close�	Exceptionr�replace�split�rstrip)
�headfile�remoter �
fail_on_error�res�rawdata�f�refparts�newref�	nrefpartss
          r(�
head_splitterrBmsm���C�	�w�~�~�h���U���	E��X�s�#�#�A��j�j�l�l�G�
�G�G�I�I�I�I���	E�	E�	E��
E��
E�� � �%8�8�%C� �D�D�D���	E�����		U�
U�!�/�/�*;�f�*D�b�!�L�L��"�=�=��-�-��!�"���"�L�L��a�0�0�	���m�*�*�4�0�0�����
U�
U�
U� �U�V�U��$�$�)I�G�)S�$�T�T�T���
U�����Js$�8A�'B	�B	�A(C8�8'D"�!D"c	��|�dStj�tj�tj�tj�|��������S)N)rr�normpath�realpath�
expanduser�
expandvars�rs r(�unfrackgitpathrI�sU���|��t��7���B�G�,�,�R�W�-?�-?���@R�@R�SW�@X�@X�-Y�-Y�Z�Z�[�[�[�c���g}d|z}|�||���\}}}|�d��}d}	|D]}
d|
vr|
}	�	|	r�|	�dd��}	|	�dd��}	|	�dd	��}	tj|	��}|D]B}|�d
��r+|�d
d��}|�|���C|S)Nz%s submodule update --help��cwdr2zgit submodule [--quiet] update �[r,�]�|r.z--)�run_commandr7r6�shlex�
startswith�append)
r �git_pathrM�params�cmd�rc�stdout�stderr�lines�update_line�line�parts�parts
             r(�get_submodule_update_paramsr`�s��
�F�'�(�
3�C��+�+�C�S�+�9�9��B����L�L����E��K�����,��4�4��K���$�!�)�)�#�r�2�2��!�)�)�#�r�2�2��!�)�)�#�s�3�3����K�(�(���	$�	$�D����t�$�$�
$��|�|�D�"�-�-���
�
�d�#�#�#���MrJc
�(�	tj|jtjtjztjz��r!t
j|jdz���\}}nt�n-#ttf$rt
j��\}}YnwxYwtdtj�dtj�dd����z��}tj
|d��5}|�|��ddd��n#1swxYwYtj|��}tj||jtjz��|�d	|�d
|����|�|���|S)z�
        This writes an shell wrapper for ssh options to be used with git
        this is only relevant for older versions of gitthat cannot
        handle the options themselves. Returns path to the script
    r0)�prefixz #!/bin/sh
%s $GIT_SSH_OPTS "$@"
�GIT_SSH�GIT_SSH_COMMAND�sshzw+bNzWrote temp git ssh wrapper (z): rH)r�access�tmpdir�W_OK�R_OK�X_OK�tempfile�mkstemprrr�environ�get�fdopenr�stat�chmod�st_mode�S_IEXEC�debug�add_cleanup_file)r �fd�wrapper_path�template�fh�sts      r(�write_ssh_wrapperr{�s���.��9�V�]�B�G�b�g�$5���$?�@�@�	�'�/�v�}�s�7J�K�K�K��B����M���
�W��.�.�.�#�+�-�-���L�L�L�.�������j�n�n�Y��
���/@�%� H� H�I�I�J�K�K�H�

��2�u�	�	���
�������������������������
���	�	�B��H�\�2�:���4�5�5�5�
�L�L�L�,�,�,���Q�R�R�R������.�.�.��s$�A&A)�)'B�B�9D�D�"Dc�^�|�!tj�dd��}n&tj�dd��dz|z}d}|jdr||vr|d|zz
}d}||vr|d|zz
}|rd	|z}||vr|d
|zz
}d}||vr|d|zz
}|t	d��kr/|tjd<t|��}|tjd
<dStj�d
tj�dd����}	|r|	d|zz
}	|	tjd<dS)z�
        use environment variables to configure git's ssh execution,
        which varies by version but this functino should handle all.
    N�GIT_SSH_OPTSr,r.zStrictHostKeyChecking=no�accept_hostkeyz -o %sz
BatchMode=yesz-i %sz  %szIdentitiesOnly=yesz2.3.0rcrdre)rrmrnrVrr{)
�key_file�ssh_opts�git_versionr �
accept_key�force_batch�key_opt�ikey�wrapper�full_cmds
          r(�set_git_ssh_envr��sr�����:�>�>�.�"�5�5����:�>�>�.�"�5�5��;�h�F��,�J�
�}�%�&�*�:�X�+E�+E��H�z�)�)��"�K��(�"�"��H��,�,���(��H�$���(�"�"����(�(�H�#���x�����4��'�H�
�\�'�*�*�*�*�%-��
�>�"�$�F�+�+��!(��
�9�����:�>�>�)�R�Z�^�^�<M�u�-U�-U�V�V���	'���h��&�H�(0��
�$�%�%�%rJ�HEADc��|�d|��}|�||���\}}}t|���d��}|S)z% samples the version of the git repo z rev-parse rLr2�rQrr8)	r rU�dest�refrWrXrYrZ�shas	         r(�get_versionr�sS�� (�x�x���
-�C��+�+�C�T�+�:�:��B���
�F�
�
�
"�
"�4�
(�
(�C��JrJc���	td��}n;#t$r.}|�dt|�����Yd}~nd}~wwxYwd}|dddg}|�|��\}}}|dkrd	}|S)
NrezNRemote host is missing ssh command, so you cannot use acceptnewhostkey option.�r�detailsTz-oz StrictHostKeyChecking=accept-newz-VrF)r�
ValueErrorrrrQ)r �ssh_pathr'�supports_acceptnewhostkeyrWrXrYrZs        r(�ssh_supports_acceptnewhostkeyr�s���B���&�&�����B�B�B����+�4;�C�L�L�	�	B�	B�	B�	B�	B�	B�	B�	B�����B����!%���T�=�t�
D�C��+�+�C�0�0��B���	�Q�w�w�$)�!�$�$s��
A
�$A�A
c�6�|dd|d|g}|�||���\}}}|dkr|�d|||���i}d}	|���D]�}
|
�d��r|
d	d
�}	�"t	|
�����dkr0|	�|���|
���||	<d}	�w|�d|
���z�
����|	�|�d|	z�
��|S)N�	submodule�foreachz	rev-parserLrz(Unable to determine hashes of submodules�rrYrZrXz
Entering '�
r/�(z'Unable to parse submodule hash line: %srz%Unable to find hash for submodule: %s)rQr�
splitlinesrS�len�strip)rUr r��versionrWrX�outr'�
submodules�	subm_namer]s           r(�get_submodule_versionsr�sL���[�)�X�{�G�
L�C��'�'���'�6�6�N�R��c�	�Q�w�w����:����		�	�	�	�
�J��I���� � �	[�	[���?�?�<�(�(�	[��R��U��I�I�
������
�
�"�
$�
$�� �� � �"�"�"�$(�J�J�L�L�J�y�!��I�I����!J�T�Z�Z�\�\�!Y��Z�Z�Z�Z������D�y�P��Q�Q�Q��rJc	��tj�|��}	tj|��n#t$rYnwxYw|dg}|r|�d��n|�d|g��t|||||��pt|||||��}|r�|dks|	r%|�dt|��g��nS|r<|�dt|��g��|�d|g��n|�
d��|r$|�dt|��g��|ru|
�|�d
|z���|
td��kr|�
d
|
z��n.|�d��|r|�d|g��d}|rI|
�|�d
|z���|
td��krd}n|�d|z��|�||g��|�
|d|���|r1t||
|tj�|d��|��|r#|dkr|�
|dd||gd|���|	rY|dg}|r$|�dt|��g��|�||	g��|�
|d|���|rt!|||||��d	Sd	S)z3 makes a new git repo if it does not already exist �clonez--barez--originr��--depthz--branchzsIgnoring depth argument. Shallow clones are only available for HEAD, branches, tags or in combination with refspec.z--referenceNz Cannot find git executable at %srz1.7.10z=git version '%s' is too old to use 'single-branch'. Ignoring.z--single-branchFz1.7.5Tz--separate-git-dir=%s��check_rcrMr�originr:�add�fetch)rr�dirname�makedirsr5rT�extend�is_remote_branch�
is_remote_tag�str�warnrrrQr)r�verify_commit_sign)rUr �repor�r:�depthr��bare�	reference�refspec�git_version_used�
verify_commit�separate_git_dirr!�
gpg_whitelist�
single_branch�dest_dirnamerW�is_branch_or_tag�needs_separate_git_dir_fallbacks                    r(r�r�9s����7�?�?�4�(�(�L�
�
��L�!�!�!�!���
�
�
���
�����W�
�C��)��
�
�8������
�
�J��'�(�(�(�'��&�$��g�N�N�G�R_�`h�jp�rv�x|�F�SG�SG���
P��f������J�J�	�3�u�:�:�.�/�/�/�/�
�	P��J�J�	�3�u�:�:�.�/�/�/��J�J�
�G�,�-�-�-�-�
�K�K�O�
P�
P�
P��4��
�
�M�3�y�>�>�2�3�3�3��
2��#����!C�h�!N��O�O�O��l�8�4�4�4�4��K�K�W�Zj�j�k�k�k�k��J�J�(�)�)�)��
2��
�
�J��0�1�1�1�&+�#��C��#����!C�h�!N��O�O�O��l�7�3�3�3�3�.2�+�+��J�J�.�1A�A�B�B�B��J�J��d�|����
���s�T�|��<�<�<�&�Z��f�f�&6�����T�6�8R�8R�TX�Y�Y�Y��_��(�"�"����H�h��v�t�D�t�Y]��^�^�^��9���!���	0��J�J�	�3�u�:�:�.�/�/�/��
�
�F�G�$�%�%�%����3��4��8�8�8��K��8�V�T�7�M�J�J�J�J�J�K�Ks�6�
A�Ac���|rdSd|z}|�||���\}}}|���}ttd�|����}t	|��dkS)NFz%s status --porcelainrLc�.�tjd|��S)Nz^\?\?.*$)�re�search)�cs r(�<lambda>z has_local_mods.<locals>.<lambda>�s��b�i��a�&@�&@�"@�rJr)rQr��list�filterr�)	r rUr�r�rWrXrYrZr[s	         r(�has_local_modsr��st�����u�
!�X�
.�C��+�+�C�T�+�:�:��B��������E���@�@�%�H�H�I�I�E��u�:�:��>�rJc�<�|�d�}|�|d|���S)z�
    Resets the index and working tree to HEAD.
    Discards any changes to tracked files in working
    tree since that commit.
    z reset --hard HEADTr�)rQ)rUr r�rWs    r(�resetr��s+��%-�H�H�
.�C����c�D�d��;�;�;rJc	�(�|�dd|ziS||kr�t||��}	t||||||||d|	�
�
|�d|�d|��}
|�|
|���\}}}
|dkr|rd|iS|dkr
dd	|�d
|��iS|
r
dd|�d
|�d|
��iSdd|�d
|��iSiS)
z* Return the difference between 2 versions N�preparedz>> Newly checked out %sr,z diff r.rLrz!>> No visual differences between z and z%>> Failed to get proper diff between z:
>> )r�r�rQ)r rUr�r�r:r�r��before�afterr�rWrXr�r's              r(�get_diffr��s��
�~��5��=�>�>�	�5���&�x��8�8��
�h���d�E�6�5�$��L\�]�]�]�!)���6�6�6�5�5�9���+�+�C�T�+�:�:���S�#�
��7�7�s�7���$�$�
�1�W�W��J�PV�PV�PV�X]�X]� ^�_�_�
�	d��J�\b�\b�\b�di�di�di�kn�kn� o�p�p��J�TZ�TZ�TZ�\a�\a� b�c�c�
�IrJc��d}d}d}||jdkrd}n6|dtj�|jd��zkrd}n|}|dkr)|r	|�d|�d�}	n_t	|||||��}
|�d|�d|
��}	nAt|||||��r|�d|�d|��}	n#t
|||||��rd}|�d|�d	|�d
�}	n|S|�|	d|���\}}}
t|��dkr|�	d
|z||
|���t|��}|rK|�d��D]5}|�|dz��r|}n|�|��r|}�6|���d}|S)NFr�T�file://r�� ls-remote z -h HEAD� -h refs/heads/� -t refs/tags/�*r�r-z*Could not determine remote revision for %sr�r2z^{}r)
rVrrrF�get_head_branchr�r�rQr�rrr7�endswith)rUr r�r�r:r��cloningrM�tagrW�head_branchrXr�r'�revs               r(�get_remote_headr��s����G�
�C�
�C�
���v�&�&�&����	�9�r�w�1�1�&�-��2G�H�H�H�	H�	H�������&����	W�/7�x�x����@�C�C�)�(�F�D�&�$�O�O�K�8@���&�&�&�+�+�V�C�C�	�(�F�D�&�'�	B�	B��4<�H�H�f�f�f�g�g�N���	�x���v�w�	?�	?����4<�H�H�f�f�f�g�g�g�N������'�'��d��'�D�D�N�R��c�
�3�x�x�!�|�|����I�G�S�\_�hk�pr��s�s�s�
�C�.�.�C�
���9�9�T�?�?�	�	�C��|�|�G�e�O�,�,�
��������g�&�&�
����

�)�)�+�+�a�.�C��JrJc�|�|�d|�d|��}|�|d|���\}}}t|d���|vrdSdS)Nr�r�Tr��surrogate_or_strict��errorsF�rQr�	rUr r�r:r�rWrXr�r's	         r(r�r��s[��/7�x�x������
I�C��'�'��d��'�E�E�N�R��c���!6�7�7�7�3�>�>��t��urJc�2�g}|�d�}|�||���\}}}|dkr|�d|z||���|�d��D]=}|���r'|�|������>|S)Nz branch --no-color -arLrz-Could not determine branch data - received %s�rrYrZr2)rQrr7r�rT)	rUr r��branchesrWrXr�r'r]s	         r(�get_branchesr��s����H�'/�x�x�
1�C��'�'���'�6�6�N�R��c�	�Q�w�w����L�s�R�[^�gj��k�k�k��	�	�$���*�*���:�:�<�<�	*��O�O�D�J�J�L�L�)�)�)���OrJc��g}|ddddg}|�||���\}}}|dkr|�d|z||���t|���d	��D][}|���rE|����d
��\}	}
|	dkr|�|
���\|S)Nzfor-each-refz
refs/tags/�--formatz%(objecttype):%(refname:short)rLrz*Could not determine tag data - received %sr�r2�:r�)rQrrr7r�rT)rUr r��tagsrWrXr�r'r]�tagtype�tagnames           r(�get_annotated_tagsr��s���
�D��^�\�:�?_�
`�C��'�'���'�6�6�N�R��c�	�Q�w�w����I�C�O�X[�dg��h�h�h��#���$�$�T�*�*�%�%���:�:�<�<�	%�#�z�z�|�|�1�1�#�6�6��G�W��%������G�$�$�$���KrJc�|�|�d|�d|��}|�|d|���\}}}t|d���|vrdSdS)Nr�r�Tr�r�r�Fr�r�s	         r(r�r��s[��08���&�&�&�'�'�
J�C��'�'��d��'�E�E�N�R��c���!6�7�7�7�3�>�>��t��urJc�P�t|||��}d|z}||vrdSd|z|vrdSdS)Nz%sTz* %sF)r�)rUr r��branchr��lbranchs      r(�is_local_branchr�sE���H�f�d�3�3�H��V�m�G��(����t�	�&��H�	$�	$��t��urJc�z�t|||��}|D]&}|�d��rd|vsd|vsd|vrdS�'dS)Nz* z	no branchz
detached fromzdetached atTF)r�rS)rUr r�r�r�s     r(�is_not_a_branchr�sf���H�f�d�3�3�H��������T�"�"�	��v�(=�(=��TZ�AZ�AZ�^k�ou�^u�^u��4�4���5rJc�d�|r|}n tj�|d��}tj�|��r�t	|d��5}|���}ddd��n#1swxYwY|����dd��\}}|rtd���tj�	|��r|}n tj�||��}tj�
|��std|z���|S)Nrr+zgitdir: r-z..git file has invalid git dir reference formatz%s is not a directory)rrr�isfiler�readr8r7r��isabs�isdir)r�r��	repo_path�gitfile�data�
ref_prefix�gitdirs       r(�
get_repo_pathrsO���/��	�	��G�L�L��v�.�.�	�
�w�~�~�i� � �B�
�)�S�
!�
!�	"�W��<�<�>�>�D�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"�!�[�[�]�]�0�0��Q�?�?��
�F��	O��M�N�N�N��7�=�=�� � �	3��I�I�����T�6�2�2�I��w�}�}�Y�'�'�	B��4�y�@�A�A�A��s�A6�6A:�=A:c�~�	t||��}nC#ttf$r/}	|�dt	|�����Yd}~nd}~wwxYwt
j�|d��}t|||��r#t
j�|dd|d��}t|||d���}|S)	aN
    Determine what branch HEAD is associated with.  This is partly
    taken from lib/ansible/utils/__init__.py.  It finds the correct
    path to .git/HEAD and reads from that file the branch that HEAD is
    associated with.  In the case of a detached HEAD, this will look
    up the branch in .git/refs/remotes/<remote>/HEAD.
    �cCurrent repo does not have a valid reference to a separate Git dir or it refers to the invalid pathr�Nr��refs�remotesT)r r;)
rrr�rrrrrr�rB)	rUr r�r:r�r�r'r9r�s	         r(r�r�0s���	
�!�$��-�-�	�	���Z� �
�
�
�N����@��C�L�L�	�	
�	
�	
�	
�	
�	
�	
�	
�����
�����w�|�|�I�v�.�.�H��x���.�.�N��7�<�<�	�6�9�f�f�M�M��
�8�V�F�$�
O�
O�
O�F��Ms��A�%A�Ac��|dd|g}|�||���\}}}|dkrdSt|���d��S)z%Return URL of remote source for repo.z	ls-remotez	--get-urlrLrNr2r�)rUr r�r:�commandrXr�r's        r(�get_remote_urlrLsX����k�6�:�G��'�'��T�'�:�:�N�R��c�	�Q�w�w��t��S�>�>� � ��&�&�&rJc��t||||��}||ks t|��t|��krdS|dd||g}|�||���\}}}	|dkr'd|�d|��}
|�d|
�d	|�d
|	�����|duS)
�" updates repo from remote sources Fr:zset-urlrLrzset a new url z for �
Failed to �: r.rN)rrIrQr)rUr r�r�r:�
remote_urlrrXr�r'�labels           r(�set_remote_urlrWs��� ��&�$��?�?�J��T���^�J�7�7�>�$�;O�;O�O�O��u���9�f�d�;�G��'�'��T�'�:�:�N�R��c�	�Q�w�w�w�-1�T�T�6�6�:������e�e�e�S�S�S�#�#�F��G�G�G��T�!�!rJc	��t|||||��g}d}|dg}
g}|r�t||||��}|r|�|��n�|dkr|�|��n�t|||||��r@||kr|�d|�d|����|�d|�d|�d|����n1t	|||||��r|�d|zd	z|z��|r$|
�d
t
|��g��|r|se|rddg}nG|	td
��kr|
�d��n|�||
|gzf��dg}|r|�|��|
r|
�d��|
�|g��|�||
|zf��|D]F\}}|�||���\}}}|dkr |�	d|�d|�d|��|����GdS)r
z download remote objects and refsr�r��+refs/heads/�:refs/heads/�:refs/remotes/r0z+refs/tags/z:refs/tags/r�z+refs/heads/*:refs/heads/*z+refs/tags/*:refs/tags/*z1.9z--tags�--forcerLrrrr.)rrWN)
rr�rTr�r�r�r�rrQr)rUr r�r�r�r:r�r�r�r��force�commands�	fetch_str�	fetch_cmd�refspecs�currentheadrrrXr�r's                     r(r�r�is����8�V�T�4��8�8�8��H�2�I��7�#�I��H��6�&�h���f�E�E���	O��O�O�G�$�$�$�$�
��
�
��O�O�K�(�(�(�(�
�h���d�G�
D�
D�	O��g�%�%�����'�'�'�7�7� S�T�T�T��O�O�O�7�7�7�F�F�F�T[�T[�\�]�]�]�]�
�8�V�T�4��
A�
A�	O��O�O�M�G�3�m�C�g�M�N�N�N��	6�

���i��U���4�5�5�5��%��%��		8�4�6P�Q�H�H� �<��#6�#6�6�6�� � ��*�*�*�*�����I���,@� A�B�B�B�6�7���	%��O�O�G�$�$�$��$�����#�#�#�
���f�X�����O�O�Y�	�H� 4�5�6�6�6�$�Y�Y�����+�+�G��+�>�>���S�#�
��7�7�����%�%�%����c�c�!J�PW��X�X�X��Y�YrJc���d}tj�tj�|d����s|St	tj�|d��d��}|D]�}|s�|����d��rn|�dd��d���}tj�tj�||d����sd}��|s�t|||��}	|d	d
|dg}
|�	|
d|���\}}}
|d
kr|�
d|z|
z���|r"d}t||||�d|����}|	|krd}nj|d	dg}
|�	|
d|���\}}}
|d
kr|�
d|z|
z���|���D]}|d
dkrd}n�|S)NF�.gitmodulesr+r�=r-rTr�r�r�r�rzFailed to fetch submodules: %sr�masterr0�statusz'Failed to retrieve submodule status: %sr.)rrrrrr�rSr7r�rQrr�)rUr r:�track_submodulesr��changed�gitmodules_filer]r�beginrWrXr�r'r�r�s                r(�submodules_fetchr$�s"���G�
�7�>�>�"�'�,�,�t�]�;�;�<�<�����2�7�<�<��m�<�<�c�B�B�O������	�4�:�:�<�<�2�2�6�:�:�	��:�:�c�1�%�%�a�(�.�.�0�0�D��7�>�>�"�'�,�,�t�T�6�"B�"B�C�C�
������&�x���>�>����i��7�C���+�+�C�$�D�+�I�I���S�#�
��7�7����!A�C�!G�#�!M��N�N�N��	��G�*�8�V�T�f�f�f�V]�V]�C^�_�_�E���~�~�����[�(�3�C�#�/�/��d��/�M�M�N�R��c��Q�w�w�� � �%N�QT�%T�WZ�%Z� �[�[�[����(�(�
�
����7�c�>�>�"�G��E�"��NrJc���t|||��}tj�tj�|d����sdS|ddg}|�|d|���\}}}	d|vr|r	|ddd	d
dg}n|ddd	d
g}|r|�d��|�||�
��\}}}	|dkr|�d|z|	z���|||	fS)z  init and update any submodules r)rr,r,r��syncTr�r:�updatez--initz--recursivez--remoterrLrz$Failed to init/update submodules: %sr)r`rrrrrQrTr)
rUr r�r rrVrWrXr�r's
          r(�submodule_updater(�s��)���4�
@�
@�F��7�>�>�"�'�,�,�t�]�;�;�<�<���{��[�&�
)�C��'�'��d��'�E�E�N�R��c��6���.����h��-��T�����h��-�H�����
�
�9�����'�'���'�6�6�N�R��c�	�Q�w�w����C�c�I�C�O��P�P�P���S�>�rJc���d|�d|��}|d|�d|�d|��z
}|�d|�d|�d|��}|�||���\}}	}
|d	kr|�d
|z|	|
|���dSdS)
z�set refs for the remote branch version

    This assumes the branch does not yet exist locally and is therefore also not checked out.
    Can't use git remote set-branches, as it is not available in git 1.7.1 (centos6)
    rrz
 +refs/heads/rr0z fetch --depth=r.rLrz&Failed to fetch branch from remote: %sr�N)rQr)rUr r�r:r�r��	branchrefrWrXr�r's           r(�set_remote_branchr+�s����3:�'�'�7�7�C�I�
�I����&�&�&�'�'�R�R�I�)1���5�5�5�&�&�&�)�)�
L�C��'�'���'�6�6�N�R��c�	�Q�w�w����E��O�X[�dg�ln��o�o�o�o�o��wrJc�(�d}|dkr`t||||��}	|�|�d|	��|���\}
}}|
dkr|�d|	z|||
���|�d|�d	|	�d
�}n�t|||||��r�|r&t	||||��st||||||��t	||||��s|�d|�d|�d	|��}nT|�|�d|��|���\}
}}|
dkr|�d|z|||
���|�d|�d	|��}n|�d|��}|�||���\}
}
}|
dkrA|dkr|�d
|z|
||
|���n|�d|	z|
||
|���|rt
|||||��|
|
|fS)Nr,r�z checkout --force rLrzFailed to checkout branch %sr�z reset --hard r0z --z checkout --track -b r.zFailed to checkout %s)rrYrZrXrW)r�rQrr�r�r+r�)rUr r�r:r�r�r�r�rWr�rXr�r'�out1�err1s               r(�switch_versionr/�s|��
�C��&��� ��6�4��@�@���+�+����RX�RX�,Y�_c�+�d�d���S�#�
��7�7����!?�&�!H�$'���
�
<�
<�
<�,4�H�H�f�f�f�f�f�f�E����H�f�d�F�G�D�D�	A��
R�_�X�v�t�W�M�M�
R�"�(�F�D�&�'�5�Q�Q�Q�"�8�V�T�7�C�C�
L�;C�8�8�W�W�W�f�f�f�V]�V]�^���!'�!3�!3�PX�PX�PX�Za�Za�4b�hl�!3�!m�!m���S�#���7�7��$�$�)G�'�)Q�Z]�fi�np�$�q�q�q�19���6�6�6�7�7�K���.6�h�h���@�C��)�)�#�4�)�8�8��R��t�	�Q�w�w��f������!8�G�!D�$(��"�#�
�
G�
G�
G�
G�
���!?�6�!J�$(��"�#�
�
G�
G�
G��K��8�V�T�7�M�J�J�J���d��rJc�:�|t|||��vrd}nd}|�d|�d|��}|r|dz
}|�||���\}}}	|dkr|�d|z||	|���|r/t|	��}
|
|vr|�d	|
z||	|���|||	fS)
Nz
verify-tagz
verify-commitr.z --rawrLrz1Failed to verify GPG signature of commit/tag "%s"r�zFThe gpg_whitelist does not include the public key "%s" for this commit)r�rQr�get_gpg_fingerprint)rUr r�r�r��git_subrWrXr�r'�fingerprints           r(r�r�#s���$�X�v�t�<�<�<�<����!�� ���'�'�'�7�7�
3�C����x����'�'���'�6�6�N�R��c�	�Q�w�w����P�SZ�Z�cf�or�wy��z�z�z��X�)�#�.�.���m�+�+����!i�lw�!w�AD�MP�UW��
X�
X�
X���S�>�rJc��|���D]C}|���}|ddkr�#t|��dkrdnd}||cSdS)z�Return a fingerprint of the primary key.

    Ref:
    https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=blob;f=doc/DETAILS;hb=HEAD#l482
    r-�VALIDSIG�r1N)r�r7r�)�outputr]r��data_ids    r(r1r15sq���!�!�#�#�����z�z�|�|����7�j� � ���D�	�	�R���"�"�Q���G�}�����rJc���d|z}|�|��\}}}|dkrdStjdt|����}|sdSt	|���d��S)z#return the installed version of gitz%s --versionrNzgit version (.*)$)rQr�r�rr�groups)rUr rWrXr�r'�rematchs       r(r�r�Esw��
�8�
#�C��'�'��,�,�N�R��c�	�Q�w�w��t��i�+�Y�s�^�^�<�<�G����t�����(�(��+�,�,�,rJc	��|dd|d||g}|�,|�dd��|�d|��|�||���\}}	}
|dkr |�d	d
|�d|�d|
���
��||	|
fS)z. Create git archive in given source directory �archiver�z--outputNr/z--prefixrLrz#Failed to perform archive operationz-Git archive command failed to create archive z using z directory.Error: r�)�insertrQr)rUr r�r=�archive_fmt�archive_prefixr�rWrXr�r's           r(�git_archiverASs����Y�
�K��W�g�
V�C��!��
�
�2�z�"�"�"��
�
�2�~�&�&�&��'�'���'�6�6�N�R��c�	�Q�w�w����B�B�18������s�s�"D�	�	E�	E�	E��s�C�<�rJc	��ddddd�}tj�|��\}	}
|�|
d��}|�|�d|zd�	��|�d
��d�dd
��}tj�|���r*tj	��}
tj�
|
|��}|dz|z}t|||||||��tj
||��r>|�d���	tj|
��dS#t"$rYdSwxYw	tj||��tj|
��|�d���dS#t"$r8}|�d|�d|��dt'|��z�	��Yd}~dSd}~wwxYwt|||||||��|�d���dS)z8 Helper function for creating archive using git_archive �zipztar.gz�tar�tgz)z.zipz.gzz.tarz.tgzNz8Unable to get file extension from archive file name : %szoPlease specify archive as filename with extension. File extension can be one of ['tar', 'tar.gz', 'zip', 'tgz']r�r0r/rr,�.F�r!TzFailed to move z to z Error occurred while moving : %s)rr�splitextrnrr7r6rrk�mkdtemprrA�filecmp�cmpr'r�rmtreerrr)rUr r�r=r@r�r�r!�all_archive_fmt�_�archive_extr?�	repo_name�tempdir�new_archive_dest�new_archive�es                 r(�create_archiverUbsi��$�X�u�$�&�&�O��W�%�%�g�.�.�N�A�{�!�%�%�k�4�8�8�K������6�8?�@�"F�	�	G�	G�	G��
�
�3����#�+�+�F�B�7�7�I�	�w�~�~�g���$��"�$�$���7�<�<���;�;��&��,�{�:���H�f�d�K��n�V]�^�^�^��;�{�G�,�,�	7��M�M�%�M�(�(�(�
��
�g�&�&�&�&�&���
�
�
����
����
7���K��1�1�1��
�g�&�&�&��
�
�d�
�+�+�+�+�+���
7�
7�
7�� � � �&1�k�k�7�7�&<�)L�+2�1�:�:�*6�!�7�7�7�7�7�7�7�7�7�����
7����	�H�f�d�G�[�.�RY�Z�Z�Z��
�
�d�
�#�#�#�#�#s*�'D=�=
E�
E�?F�
G�-G
�
Gc��ttdUidtd����dtddg����dtd	�
���dtd�
���d
td�
���dtd�
���dtdd����dtdd����dtdd����dtdd����dtdd����dtgdd����dtdd����dtdd����dtddd �!���d"tdd �#���d$tdd����d%tdd����d&tdd����d'td d����d(tdd����d)tdd*����d+td����d,t���d-td�����d.d/gd,d+gid�0��}|jd}|jd}|jd}|jd}|jd
}|jd}|jd}|jd}|jd}	|jd%}
|jd}|jd}|jd}
|jd'}|jd$p|�d1d��}|jd}|jd"}|jd)}|jd+}|jd,}|jd-}td t	���2��}|jdr|�d3|vr	d4|vr|d5z
}nd3}|jdr7t|��s|�d6��n|�d3|vr	d4|vr|d7z
}nd4}|��t|t��s|�	d8�9��	t|d:��}nK#t$r>|�	d;ttj��d<���=��YnwxYwtj|��tj�|���d>��r"d?tj�|��z}t)|��}t||||�@��|_|rtj�|��}d}|s|	r|�	dA�9��n�|r�tj�|��}	t1||
��}|rFtj�|��r'||kr!d|dB<|jst7|||||��|}nC#t8t:f$r/}	|�	dCt|���=��Yd}~nd}~wwxYwtj�|dD��}t?||��}tA||||��|�*|tCdE��kr|�dF��d}|jd&}|jd(}|�"d�G��d }|rtj�|��r|s�|	s�|js|	sitG||||||
��}|�"d|�H��|j$r*tK|||||||
|dI|dJ�	�	} | r| |dK<|j&dUi|��tO||||||||
|
|||||||���n
|s�tQ|||��|dI<|�"|dI�L��|r@|jr#|�"d�M��|j&dUi|��tS||||||||��|j&dUi|���n�tU||||
��}tQ|||��|dI<|rI|s|j	dUdNdO|zdPzi|��|js+tW|||��|�"ddO|z�Q��|jr;tY||||��}!|!o%|!|kot[|!��t[|��k}"nt]|||||��}"|�"|"�R��|jrvtG||||||
��}|�"|dI|kp|"|�H��|j$r*tK|||||||
|dI|dJ�	�	} | r| |dK<|j&dUi|��nt_||||||||
|||�S��tQ|||��|dJ<|
sta||||||||��d }#|rl|
sjtc|||||��}#|#rU|�"|#�T��|jr$|�"d|�H��|j&dUi|��te|||||�S��tQ|||��|dJ<|dI|dJks|s|#s|"rG|�"d�M��|j$r*tK|||||||
|dI|dJ�	�	} | r| |dK<|r@|jr#|�"d�M��|j&dUi|��tS||||||||��|j&dUi|��dS)VNr�r)�typer�T�name)�required�aliasesr�r�)�defaultr:r�r�r�r�no�bool)r[rWr��intr��yesr'r�r�r�r�)r[rW�elementsr~�accept_newhostkeyrF)r[rWrYr�)r[rY�
executabler��	recursiver�r �umask�rawr=r@r�)r�r�)r~ra)�
argument_spec�mutually_exclusive�required_by�supports_check_mode�git)r!�warningsz-o StrictHostKeyChecking=noz#-o StrictHostKeyChecking=accept-newz -o StrictHostKeyChecking=nozWYour ssh client does not support accept_newhostkey option, therefore it cannot be used.z$ -o StrictHostKeyChecking=accept-newz/umask must be defined as a quoted octal integerr�zumask must be an octal integerr-r�r0r�)�LANG�LC_ALL�LC_MESSAGES�LC_CTYPEz;the destination directory must be specified unless clone=nor!r�configz1.9.1z[git version is too old to fully support the depth argument. Falling back to full checkouts.)r�)r!r�r�r��diff)r�rGrz.Local modifications exist in the destination: z (force=no).)r!r)�remote_url_changed)r)�submodules_changed�)3r	�dictrVrr�r�r��
isinstancer
rr^r5r�sys�exc_inforrdrrFrSr
�run_command_environ_updaterE�abspathrr�
check_moder)rr�rr�r�rr'r��_diffr��	exit_jsonr�r�rUr�r�rrIrr�r/r$r()$r r�r�r�r:r�rr�r'�allow_cloner�r�r�r�r�rUrr�rdr=r@r�r!�locale�	gitconfigr�r'r�rcr �
local_mods�remote_headrrr
rs�submodules_updateds$                                    r(�mainr��sE
��
��
�
�
��6�"�"�"�"�
��t�f�X�6�6�6�6�
���(�(�(�(�
���)�)�)�)�	
�
��&�&�&�&�
��4�(�(�(�(�

��t�&�1�1�1�1�
��t�%�0�0�0�0�
��u�6�2�2�2�2�
���F�3�3�3�3�
��t�&�9�9�9�9�
��r���G�G�G�G�
� ��6�:�:�:�:�
�#�4�f�=�=�=�=�
��$�V�e�D�D�D�D�
� �$��7�7�7�7�!
�"�D�v�6�6�6�6�#
�$�d��0�0�0�0�%
�&�5�v�6�6�6�6�'
�(�u�6�:�:�:�:�)
�*"�$�V�<�<�<�<�+
�,�t�%�0�0�0�0�-
�.�f�%�%�%�%�/
�0 �6�6�6�1
�2"�v�.�.�.�.�3
�69�:a�b�%�	�{�3� �=���F�B�=�� �D��=�� �D��m�I�&�G�
�]�8�
$�F��m�I�&�G��M�'�"�E��M�'�"�E�
�]�8�
$�F��-��(�K��=�� �D��M�/�2�M��M�/�2�M��
�k�*�I��M�/�2�M��}�\�*�N�f�.A�.A�%��.N�.N�H��}�Z�(�H��}�Z�(�H��M�'�"�E��m�I�&�G��]�#3�4�N��}�%7�8��
�%�$�&�&�
1�
1�
1�F�
�}�%�&�5���-�X�=�=�Di�qy�Dy�Dy��:�:���4�H�
�}�(�)�A�,�V�4�4�	A��K�K�q�r�r�r�r��#�1��A�A�Hm�u}�H}�H}�� F�F�H��@��
���%��.�.�	T����!R��S�S�S�	A���q�M�M�E�E���	A�	A�	A����!A�%,�S�\�^�^�A�->�%?�%?�
�
A�
A�
A�
A�
A�	A����	������
�w���$���*�*�3�/�/�4��2�7�-�-�d�3�3�3��&�f�
-�
-�F�(,�&��U[�fl�(m�(m�(m�F�%��>��7�+�+�,<�=�=���I��6�K�6����Z��[�[�[�[�	
�6��w���t�$�$��	�%�d�D�1�1�I��
1�B�G�N�N�9�$=�$=�
1�BR�V_�B_�B_�$(��y�!��(�1�!�&�&�2B�I�t�T�T�T� 0�I�����$�	�	�	�R����D�����
�
�
�
�
�
�
�
�
�����	�����G�L�L��H�5�5�	�#�8�V�4�4���H�h�(8�&�A�A�A���-��W�0E�0E�E�E����q�r�r�r����
�k�*�I��}�%7�8��
�M�M��M�����J��A>�R�W�^�^�I�.�.�A>��A>�[�A>�
��	'�K�	'�)�(�F�D�'�4�QU�V�V�K��M�M�$�k�M�:�:�:��|�
*����$��f�e�T�SY�Zb�Sc�ek�ls�et�u�u���*�%)�F�6�N��F��&�&�v�&�&�&�
�h���d�F�E�7�D�)��'��8H�&�R_�an�	p�	p�	p�	p�
�1>�'�v�x��>�>��x���
�
�F�8�,�
�-�-�-��	c�� �
+��
�
�d�
�+�+�+� �� �*�*�6�*�*�*��8�V�T�7�N�G�UY�[a�b�b�b����"�"�6�"�"�"�"�$�F�H�d�D�A�A�
�&�v�x��>�>��x���	i��
y� �� �x�x�%U�X\�%\�_m�%m�x�qw�x�x�x��$�
i��h���-�-�-��
�
�d�0`�cg�0g�
�h�h�h���	V�'��&�$��G�G�J�!+�!y�
�d�0B�!y�~�V`�Ga�Ga�es�tx�ey�ey�Gy���!/��&�$��f�!U�!U���
�
�);�
�<�<�<���
	v�)�(�F�D�'�6�SW�X�X�K��M�M�6�(�#3�{�#B�#X�FX�al�M�m�m�m��|�
*����$��f�e�T�SY�Zb�Sc�ek�ls�et�u�u���*�%)�F�6�N��F��&�&�v�&�&�&�&��(�F�D�$�����g�Wg�ot�u�u�u�u�%�f�h��=�=��w���e��x���v�w�
�u�Vc�d�d�d����
T��
T�-�h���HX�Z^�_�_���	T��M�M�-?�M�@�@�@�� �
+��
�
�d�+�
�>�>�>� �� �*�*�6�*�*�*�
�X�v�t�5E�U�S�S�S�S�"�&�(�D�9�9�F�7�O�
�h��6�'�?�*�*�j�*�<N�*�Rd�*��
�
�d�
�#�#�#��<�	&��F�H�d�D�&�%��v�V^�O_�ag�ho�ap�q�q�D��
&�!%��v���_���	'��M�M�$�M�'�'�'��F��&�&�v�&�&�&��x���w���QU�W]�^�^�^��F����v�����s,�1O�AP
�	P
�<AU�V�&%V�V�__main__)NF)r�)F)C�
__future__rrrrW�
__metaclass__�
DOCUMENTATION�EXAMPLES�RETURNrJrr�rRrprxrrk�#ansible.module_utils.compat.versionr�ansible.module_utils._textrr�ansible.module_utils.basicr	�"ansible.module_utils.common.localer
�#ansible.module_utils.common.processr�ansible.module_utils.sixrr
r)rBrIr`r{r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr�rrr�r$r(r+r/r�r1r�rArUr��__name__rurJr(�<module>r�st��A�@�@�@�@�@�@�@�@�@��
�b�
�H9��v
��B����	�	�	�	�	�	�	�	���������
�
�
�
�
�
�
�
�����<�<�<�<�<�<�9�9�9�9�9�9�9�9�4�4�4�4�4�4�G�G�G�G�G�G�<�<�<�<�<�<�4�4�4�4�4�4�4�4�O�O�O�$����6\�\�\����8"�"�"�J21�21�21�j����%�%�%�����6DK�DK�DK�N	�	�	�<�<�<����**�*�*�Z���	�	�	����������������2����8'�'�'�"�"�"�$;Y�;Y�;Y�;Y�|*�*�*�Z����.p�p�p�&�&�&�R���$
�
�
� -�-�-����-$�-$�-$�dr�r�r�j�z����D�F�F�F�F�F��rJ

Youez - 2016 - github.com/yon3zu
LinuXploit