HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //lib/python3/dist-packages/DistUpgrade/__pycache__/apt_btrfs_snapshot.cpython-38.pyc
U

٪zc�&�@s�ddlmZmZddlZddlZddlZddlZddlZddlZddl	m
Z
ddlmZGdd�de
�ZGdd�de�ZGd	d
�d
e�ZGdd�de�ZGd
d�de�ZGdd�de�ZGdd�de�ZdS)�)�print_function�unicode_literalsN)�find_executable)�gettextc@seZdZdS)�AptBtrfsSnapshotErrorN��__name__�
__module__�__qualname__�rr�@/usr/lib/python3/dist-packages/DistUpgrade/apt_btrfs_snapshot.pyr!src@seZdZdS)�AptBtrfsNotSupportedErrorNrrrrrr
%sr
c@seZdZdS)�AptBtrfsRootWithNoatimeErrorNrrrrrr)src@s.eZdZdZedd��Zd
dd�Zdd�Zd	S)�
FstabEntryz a single fstab entry line cCs"|�d�d��}t|dd��S)N�#r�)�	partition�splitr)�cls�line�argsrrr�	from_line/szFstabEntry.from_linercCs(||_||_||_||_||_||_dS�N��fs_spec�
mountpoint�fstype�options�dump�passno)�selfrrrrrrrrr�__init__7szFstabEntry.__init__cCs d|j|j|j|j|j|jfS)Nz*<FstabEntry '%s' '%s' '%s' '%s' '%s' '%s'>r�r rrr�__repr__@s�zFstabEntry.__repr__N)rr)rr	r
�__doc__�classmethodrr!r#rrrrr-s


	rcs"eZdZdZd�fdd�	Z�ZS)�Fstabz a list of FstabEntry items �
/etc/fstabc
s�tt|���t|��`}dd�|D�D]J}|dks&|�d�r>q&zt�|�}Wntk
rdYq&YnX|�|�q&W5QRXdS)Ncss|]}|��VqdSr)�strip)�.0�lrrr�	<genexpr>Lsz!Fstab.__init__.<locals>.<genexpr>�r)	�superr&r!�open�
startswithrr�
ValueError�append)r �fstabZ
fstab_filer�entry��	__class__rrr!Hs

zFstab.__init__)r')rr	r
r$r!�
__classcell__rrr4rr&Fsr&c@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�LowLevelCommandszi lowlevel commands invoked to perform various tasks like
        interact with mount and btrfs tools
    cCst�d||g�}|dkS)N�mountr��
subprocess�call)r rr�retrrrr8ZszLowLevelCommands.mountcCst�d|g�}|dkS)N�umountrr9)r rr<rrrr=^szLowLevelCommands.umountcCst�ddd||g�}|dkS)N�btrfs�	subvolume�snapshotrr9)r �source�destr<rrr�btrfs_subvolume_snapshotbs

�z)LowLevelCommands.btrfs_subvolume_snapshotcCst�ddd|g�}|dkS)Nr>r?�deleterr9)r r@r<rrr�btrfs_delete_snapshotgsz&LowLevelCommands.btrfs_delete_snapshotN)rr	r
r$r8r=rCrErrrrr7Vs
r7c@s�eZdZdZdZedZd)dd�Zdd�Zd	d
�Zd*dd�Z	d
d�Z
dd�Zdd�Zd+dd�Z
d,dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd-d$d%�Zd&d'�Zd(S).�AptBtrfsSnapshotz? the high level object that interacts with the snapshot system z@apt-snapshot-z	old-root-r'cCst|�|_t�|_d|_dSr)r&r2r7�commands�_btrfs_root_mountpoint)r r2rrrr!ts
zAptBtrfsSnapshot.__init__cCstd�sdS|��}|dk	S)zx verify that the system supports apt btrfs snapshots
            by checking if the right fs layout is used etc
        r>FN)r�%_get_supported_btrfs_root_fstab_entry�r r3rrr�snapshots_supportedysz$AptBtrfsSnapshot.snapshots_supportedcCs6|jD]*}|jdkr|jdkrd|jkr|SqdS)z4 return the supported btrfs root FstabEntry or None �/r>zsubvol=@N)r2rrrrJrrrrI�s
���
z6AptBtrfsSnapshot._get_supported_btrfs_root_fstab_entrycCs$|jD]}|j|kr|jSqdS)z4 return the device or UUID for the given mountpoint N)r2rr)r rr2r3rrr�_uuid_for_mountpoint�s

z%AptBtrfsSnapshot._uuid_for_mountpointcCs4|�d�}tjdd�}|j�||�s(dS||_|jS)NrLzapt-btrfs-snapshot-mp-)�prefix)rM�tempfileZmkdtemprGr8rH)r Zuuidrrrr�mount_btrfs_root_volume�s
z(AptBtrfsSnapshot.mount_btrfs_root_volumecCs$|j�|j�}t�|j�d|_|Sr)rGr=rH�os�rmdir)r �resrrr�umount_btrfs_root_volume�sz)AptBtrfsSnapshot.umount_btrfs_root_volumecCstj��jdd��td��S)Nr)Zmicrosecond�_)�datetime�now�replaceZ	isoformat�strr"rrr�_get_now_str�s�zAptBtrfsSnapshot._get_now_strr,cCsv|��}|��}tj�|d�}tj�||j||�}tj�|�rXttd�|f�dS|j	�
||�}|��|SdS)N�@zDINFO: snapshot directory '%s' already exists, not creating duplicateT)rPrZrQ�path�join�SNAP_PREFIX�exists�printrUrGrCrT)r Zadditional_prefix�mpZsnap_idrA�targetrSrrr�create_btrfs_root_snapshot�s��z+AptBtrfsSnapshot.create_btrfs_root_snapshotrc	Cs�g}|dkr.|��}|st��d|jkr.t��|dkr>t��}|��}t�|�D]<}|�|j	�rPtj
�tj
�||dd��}||krP|�
|�qP|��|S)z� get the list of available snapshot
            If "older_then" is given (in unixtime format) it will only include
            snapshots that are older then the given date)
        rZnoatime�etcr2)rIr
rr�timerPrQ�listdirr/r^r\�getatimer]r1rT)r �
older_than�resultr3ra�eZatimerrr�get_btrfs_root_snapshots_list�s"
z.AptBtrfsSnapshot.get_btrfs_root_snapshots_listcCstd�td�|����dS)NzAvailable snapshots:�  
T)r`r]rkr"rrr�print_btrfs_root_snapshots�sz+AptBtrfsSnapshot.print_btrfs_root_snapshotscCs>t��}|�d�std��t|dd��}||dddS)N�dz&Please specify time in days (e.g. 10d)�����<)re�endswith�	Exception�int)r �timefmtrWZdaysrrr�_parse_older_than_to_unixtime�s

z.AptBtrfsSnapshot._parse_older_than_to_unixtimecCsX|�|�}z&td|�td�|j|d���Wn"tk
rRtj�d�YdSXdS)Nz$Available snapshots older than '%s':rl�rh�6Error: fstab option 'noatime' incompatible with optionFT)rvr`r]rkr�sys�stderr�write)r ru�older_than_unixtimerrr�%print_btrfs_root_snapshots_older_than�s

�z6AptBtrfsSnapshot.print_btrfs_root_snapshots_older_thancCsZd}|�|�}z$|j|d�D]}||�|�M}qWn"tk
rTtj�d�YdSX|S)NTrwrxF)rvrk�delete_snapshotrryrzr{)r rurSr|Zsnaprrr�%clean_btrfs_root_snapshots_older_than�s
�
z6AptBtrfsSnapshot.clean_btrfs_root_snapshots_older_thancCs|�|�}|Sr)�set_default)r �
snapshot_namerSrrr�command_set_default�s
z$AptBtrfsSnapshot.command_set_defaultTcCs�|��}tj�||�}tj�|�r�|�d�r�|dkr�tj�|d�}tj�||j|���}t�||�t�||�t	d|�nt	d�|�
�dS)z set new default r[z@Default changed to %s, please reboot for changes to take effect.z_You have selected an invalid snapshot. Please make sure that it exists, and that it is not "@".T)rPrQr\r]�isdirr/�
BACKUP_PREFIXrZ�renamer`rT)r r�ZbackupraZnew_rootZdefault_rootrrrr��s$
����zAptBtrfsSnapshot.set_defaultcCs*|��}|j�tj�||��}|��|Sr)rPrGrErQr\r]rT)r r�rarSrrrr~s�z AptBtrfsSnapshot.delete_snapshotN)r')r')r,)r)T)rr	r
r$r^r�r!rKrIrMrPrTrZrcrkrmrvr}rr�r�r~rrrrrFls&







rF)Z
__future__rrrVrQr:ryrerOZdistutils.spawnrrrUrsrr
r�objectr�listr&r7rFrrrr�<module>s