ruạṛ
a ^�i�) � @ s� d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZddlm Z m Z mZmZm Z ddlmZ ddlmZ dZdd� Zd d � Zdd� Zd d� Zdd� Zdd� Zdd� ZG dd� de�ZG dd� de�ZG dd� de�Z dd� Z!dd� Z"dd � Z#d!d"� Z$d#d$� Z%d%d&� Z&d'd(� Z'd)d*� Z(e j)d+d,� �Z*e j)d-d.� �Z+e j)d/d0� �Z,d1d2� Z-d3d4� Z.d5d6� Z/d7d8� Z0d9d:� Z1d;d<� Z2e j)d=d>� �Z3d?d@� Z4dAdB� Z5dCdD� Z6dEdF� Z7dS )G� N� )�config� constants� log_utils� process_utils�utils)�SafeExceptionWrapper)�json_loads_nstrzuname: c C s t �| �p| dv S )Nz.-_+)�str�isalnum)�c� r �+/usr/libexec/kcare/python/kcarectl/kcare.py� is_uname_char s r c C s� t � }tt|| tj�d��Z}|�� D ]@}|�t�r$d�t t |tt�d � �� �� W d � S q$W d � n1 sz0 Y dS )N�r� ) �get_kernel_hash�open�get_cache_pathr � PATCH_INFO� readlines� startswith�UNAME_LABEL�join�filterr �len�strip)�patch_level�khash�f�liner r r �parse_uname s Rr! c C sJ t j�tj�rFz$ttjd�}|�| � |�� W dS tyD Y n0 dS )N�wTF) �os�path�existsr �KCARE_UNAME_FILEr �write�close� Exception)�new_versionr r r r �kcare_update_effective_version% s r+ c C s8 t tjd�} zt�| �� ��� W | �� S | �� 0 d S )N�rb)r r �KERNEL_VERSION_FILE�hashlib�sha1�read� hexdigestr( �r r r r r 1 s �r c C s� t j�tjd�} t j�| �r�t| d���}|�� �� }zt |� W nR t yt tt t j�| ��� Y W d � S t y� Y W d � dS 0 |W d � S 1 s�0 Y dS )z:Returns timestamp from PATCH_CACHE/stoped.at if its exsitsz stopped.atr N�errorz-1)r# r$ r r �PATCH_CACHEr% r r0 �rstrip�int� ValueErrorr �getctimer) )Zstopped_at_filenameZfh�valuer r r � get_last_stop<