File: //usr/lib64/python3.9/site-packages/borg/testsuite/__pycache__/archiver.cpython-39.pyc
a
HZ�h"� � @ s� d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl Z d dl
Z
d dlZd dlZd dl
Z
d dlZd dlZd dlZd dlZd dlZd dlmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZmZ d d lm Z d dl!Z!d dl"Z"d dl#Z"d
dl$m%Z%m&Z&m'Z' d
dl(m)Z)m*Z* d
d
l+m,Z,m-Z-m.Z. d
dl/m0Z0m1Z1 d
dl2m3Z3 d
dl4T d
dl5m6Z6m7Z7 d
dl8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z> d
dl?m@Z@mAZA d
dlBmCZC d
dl&mDZDmEZE d
dl&mFZFmGZGmHZH d
dl&mIZImJZJmKZK d
dl&mLZL d
dl&mMZM d
dl&mNZN d
dl&mOZOmPZP d
dl&mQZQ d
dlRmSZSmTZT d
dlUmVZVmWZWmXZX d
dlYmZZZm[Z[m\Z\ d
d l]m^Z^ d
d!l_m`Z` d
d"lambZbmcZc d
d#ldmeZe d$d%l$mfZfmgZg d$d&l$mhZhmiZimjZjmkZkmlZl d$d'l$mmZmmnZnmoZompZpmqZq d$d(l'mrZrmsZsmtZt d$d)lumvZv d$d*l$mwZw ejx�yejx�zejx�{e|�d+��Z}dd,dd-d,d.�d/d0�Z~d1d2� Zze~d3d4d5d6� d7d8gZ�W n e��y� d7gZ�Y n0 e!j�e�d9�d:d;� �Z�d<d=� Z�d>Z�e!j�j�ejx��e�� d?e� d@�dAdB� �Z�G dCdD� dDeh�Z�G dEdF� dFe��Z�e��d8e�v dG�G dHdI� dIe���Z�G dJdK� dKe��Z�G dLdM� dMe��Z�G dNdO� dOe��Z�G dPdQ� dQe��Z�G dRdS� dSe��Z�G dTdU� dUe��Z�dVdW� Z�dXdY� Z�G dZd[� d[�Z�G d\d]� d]�Z�d^d_� Z�d`da� Z�e!j���dbe�e�� ��� ��dcdd� �Z�e!j���dee�e,j���� ��dfdg� �Z�dS )h� N)� unhexlify�
b2a_base64)�ConfigParser)�datetime)�timezone)� timedelta)�sha256)�BytesIO�StringIO)�patch� )�xattr�helpers�platform)�Archive�ChunkBuffer)�Archiver�parse_storage_quota�PURE_PYTHON_MSGPACK_WARNING)�Cache�
LocalCache)�
has_seek_hole)�*)�
bytes_to_long�num_cipher_blocks)�KeyfileKeyBase�RepoKey�
KeyfileKey�
Passphrase�TAMRequiredError�ArchiveTAMRequiredError)�RepoIdMismatch�NotABorgKeyFile)�FileIntegrityError)�Location�get_security_dir)�Manifest�MandatoryFeatureUnsupported�ArchiveInfo)�EXIT_SUCCESS�EXIT_WARNING�
EXIT_ERROR)�
bin_to_hex)�MAX_S)�msgpack)�
flags_noatime�flags_normal)�utcnow)�
RstToTextLazy�rst_to_terminal)� IECommand�PatternMatcher�
parse_pattern)�Item�ItemDiff�chunks_contents_equal)�
LockFailed)�
setup_logging)�RemoteRepository�PathNotAllowed)�
Repository� )�has_lchflags�llfuse)�BaseTestCase� changedir�environment_variable�
no_selinux�
same_ts_ns)�are_symlinks_supported�are_hardlinks_supported�are_fifos_supported�is_utime_fully_supported�is_birthtime_fully_supported)�fakeroot_detected� is_darwin�is_win32)�make_attic_repo)�key�..F� )�archiver�fork�exe�input�
binary_outputc
O s2 |r�zX|d u rt jddf}n$t|t�r.|f}nt|t�s@td��tj|| tj|d�}d} W n^ tj y� }
z|
j
}|
j} W Y d }
~
n6d }
~
0 ty� }
zd}|
j
} W Y d }
~
n
d }
~
0 0 |r�| |fS | t�|�fS �nTt jt jt j }}}
�z"t|�� �t _t|�t j_t� }tj|dd� } t _t _| d u �r>t� } d d
� | _t| _tt_z| �t|��}W nf t�y� }
zL|� � |
j
|�r�|�!� n
|�!� �� fW Y d }
~
W |||
t _t _t _S d }
~
0 0 | �"|�} |� � | |�r�|�!� n
|�!� �� fW |||
t _t _t _S |||
t _t _t _0 d S )Nz-mz
borg.archiverz"exe must be None, a tuple or a str)�stderrrV r � �utf-8��encodingc W s d S �N� ��argsr^ r^ �=/usr/lib64/python3.9/site-packages/borg/testsuite/archiver.py�<lambda>c rR zexec_cmd.<locals>.<lambda>)#�sys�
executable�
isinstance�str�tuple�
ValueError�
subprocess�check_outputZSTDOUTZCalledProcessError�output�
returncode�
SystemExit�code�os�fsdecode�stdin�stdoutrX r
�decoder �buffer�io�
TextIOWrapperr Z
prerun_checksr) � exit_coder �
parse_args�list�flush�getvalue�run)rS rT rU rV rW r` �kw�borgrk �ret�erq rr rX Zoutput_textr^ r^ ra �exec_cmdD sV
,�
�r� c C s6 t �d�sdS tjddgtjd�} | �� \}}d|v S )N�tarFz --version)rr s GNU tar)�shutil�whichri �Popen�PIPEZcommunicate)�popenrr rX r^ r^ ra �have_gnutaru s
r� �help�borg.exeT�rU rT �python�binary)�paramsc s8 | j dkrd � n| j dkr d� ntd��� fdd�}|S )Nr� r� r� z"param must be 'python' or 'binary'c s t | � dd�|��S )NTr� )r� )r` r} �rU r^ ra �exec_fn� s zcmd.<locals>.exec_fn)Zparamrh )Zrequestr� r^ r� ra �cmd� s
r� c C s
|� d�}|� d�}|� d�}|�d��d� | dddt|� �\}}|tksRJ �| d d
| t|��\}}|tksvJ �tt|���. | dd
| �\}}|tks�J �W d � n1 s�0 Y | dd
| d�\}}|tks�J �| d d
| t|��\}}|tk�sJ �d S )
N�reporV rk � test_file�content�init�--encryption=nonez%s�createz%s::archive�extractzdoes/not/match)�mkdir�join�writerf r) rC r* r+ )r� �tmpdirr� rV rk �rc�outr^ r^ ra �test_return_codes� s
*r� z/tmp/borg-mountzneeds a 16MB fs mounted on %s��reasonc C s` ddd�}t dd���4 t}tj�|�s,J �tj�|d�}tj�|d�}tj�|d�}td �D �]�}tj|dd
� tj|dd
� ||ddd
d� | d|�\}}|t kr�t
d||� |t ks�J ��zd\} }
| �r�|
d7 }
z||dd� W nD t�y, } z*|jtj
k�rW Y d }~�q W Y d }~n
d }~0 0 zb| dd||
f |�\}}|t k} | �sbt
d||� W tjtj�|d�dd
� t�tj�|d�� q�tjtj�|d�dd
� t�tj�|d�� 0 q�W tj|dd
� ntj|dd
� 0 | d|�\}}|t k�rt
d||� | dd|�\}}|t k�r.t
d||� |t ks^J �q^W d � n1 �sR0 Y d S )NTc S s� t j| dd� t�| � |r<t�d|�}|dkr<t�d|�}t|�D ]T}tj�| d| �}t |d��$}t�
|�}|�|� W d � qD1 s�0 Y qDd S )NT��
ignore_errorsr? zfile%03d�wb)r� �rmtreero r� �randomZrandint�range�pathr� �open�urandomr� )�dir�count�size�rnd�i�fn�f�datar^ r^ ra �
make_files� s
z"test_disk_full.<locals>.make_files�YES)�!BORG_CHECK_I_KNOW_WHAT_I_AM_DOINGr� rV �reserve�d r� �P i�� F)r� r� )Tr r? � i@
r� z%s::test%03d�lock.exclusivezlock.rosterry �check�--repair)T)rD �DF_MOUNTro r� �existsr� r� r� r� r) �print�OSError�errno�ENOSPC�remove)r� r� �mountr� rV r� �jr� r� �successr� �errr^ r^ ra �test_disk_full� sT
�
r� c @ s\ e Zd ZdZdZdZdd� Zdd� Zdd � Zd
d� Z dd
� Z
dd� Zddd�Zddd�Z
dS )�ArchiverTestCaseBaseNFrY c C s� dt jd<