§
    {™ÊcÊ/  ã                   ó¬  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZ ej	        ¦   «          ddddddddœZ
d	Z G d
„ d¦  «        Zd„ Z G d„ d¦  «        Zedk    rï ej        ej        ¬¦  «          eej        ¦  «        dk     rY edej        d          z  ¦  «          edej        d          z  ¦  «          edej        d          ¦  «          ej        d¦  «          eej        dd…         ¦  «        Ze                     ej        d         ¦  «         ej                             ¦   «         D ]\  ZZ ej        e›de›�¦  «         ŒdS dS )é    Néx   éd   éP   é<   é(   é   )ÚmainÚuniverseÚcontribznon-free-firmwareÚ
restrictedznon-freeÚ
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                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )Úmeasurec                 ó"   — || _         || _        d S ©N)ÚwhatÚstats)Úselfr   r   s      ú:/usr/share/command-not-found/CommandNotFound/db/creator.pyÚ__init__zmeasure.__init__>   s   € ØˆŒ	ØˆŒ
ˆ
ˆ
ó    c                 ó6   — t          j         ¦   «         | _        d S r   )ÚtimeÚnow)r   s    r   Ú	__enter__zmeasure.__enter__A   s   € Ý”9‘;”;ˆŒˆˆr   c                 ó¦   — | j         | j        vrd| j        | j         <   | j        | j         xx         t          j        ¦   «         | j        z
  z  cc<   d S )Nr   )r   r   r   r   )r   Úargss     r   Ú__exit__zmeasure.__exit__C   sR   € ØŒy˜DœJÐ&Ð&Ø$%ˆDŒJ�t”yÑ!ØŒ
�4”9ÐÐÔ¥¤¡¤¨t¬xÑ!7Ñ7ÐÐÑÐÐr   N)Ú__name__Ú
__module__Ú__qualname__r   r   r   © r   r   r   r   =   sA   € € € € € ðð ð ðð ð ð8ð 8ð 8ð 8ð 8r   r   c                 óŒ   — 	 t          j        | ¦  «         d S # t          $ r!}|j        t          j        k    r‚ Y d }~d S d }~ww xY wr   )ÚosÚremoveÚOSErrorÚerrnoÚENOENT)ÚpathÚes     r   Úrm_fr+   I   s]   € ðÝ
Œ	�$‰ŒˆˆˆøÝð ð ð ØŒ7•e”lÒ"Ð"Øð #Ð"Ð"Ð"Ð"Ð"øøøøðøøøs   ‚ ˜
A¢>¾Ac                   óV   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ ZdS )Ú	DbCreatorc                 ó†   — || _         t          j        ¦   «         d         | _        dt	          j        ¦   «         dœ| _        d S )Nr   )ÚtotalÚ
total_time)ÚfilesÚapt_pkgÚget_architecturesÚprimary_archr   r   )r   r1   s     r   r   zDbCreator.__init__R   s8   € ØˆŒ
Ý#Ô5Ñ7Ô7¸Ô:ˆÔØ ­t¬y©{¬{Ð;Ð;ˆŒ
ˆ
ˆ
r   c                 óÊ  — |dz   }|                       |¦  «        st          j        d|¦  «         d S |dz   }t          j        |¦  «        5 }	 |                     t          ¦  «         |                      |¦  «         n[# t          j        $ rI}t          |¦  «        dk    r*t          j
        d|¦  «         t          j        d¦  «         n|‚Y d }~nd }~ww xY wd d d ¦  «         n# 1 swxY w Y   t          |¦  «         t          j        ||¦  «         t!          |d¦  «        5 }t#          j        |                      ¦   «         |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nz	.metadataz0%s does not require an update (inputs unchanged)z.tmpzdatabase is lockedz*%s is locked by another process. Ignoring.r   Úw)Ú_db_update_neededÚloggingÚinfoÚsqlite3ÚconnectÚexecutescriptÚcreate_db_sqlÚ_fill_commandsÚOperationalErrorÚstrÚwarningÚsysÚexitr+   r$   ÚrenameÚopenÚjsonÚdumpÚ_calc_input_metadata)r   ÚdbnameÚmetadata_fileÚtmpdbÚconr*   Úfps          r   ÚcreatezDbCreator.createV   s  € Ø˜{Ñ*ˆØ×%Ò% mÑ4Ô4ð 	ÝŒLØBÀFñLô Lð LàˆFØ�v‘ˆÝŒ_˜UÑ#Ô#ð 	 sðØ×!Ò!¥-Ñ0Ô0Ð0Ø×#Ò# CÑ(Ô(Ð(Ð(øÝÔ+ð 	ð 	ð 	õ �q‘6”6Ð1Ò1Ð1Ý”OØDÀeñMô Mð Må”H˜Q‘K”K�K�Kà�Gð  �K�K�K�Køøøøð	øøøð		ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ 	ˆ]ÑÔÐå
Œ	�%˜Ñ Ô Ð å�- Ñ%Ô%ð 	7¨ÝŒI�d×/Ò/Ñ1Ô1°2Ñ6Ô6Ð6ð	7ð 	7ð 	7ñ 	7ô 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7øøøð 	7ð 	7ð 	7ð 	7ð 	7ð 	7sN   ÁC$Á/A=Á<C$Á=CÂ?CÃC$ÃCÃC$Ã$C(Ã+C(Ä#(EÅEÅEc                 óH  — t           j                             |¦  «        sdS 	 t          |¦  «        5 }t	          j        |¦  «        }d d d ¦  «         n# 1 swxY w Y   ||                      ¦   «         k    S # t          $ r!}t          j	        d||¦  «         Y d }~dS d }~ww xY w)NTzcannot read %s: %s)
r$   r)   ÚexistsrE   rF   ÚloadrH   Ú	Exceptionr8   rA   )r   rJ   rM   Úmetar*   s        r   r7   zDbCreator._db_update_neededr   sç   € ÝŒw�~Š~˜mÑ,Ô,ð 	Ø�4ð	Ý�mÑ$Ô$ð %¨Ý”y ‘}”}�ð%ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %à˜4×4Ò4Ñ6Ô6Ò6Ð6øÝð 	ð 	ð 	ÝŒOÐ0°-ÀÑCÔCÐCØ�4�4�4�4�4øøøøð	øøøs:   £A6 ²AÁA6 ÁAÁA6 ÁAÁA6 Á6
B!Â BÂB!c                 óš   — i }| j         D ]@}t          j        |¦  «        }|j        |j        |j        |j        |j        |j        dœ||<   ŒA|S )N)Úst_inoÚst_devÚst_uidÚst_gidÚst_sizeÚst_mtime)	r1   r$   ÚstatrU   rV   rW   rX   rY   rZ   )r   rS   ÚpÚsts       r   rH   zDbCreator._calc_input_metadata|   s\   € ØˆØ”ð 		ð 		ˆAÝ”˜‘”ˆBàœ)Øœ)Øœ)Øœ)Øœ:ØœKðð ˆD�‰GˆGð ˆr   c                 óF  — | j         D ]À}t          j        dd|gt          j        ¬¦  «        5 }d|v r|                      |||j        ¦  «         n|                      ||j        ¦  «         |                     ¦   «         dk    r.t          j        |j	        d 
                    |¦  «        ¬¦  «        ‚	 d d d ¦  «         n# 1 swxY w Y   ŒÁt          j        ¦   «         | j        d         z
  | j        d<   t          j        d	| j        d
         | j        d         fz  ¦  «         d S )Nz/usr/lib/apt/apt-helperzcat-file)ÚstdoutÚContentsr   z#/usr/lib/apt/apt-helper cat-file {})Ú
returncodeÚcmdr0   zprocessed %i packages in %.2fsr/   )r1   Ú
subprocessÚPopenÚPIPEÚ_parse_single_contents_filer_   Ú_parse_single_commands_fileÚwaitÚCalledProcessErrorra   Úformatr   r   r8   r9   )r   rL   ÚfÚsubs       r   r>   zDbCreator._fill_commands‰   s�  € Ø”ð 	nð 	nˆAÝÔ!Ð#<¸jÈ!Ð"LÕU_ÔUdÐeÑeÔeð nÐilØ �?�?Ø×4Ò4°S¸!¸S¼ZÑHÔHÐHÐHà×4Ò4°S¸#¼*ÑEÔEÐEØ—8’8‘:”: ’?�?Ý$Ô7À3Ä>Ø=b×=iÒ=iÐjkÑ=lÔ=lðnñ nô nð nð #ðnð nð nñ nô nð nð nð nð nð nð nøøøð nð nð nð nøõ $(¤9¡;¤;°´¸LÔ1IÑ#IˆŒ
�<Ñ ÝŒÐ5ØŒJ�wÔ ¤¨LÔ!9ð9;ñ ;ñ 	<ô 	<ð 	<ð 	<ð 	<s   ­BB=Â=C	ÃC	c                 óZ   — |                      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=?;
            ©ÚexecuteÚfetchone)r   rL   ÚcommandÚpkgnameÚalready_in_dbs        r   Ú_in_dbzDbCreator._in_db—   s:   € ØŸšðð
 ˜7Ð#ñ%ô %÷ &.¢X¡Z¤Zð 	ð Ðr   c                 ób   — |                      d|f¦  «         |                      d|f¦  «         d S )Nz"DELETE FROM packages WHERE pkgID=?z"DELETE FROM commands WHERE pkgID=?©ro   )r   rL   Úpkgids      r   Ú_delete_pkgidzDbCreator._delete_pkgid    s6   € Ø�ŠÐ8¸5¸(ÑDÔDÐDØ�ŠÐ8¸5¸(ÑDÔDÐDÐDÐDr   c                 ól   — |                      d|f¦  «                             ¦   «         }|r|d         S d S )Nz'SELECT pkgID from packages WHERE name=?r   rn   )r   rL   rr   Úhave_pkgs       r   Ú
_get_pkgidzDbCreator._get_pkgid£   sA   € Ø—;’;Ø5¸°zñCô CßCKÂ8Á:Ä:ð 	àð 	Ø˜A”;ÐØˆtr   c                 óD   — |                      d||||f¦  «        }|j        S )Nzt
            INSERT INTO packages (name, version, component, priority)
            VALUES (?, ?, ?, ?);
            )ro   Ú	lastrowid)r   rL   rr   ÚversionÚ	componentÚpriorityÚcurs          r   Ú_insert_packagezDbCreator._insert_package©   s2   € Ø�KŠKð ð ˜7 I¨xÐ8ñ:ô :ˆð Œ}Ðr   c                 ó6   — |                      d||f¦  «         d S )NzF
        INSERT INTO commands (command, pkgID) VALUES (?, ?);
        rv   )r   rL   rq   Úpkg_ids       r   Ú_insert_commandzDbCreator._insert_command¯   s/   € Ø�Šð à�vÐñ	 ô 	 ð 	 ð 	 ð 	 r   c                 óh  — t          j        |¦  «        }|                     ¦   «         sd S |j        d         }|                     d¦  «        rd S |j        d         }|j        d         }|dk    r|| j        k    rd S |                     ¦   «         �r!| j        dxx         dz  cc<   |j        d         }|j                             d	¦  «        r|j        d	         }|j                             d
d¦  «        }t          ¦   «         }	|j                             dd¦  «        r;t          |j                             dd¦  «         	                    d¦  «        ¦  «        }	|j        d          	                    d¦  «        D �] }
|
|	v rŒt          d| j        ¦  «        5  |                      ||
|¦  «        }d d d ¦  «         n# 1 swxY w Y   |rœt          j        ||d         ¦  «        dk    rat          j        d|
z  ¦  «         t          d| j        ¦  «        5  |                      ||d         ¦  «         d d d ¦  «         n# 1 swxY w Y   nt          j        d|
›d|›d�¦  «         Œêt          j        d|
›d|›d|›d|›d�	¦  «         t          d| j        ¦  «        5  |                      ||¦  «        }d d d ¦  «         n# 1 swxY w Y   |sŒt"                               |d¦  «        }|t%          |j                             dd¦  «        ¦  «        z  }t          d| j        ¦  «        5  |                      |||||¦  «        }d d d ¦  «         n# 1 swxY w Y   t          d| j        ¦  «        5  |                      ||
|¦  «         d d d ¦  «         n# 1 swxY w Y   �Œ"|                     ¦   «         �°d S d S ) NÚsuitez
-backportsr   ÚarchÚallr/   é   Únamezvisible-pkgnamer~   Ú zignore-commandsú,ÚcommandsÚsql_already_dbé   r   ú+replacing exiting %s in DB (higher version)Úsql_delete_already_in_dbú	skipping ú from ú (lower/same version)úadding ú/ú (ú)Úsql_have_pkgzpriority-bonusÚ0Úsql_insert_pkgÚsql_insert_cmd)r2   ÚTagFileÚstepÚsectionÚendswithr4   r   ÚgetÚsetÚsplitr   rt   Úversion_comparer8   Údebugrx   r{   Úcomponent_prioritiesÚintr‚   r…   )r   rL   rM   Útagfr‡   r   rˆ   rr   r~   Úignore_commandsrq   rs   r„   r€   s                 r   rg   z%DbCreator._parse_single_commands_file³   s8  € ÝŒ˜rÑ"Ô"ˆà�yŠy‰{Œ{ð 	ØˆFàŒl˜7Ô#ˆà�>Š>˜,Ñ'Ô'ð 	ØˆFØ”,˜{Ô+ˆ	ØŒ\˜&Ô!ˆà�5Š=ˆ=˜T TÔ%6Ò6Ð6ØˆFà�iŠi‰kŒkñ '	?ØŒJ�wÐÐÔ 1Ñ$ÐÐÑØ”L Ô(ˆGð Œ|×ÒÐ 1Ñ2Ô2ð :Øœ,Ð'8Ô9�Ø”L×$Ò$ Y°Ñ3Ô3ˆGÝ™EœEˆOØŒ|×ÒÐ 1°2Ñ6Ô6ð XÝ # D¤L×$4Ò$4Ð5FÈÑ$KÔ$K×$QÒ$QÐRUÑ$VÔ$VÑ WÔ W�Øœ<¨
Ô3×9Ò9¸#Ñ>Ô>ð ?ñ ?�Ø˜oÐ-Ð-ØåÐ-¨t¬zÑ:Ô:ð Eð EØ"&§+¢+¨c°7¸GÑ"DÔ"D�MðEð Eð Eñ Eô Eð Eð Eð Eð Eð Eð Eøøøð Eð Eð Eð Eà ð 	!õ Ô.¨w¸ÀaÔ8HÑIÔIÈAÒMÐMÝœÐ&SÐV]Ñ&]Ñ^Ô^Ð^Ý$Ð%?ÀÄÑLÔLð Fð FØ ×.Ò.¨s°MÀ!Ô4DÑEÔEÐEðFð Fð Fñ Fô Fð Fð Fð Fð Fð Fð Føøøð Fð Fð Fð Føõ  œ˜ÐT[ÐT[ÐT[Ð]bÐ]bÐ]bÐ&cÑdÔdÐdØ Ý”�Ø�G�G˜W˜W˜W g g g¨u¨u¨uð6ñ 7ô 7ð 7õ ˜^¨T¬ZÑ8Ô8ð ;ð ;Ø!Ÿ_š_¨S°'Ñ:Ô:�Fð;ð ;ð ;ñ ;ô ;ð ;ð ;ð ;ð ;ð ;ð ;øøøð ;ð ;ð ;ð ;àð bÝ3×7Ò7¸	À1ÑEÔE�HØ¥ D¤L×$4Ò$4Ð5EÀsÑ$KÔ$KÑ LÔ LÑL�HÝ Ð!1°4´:Ñ>Ô>ð bð bØ!%×!5Ò!5°c¸7ÀGÈYÐX`Ñ!aÔ!a˜ðbð bð bñ bô bð bð bð bð bð bð bøøøð bð bð bð båÐ-¨t¬zÑ:Ô:ð ?ð ?Ø×(Ò(¨¨g°vÑ>Ô>Ð>ð?ð ?ð ?ñ ?ô ?ð ?ð ?ð ?ð ?ð ?ð ?øøøð ?ð ?ð ?ð ?ùðM �iŠi‰kŒkñ '	?ð '	?ð '	?ð '	?ð '	?sZ   ÆF:Æ:F>	ÇF>	ÈH;È;H?	ÉH?	ÊJ<Ê<K 	ËK 	Ì$M
Í
M	ÍM	Í*NÎN	ÎN	c                 ó¼  — d }|D �]Õ}|                      d¦  «        }|                     d¦  «        s@|                     d¦  «        s+|                     d¦  «        s|                     d¦  «        sŒm	 |                     d d¦  «        \  }}n# t          $ r Y Œ”w xY wt          j                             |¦  «        }|                     d¦  «        D �]}	 |                     ¦   «                              dd¦  «        \  }	}n&# t          $ r |                     ¦   «         }d	}	Y nw xY wt          |	                     d¦  «        ¦  «        d
k    r|	                     d¦  «        \  }
}	nd}
d }t          d| j        ¦  «        5  |                      |||¦  «        }d d d ¦  «         n# 1 swxY w Y   |r	 t          j        d|›d|›d�¦  «         Œüt          j        d|›d|›d|›d|›d�	¦  «         t          d| j        ¦  «        5  |                      ||¦  «        }d d d ¦  «         n# 1 swxY w Y   |sat&                               |
d¦  «        }t          d| j        ¦  «        5  |                      ||||
|¦  «        }d d d ¦  «         n# 1 swxY w Y   t          d| j        ¦  «        5  |                      |||¦  «         d d d ¦  «         n# 1 swxY w Y   �Œ	�Œ×d S )Nzutf-8zusr/sbinzusr/binÚbinÚsbinrŠ   r�   r—   Úunknownr�   r	   r�   Fr   r‘   r’   r“   r”   r•   r–   r˜   r™   rš   rœ   r�   )ÚdecodeÚ
startswithr¤   Ú
ValueErrorr$   r)   ÚbasenameÚstripÚrsplitÚlenr   r   rt   r2   r¥   r8   r¦   rx   r{   r§   r¢   r‚   r…   )r   rL   rk   rM   r‡   Úlrq   Úpkgnamesrr   r    r   r~   rs   r„   r€   s                  r   rf   z%DbCreator._parse_single_contents_fileì   sB  € àˆàð 0	?ñ 0	?ˆAØ—’˜Ñ!Ô!ˆAØ—L’L Ñ,Ô,ð °·²¸YÑ0GÔ0Gð Ø—L’L Ñ'Ô'ðØ+,¯<ª<¸Ñ+?Ô+?ðàðØ$%§G¢G¨D°!Ñ$4Ô$4Ñ!�˜˜øÝð ð ð Ø�ðøøøõ ”g×&Ò& wÑ/Ô/ˆGà#Ÿ>š>¨#Ñ.Ô.ð $?ñ $?�ð(Ø'.§}¢}¡¤×'=Ò'=¸cÀ1Ñ'EÔ'EÑ$�G˜W˜WøÝ!ð (ð (ð (Ø%Ÿmšm™oœo�GØ'�G�G�Gð(øøøõ �w—}’} SÑ)Ô)Ñ*Ô*¨aÒ/Ð/Ø)0¯ª°sÑ);Ô);Ñ&�I˜w˜wà &�Ið �åÐ-¨t¬zÑ:Ô:ð Eð EØ"&§+¢+¨c°7¸GÑ"DÔ"D�MðEð Eð Eñ Eô Eð Eð Eð Eð Eð Eð Eøøøð Eð Eð Eð Eà ð 	!ð!õ
  œ˜ÐT[ÐT[ÐT[Ð]bÐ]bÐ]bÐ&cÑdÔdÐdØ Ý”�Ø�G�G˜W˜W˜W g g g¨u¨u¨uð6ñ 7ô 7ð 7õ ˜^¨T¬ZÑ8Ô8ð ;ð ;Ø!Ÿ_š_¨S°'Ñ:Ô:�Fð;ð ;ð ;ñ ;ô ;ð ;ð ;ð ;ð ;ð ;ð ;øøøð ;ð ;ð ;ð ;àð bÝ3×7Ò7¸	À1ÑEÔE�HÝ Ð!1°4´:Ñ>Ô>ð bð bØ!%×!5Ò!5°c¸7ÀGÈYÐX`Ñ!aÔ!a˜ðbð bð bñ bô bð bð bð bð bð bð bøøøð bð bð bð båÐ-¨t¬zÑ:Ô:ð ?ð ?Ø×(Ò(¨¨g°vÑ>Ô>Ð>ð?ð ?ð ?ñ ?ô ?ð ?ð ?ð ?ð ?ð ?ð ?øøøð ?ð ?ð ?ð ?ùñG$?ð0	?ð 0	?sl   Á3BÂ
BÂBÃ+DÄ D$Ä#D$Å?F#Æ#F'Æ*F'ÈH&È&H*È-H*É#J	Ê	JÊJÊ)KËKËKN)r   r    r!   r   rN   r7   rH   r>   rt   rx   r{   r‚   r…   rg   rf   r"   r   r   r-   r-   Q   sÌ   € € € € € ð<ð <ð <ð7ð 7ð 7ð8	ð 	ð 	ðð ð ð<ð <ð <ðð ð ðEð Eð Eðð ð ðð ð ð ð  ð  ð7?ð 7?ð 7?ðr4?ð 4?ð 4?ð 4?ð 4?r   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-*rŠ   r�   z: )r'   rF   r8   r$   r:   rc   rB   r   r2   Úinitr§   r=   r   r+   r-   r   ÚbasicConfigÚINFOrµ   ÚargvÚprintrC   ÚcolrN   r   Úitemsr[   Úamountr¦   r"   r   r   ú<module>rÃ      s  ðð €€€Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø €€€à €€€Ø €„�„€ð ØØØØØØðð Ð ð€ð:	8ð 	8ð 	8ð 	8ð 	8ñ 	8ô 	8ð 	8ðð ð ðO?ð O?ð O?ð O?ð O?ñ O?ô O?ð O?ðd ˆzÒÐØ€GÔ˜gœlÐ+Ñ+Ô+Ð+Ø
€sˆ3Œ8�}„}�qÒÐØˆÐ5¸¼À¼ÑCÑDÔDÐDØˆÐ>ÀÄÈ!ÄÑLÑMÔMÐMØˆÐ`ÐbeÔbjÐklÔbmÑnÔnÐnØˆŒ�‰ŒˆØ
ˆ)�C”H˜Q˜R˜R”LÑ
!Ô
!€CØ‡J‚JˆsŒx˜Œ{ÑÔÐØœ	ŸšÑ)Ô)ð 1ð 1‰ˆˆfØˆŒ $ $ $¨¨Ð/Ñ0Ô0Ð0Ð0ð Ðð1ð 1r   