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/CommandNotFound/db/__pycache__/creator.cpython-38.pyc
U

bL%�@s<ddlZddlZddlZddlZddlZddlZddlZddlZddlZe�	�ddddddd�Z
d	ZGd
d�d�Zdd
�Z
Gdd�d�Zedk�r8ejejd�eej�dkr�edejd�edejd�edejd�e�d�eejdd��Ze�ejd�ej��D]\ZZe�deef��qdS)�N�x�d�P�<�(�)�mainZuniverseZcontribZ
restrictedznon-freeZ
multiversea�
           CREATE TABLE IF NOT EXISTS "commands" 
           (
            [cmdID] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
            [pkgID] INTEGER NOT NULL,
            [command] TEXT,
            FOREIGN KEY ([pkgID]) REFERENCES "pkgs" ([pkgID])
           );
           CREATE TABLE IF NOT EXISTS "packages"
           (
            [pkgID] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
            [name] TEXT,
            [version] TEXT,
            [component] TEXT,
            [priority] INTEGER
           );
           CREATE INDEX IF NOT EXISTS idx_commands_command ON commands (command);
           CREATE INDEX IF NOT EXISTS idx_packages_name ON packages (name);
c@s$eZdZdd�Zdd�Zdd�ZdS)�measurecCs||_||_dS�N)�what�stats)�selfrr�r�</usr/lib/python3/dist-packages/CommandNotFound/db/creator.py�__init__=szmeasure.__init__cCst��|_dSr
)�time�now)r
rrr�	__enter__@szmeasure.__enter__cGs:|j|jkrd|j|j<|j|jt��|j7<dS)Nr)rrrr)r
�argsrrr�__exit__Bszmeasure.__exit__N)�__name__�
__module__�__qualname__rrrrrrrr	<sr	c
CsDzt�|�Wn0tk
r>}z|jtjkr.�W5d}~XYnXdSr
)�os�remove�OSError�errnoZENOENT)�path�errr�rm_fHs
rc@sdeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dS)�	DbCreatorcCs(||_t��d|_dt��d�|_dS)Nr)�total�
total_time)�files�apt_pkgZget_architectures�primary_archrr)r
r#rrrrQszDbCreator.__init__cCs�|d}|�|�s"t�d|�dS|d}t�|��l}z|�t�|�|�WnLtjk
r�}z,t	|�dkr�t�
d|�t�d�n|�W5d}~XYnXW5QRXt
|�t�||�t|d��}t�|��|�W5QRXdS)Nz	.metadataz0%s does not require an update (inputs unchanged)z.tmpzdatabase is lockedz*%s is locked by another process. Ignoring.r�w)�_db_update_needed�logging�info�sqlite3ZconnectZ
executescript�
create_db_sql�_fill_commandsZOperationalError�str�warning�sys�exitrr�rename�open�json�dump�_calc_input_metadata)r
Zdbname�
metadata_fileZtmpdb�conr�fprrr�createUs0
�
� zDbCreator.createc
Csxtj�|�sdSz,t|��}t�|�}W5QRX||��kWStk
rr}zt�	d||�WY�dSd}~XYnXdS)NTzcannot read %s: %s)
rr�existsr2r3�loadr5�	Exceptionr(r.)r
r6r8�metarrrrr'qs
zDbCreator._db_update_neededcCs@i}|jD]0}t�|�}|j|j|j|j|j|jd�||<q
|S)N)�st_ino�st_dev�st_uid�st_gid�st_size�st_mtime)	r#r�statr>r?r@rArBrC)r
r=�p�strrrr5{s

�zDbCreator._calc_input_metadatac
Cs�|jD]V}tjdd|gtjd��6}|�||j�|��dkrRtj|jd�	|�d��W5QRXqt
�
�|jd|jd<t�
d|jd	|jdf�dS)
Nz/usr/lib/apt/apt-helperzcat-file)�stdoutrz#/usr/lib/apt/apt-helper cat-file {})�
returncode�cmdr"zprocessed %i packages in %.2fsr!)r#�
subprocess�Popen�PIPE�_parse_single_commands_filerG�waitZCalledProcessErrorrH�formatrrr(r))r
r7�f�subrrrr,�s
��zDbCreator._fill_commandscCs|�d||f���}|S)Nz�
            SELECT packages.pkgID, name, version 
            FROM commands 
            INNER JOIN packages on packages.pkgID = commands.pkgID
            WHERE commands.command=? AND packages.name=?;
            ��executeZfetchone)r
r7�command�pkgname�
already_in_dbrrr�_in_db�s
�zDbCreator._in_dbcCs |�d|f�|�d|f�dS)Nz"DELETE FROM packages WHERE pkgID=?z"DELETE FROM commands WHERE pkgID=?�rS)r
r7Zpkgidrrr�
_delete_pkgid�szDbCreator._delete_pkgidcCs"|�d|f���}|r|dSdS)Nz'SELECT pkgID from packages WHERE name=?rrR)r
r7rUZhave_pkgrrr�
_get_pkgid�s�zDbCreator._get_pkgidcCs|�d||||f�}|jS)Nzt
            INSERT INTO packages (name, version, component, priority)
            VALUES (?, ?, ?, ?);
            )rSZ	lastrowid)r
r7rU�version�	component�priorityZcurrrr�_insert_package�s
�zDbCreator._insert_packagecCs|�d||f�dS)NzF
        INSERT INTO commands (command, pkgID) VALUES (?, ?);
        rX)r
r7rT�pkg_idrrr�_insert_command�s�zDbCreator._insert_commandc
Cs2t�|�}|��sdS|jd}|�d�r.dS|jd}|jd}|dkrX||jkrXdS|���r.|jdd7<|jd}|j�d	�r�|jd	}|j�d
d�}t�}	|j�dd�r�t|j�dd��	d
��}	|jd�	d
�D�]J}
|
|	kr�q�t
d|j��|�||
|�}W5QRX|�r|t�||d�dk�rht
�d|
�t
d|j��|�||d�W5QRXnt
�d|
|f�q�t
�d|
|||f�t
d|j��|�||�}W5QRX|�st|}
|
t|j�dd��7}
t
d|j��|�|||||
�}W5QRXt
d|j��|�||
|�W5QRXq�qXdS)N�suitez
-backportsr\�arch�allr!��namezvisible-pkgnamer[�zignore-commands�,ZcommandsZsql_already_db�rz+replacing exiting %s in DB (higher version)Zsql_delete_already_in_dbz(skipping %s from %s (lower/same version)zadding %s from %s/%s (%s)Zsql_have_pkgzpriority-bonus�0Zsql_insert_pkgZsql_insert_cmd)r$ZTagFile�stepZsection�endswithr%r�get�set�splitr	rWZversion_comparer(�debugrYrZ�component_priorities�intr^r`)r
r7r8Ztagfrar\rbrUr[Zignore_commandsrTrVr_r]rrrrM�s\







�z%DbCreator._parse_single_commands_fileN)rrrrr9r'r5r,rWrYrZr^r`rMrrrrr Ps


	r �__main__)�level�z%usage: %s <output-db-path> <files...>z. e.g.: %s commands.db ./dists/*/*/*/Commands-*zP e.g.: %s /var/lib/command-not-found/commands.db  /var/lib/apt/lists/*Commands-*rdrhz%s: %s)rr3r(rr*rJr/rr$Zinitrpr+r	rr rZbasicConfig�INFO�len�argv�printr0�colr9r�itemsrDZamountrorrrr�<module>s@�