�
�Hcf�
� � � d Z ddlZddlmZ ddlmZ ddlmZm Z m
Z
ddlmZm
Z
ddlmZ ddlmZ d Zd
Zdefd�Zdee fd
�Zdee fd�Zy)z"
Client version related functions
� N)�inf)�Optional)�get_apt_cache_time�get_pkg_candidate_version�version_compare)�CANDIDATE_CACHE_PATH�UAC_RUN_PATH)�ProcessExecutionError)�subpz32.3.1z32.3.1~24.04�returnc � � t j d� st S t j j t j j t
� � } t j j
t j j | d� � r#g d�} t |� \ }}|j � S t S # t $ r Y t S w xY w)aO Return the packaged version as a string
Prefer the binary PACKAGED_VESION set by debian/rules to DEB_VERSION.
If unavailable, check for a .git development environments:
a. If run in our upstream repo `git describe` will gives a leading
XX.Y so return the --long version to allow daily build recipes
to count commit offset from upstream's XX.Y signed tag.
b. If run in a git-ubuntu pkg repo, upstream tags aren't visible,
believe __VERSION__ is correct - there is and MUST always be a
test to make sure it matches debian/changelog
z@@PACKAGED_VERSIONz.git)�git�describez
--abbrev=8z--match=[0-9]*z--long)�PACKAGED_VERSION�
startswith�os�path�dirname�__file__�exists�joinr �stripr
�__VERSION__)�topdir�cmd�out�_s �2/usr/lib/python3/dist-packages/uaclient/version.py�get_versionr s� � � �&�&�';�<���
�W�W�_�_�R�W�W�_�_�X�6�
7�F� �w�w�~�~�b�g�g�l�l�6�6�2�3�K�� ��#�Y�F�C���9�9�;�� ��� %� ���� �s �C � C�Cc �T � t � xs t } t j j t
� r&t j t
� j | k rXd } t d� }|rGt j t d�� t t
d� 5 }|j |� d d d � |S t t
d� 5 }|j � j � cd d d � S # 1 sw Y |S xY w# t $ r |�|cY S Y �Ww xY w# 1 sw Y y xY w# t $ r Y y w xY w)Nzubuntu-pro-clientT)�exist_ok�w�r)r r r r r r �stat�st_mtimer �makedirsr �open�write� Exception�readr )�last_apt_cache_update�candidate_version�fs r �get_last_known_candidater. / s � � /�0�7�C���G�G�N�N�/�0�
�7�7�'�(�1�1�4I�I� �� )� 9�:M� N�� ����L�4�8��.��4� /���G�G�-�.�/�(�(� !�
�
�&��
,� $���6�6�8�>�>�#� $� $�/�(�(��� )� �,�(�(� -� )��
$�
�� �
���
�s` �8C: �C-�) C: �5D �D�# D �-C7�2C: �7C: �:
D�D�D�D �D � D'�&D'c �N � t � } | rt | t � � dkD r| S y )Nr )r. r r )� candidates r �check_for_new_versionr1 L s& |