Ë
    {™Ê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  rX 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j/                  ej&                  d   «       ej0                  j3                  «       D ]  \  ZZ ej8                  e›de›�«       Œ yy)é    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y)Úmeasurec                 ó    — || _         || _        y ©N)ÚwhatÚstats)Úselfr   r   s      ú</usr/lib/python3/dist-packages/CommandNotFound/db/creator.pyÚ__init__zmeasure.__init__>   s   € ØˆŒ	Øˆ�
ó    c                 ó6   — t        j                   «       | _        y r   )ÚtimeÚnow)r   s    r   Ú	__enter__zmeasure.__enter__A   s   € Ü—9‘9“;ˆ�r   c                 óæ   — | j                   | j                  vrd| j                  | j                   <   | j                  | j                   xx   t        j                  «       | j                  z
  z  cc<   y )Nr   )r   r   r   r   )r   Úargss     r   Ú__exit__zmeasure.__exit__C   sK   € Ø�y‰y˜DŸJ™JÑ&Ø$%ˆD�J‰J�t—y‘yÑ!Ø�
‰
�4—9‘9Ó¤§¡£¨t¯x©xÑ!7Ñ7Ôr   N)Ú__name__Ú
__module__Ú__qualname__r   r   r   © r   r   r   r   =   s   „ òòó8r   r   c                 ó˜   — 	 t        j                  | «       y # t        $ r(}|j                  t        j                  k7  r‚ Y d }~y d }~ww xY wr   )ÚosÚremoveÚOSErrorÚerrnoÚENOENT)ÚpathÚes     r   Úrm_fr+   I   s:   € ðÜ
�	‰	�$�øÜò Ø�7‰7”e—l‘lÒ"Øô #ûðús   ‚ ˜	A	¡AÁA	c                   óT   — 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y)Ú	DbCreatorc                 ó‚   — || _         t        j                  «       d   | _        dt	        j                  «       dœ| _        y )Nr   )ÚtotalÚ
total_time)ÚfilesÚapt_pkgÚget_architecturesÚprimary_archr   r   )r   r1   s     r   r   zDbCreator.__init__R   s1   € ØˆŒ
Ü#×5Ñ5Ó7¸Ñ:ˆÔØ ¬t¯y©y«{Ñ;ˆ�
r   c                 óŽ  — |dz   }| j                  |«      st        j                  d|«       y |dz   }t        j                  |«      5 }	 |j                  t        «       | j                  |«       d d d «       t        |«       t        j                  ||«       t!        |d«      5 }t#        j$                  | j'                  «       |«       d d d «       y # t        j                  $ rF}t        |«      dk(  r,t        j                  d|«       t        j                  d«       n|‚Y d }~Œ·d }~ww xY w# 1 sw Y   ŒÀxY w# 1 sw Y   y xY w)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Ü�L‰LØBÀFôLàØ�v‘ˆÜ�_‰_˜UÓ#ð 	 sðØ×!Ñ!¤-Ô0Ø×#Ñ# CÔ(÷	ô 	ˆ]Ôä
�	‰	�%˜Ô ä�- Ó%ð 	7¨Ü�I‰I�d×/Ñ/Ó1°2Ô6÷	7ð 	7øô ×+Ñ+ò 	ô �q“6Ð1Ò1Ü—O‘OØDÀeôMä—H‘H˜Q•Kà�Gô  ûð	ú÷		ð 	ú÷&	7ð 	7ús<   ÁD/Á
&CÂ%%D;ÃD,Ã&<D'Ä"D/Ä'D,Ä,D/Ä/D8Ä;Ec                 ó.  — t         j                  j                  |«      sy	 t        |«      5 }t	        j
                  |«      }d d d «       | j                  «       k7  S # 1 sw Y   ŒxY w# t        $ r!}t        j                  d||«       Y d }~y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‰w�~‰~˜mÔ,Øð	Ü�mÓ$ð %¨Ü—y‘y “}�÷%à˜4×4Ñ4Ó6Ñ6Ð6÷%ð %ûô ò 	Ü�O‰OÐ0°-ÀÔCÜûð	ús.   ¢A* ­AÁA* ÁA'Á#A* Á*	BÁ3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|   sc   € ØˆØ—‘ò 		ˆAÜ—‘˜“ˆBàŸ)™)ØŸ)™)ØŸ)™)ØŸ)™)ØŸ:™:ØŸK™KñˆD�ŠGð		ð ˆr   c                 óp  — | j                   D ]µ  }t        j                  dd|gt        j                  ¬«      5 }d|v r| j	                  |||j
                  «       n| j                  ||j
                  «       |j                  «       dk7  r0t        j                  |j                  dj                  |«      ¬«      ‚	 d d d «       Œ· t        j                  «       | j                  d   z
  | j                  d<   t        j                  d	| j                  d
   | j                  d   fz  «       y # 1 sw Y   �Œ(xY w)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ˆAÜ×!Ñ!Ð#<¸jÈ!Ð"LÔU_×UdÑUdÔeð nÐilØ ‘?Ø×4Ñ4°S¸!¸S¿Z¹ZÕHà×4Ñ4°S¸#¿*¹*ÔEØ—8‘8“: ’?Ü$×7Ñ7À3Ç>Á>Ø=b×=iÑ=iÐjkÓ=lônð nð #÷nð nð	nô $(§9¡9£;°·±¸LÑ1IÑ#Iˆ�
‰
�<Ñ Ü�‰Ð5Ø�J‰J�wÑ §¡¨LÑ!9ð9;ñ ;õ 	<÷nñ nús   ¸BD+Ä+D5	c                 óJ   — |j                  d||f«      j                  «       }|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—   s3   € ØŸ™ðð
 ˜7Ð#ó%÷ &.¡X£Zð 	ð Ðr   c                 óP   — |j                  d|f«       |j                  d|f«       y )Nz"DELETE FROM packages WHERE pkgID=?z"DELETE FROM commands WHERE pkgID=?©ro   )r   rL   Úpkgids      r   Ú_delete_pkgidzDbCreator._delete_pkgid    s$   € Ø�‰Ð8¸5¸(ÔDØ�‰Ð8¸5¸(ÕDr   c                 óT   — |j                  d|f«      j                  «       }|r|d   S y )Nz'SELECT pkgID from packages WHERE name=?r   rn   )r   rL   rr   Úhave_pkgs       r   Ú
_get_pkgidzDbCreator._get_pkgid£   s2   € Ø—;‘;Ø5¸°zóCßCKÁ8Ã:ð 	áØ˜A‘;ÐØr   c                 óF   — |j                  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©   s/   € Ø�K‰Kð ð ˜7 I¨xÐ8ó:ˆð �}‰}Ðr   c                 ó,   — |j                  d||f«       y )NzF
        INSERT INTO commands (command, pkgID) VALUES (?, ?);
        rv   )r   rL   rq   Úpkg_ids       r   Ú_insert_commandzDbCreator._insert_command¯   s   € Ø�‰ð à�vÐõ	 r   c                 ó  — t        j                  |«      }|j                  «       sy |j                  d   }|j	                  d«      ry |j                  d   }|j                  d   }|dk7  r|| j
                  k7  ry |j                  «       �r¶| j                  dxx   dz  cc<   |j                  d   }|j                  j                  d	«      r|j                  d	   }|j                  j                  d
d«      }t        «       }	|j                  j                  dd«      r4t        |j                  j                  dd«      j                  d«      «      }	|j                  d   j                  d«      D �]»  }
|
|	v rŒ	t        d| j                  «      5  | j                  ||
|«      }d d d «       r†t        j                  ||d   «      dkD  rMt        j                  d|
z  «       t        d| j                  «      5  | j                  ||d   «       d d d «       nt        j                  d|
›d|›d�«       ŒÃt        j                  d|
›d|›d|›d|›d�	«       t        d| j                  «      5  | j!                  ||«      }d d d «       srt"        j                  |d«      }|t%        |j                  j                  dd«      «      z  }t        d| j                  «      5  | j'                  |||||«      }d d d «       t        d| j                  «      5  | j)                  ||
|«       d d d «       �Œ¾ |j                  «       r�Œµy y # 1 sw Y   �Œ¢xY w# 1 sw Y   �Œ'xY w# 1 sw Y   ŒàxY w# 1 sw Y   ŒxxY w# 1 sw Y   �ŒxY w) NÚsuitez
-backportsr   ÚarchÚallr/   é   Únamezvisible-pkgnamer~   Ú zignore-commandsú,ÚcommandsÚsql_already_dbé   r   z+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³   s  € Ü�‰˜rÓ"ˆà�y‰yŒ{Øà�l‰l˜7Ñ#ˆà�>‰>˜,Ô'ØØ—,‘,˜{Ñ+ˆ	Ø�\‰\˜&Ñ!ˆà�5Š=˜T T×%6Ñ%6Ò6Øà�i‰i�kØ�J‰J�wÓ 1Ñ$ÓØ—L‘L Ñ(ˆGð �|‰|×ÑÐ 1Ô2ØŸ,™,Ð'8Ñ9�Ø—L‘L×$Ñ$ Y°Ó3ˆGÜ›EˆOØ�|‰|×ÑÐ 1°2Ô6Ü # D§L¡L×$4Ñ$4Ð5FÈÓ$K×$QÑ$QÐRUÓ$VÓ W�ØŸ<™<¨
Ñ3×9Ñ9¸#Ó>ó ?�Ø˜oÑ-ØäÐ-¨t¯z©zÓ:ñ EØ"&§+¡+¨c°7¸GÓ"D�M÷Eá ô ×.Ñ.¨w¸ÀaÑ8HÓIÈAÒMÜŸ™Ð&SÐV]Ñ&]Ô^Ü$Ð%?ÀÇÁÓLñ FØ ×.Ñ.¨s°MÀ!Ñ4DÔE÷Fð Fô  ŸšÒT[Ò]bÐ&cÔdØ Ü—’ÚšW¢gªuð6ô 7ô ˜^¨T¯Z©ZÓ8ñ ;Ø!Ÿ_™_¨S°'Ó:�F÷;áÜ3×7Ñ7¸	À1ÓE�HØ¤ D§L¡L×$4Ñ$4Ð5EÀsÓ$KÓ LÑL�HÜ Ð!1°4·:±:Ó>ñ bØ!%×!5Ñ!5°c¸7ÀGÈYÐX`Ó!a˜÷bäÐ-¨t¯z©zÓ:ñ ?Ø×(Ñ(¨¨g°vÔ>÷?ñ ?ð5?ð �i‰i�kˆk÷ Eñ Eú÷Fñ Fú÷;ð ;ú÷
bð bú÷?ñ ?ús<   ÆMÇ7MÉ+MËM)ÌM5ÍM	ÍM	ÍM&	Í)M2	Í5M?	c                 ó"  — d }|D �]#  }|j                  d«      }|j                  d«      s4|j                  d«      s#|j                  d«      s|j                  d«      sŒZ	 |j                  d d«      \  }}t        j
                  j                  |«      }|j                  d«      D �]€  }	 |j                  «       j                  dd«      \  }	}t        |	j                  d«      «      d
k(  r|	j                  d«      \  }
}	nd}
d }t        d| j                  «      5  | j                  |||«      }d d d «       r	 t        j                   d|›d|›d�«       Œ°t        j                   d|›d|›d|›d|›d�	«       t        d| j                  «      5  | j%                  ||«      }d d d «       sJt&        j)                  |
d«      }t        d| j                  «      5  | j+                  ||||
|«      }d d d «       t        d| j                  «      5  | j-                  |||«       d d d «       �Œƒ �Œ& y # t        $ r Y �Œ4w xY w# t        $ r |j                  «       }d	}	Y �ŒŽw xY w# 1 sw Y   �Œ4xY w# 1 sw Y   ŒÍxY w# 1 sw Y   Œ�xY w# 1 sw Y   �ŒéxY w)Nzutf-8zusr/sbinzusr/binÚbinÚsbinrŠ   r�   r–   Úunknownr�   r	   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ì   se  € àˆàó 0	?ˆAØ—‘˜Ó!ˆAØ—L‘L Ô,°·±¸YÔ0GØ—L‘L Ô'¨1¯<©<¸Ô+?ØðØ$%§G¡G¨D°!Ó$4Ñ!�˜ô —g‘g×&Ñ& wÓ/ˆGà#Ÿ>™>¨#Ó.ó $?�ð(Ø'.§}¡}£×'=Ñ'=¸cÀ1Ó'EÑ$�G˜Wô �w—}‘} SÓ)Ó*¨aÒ/Ø)0¯©°sÓ);Ñ&�I™wà &�Ið �äÐ-¨t¯z©zÓ:ñ EØ"&§+¡+¨c°7¸GÓ"D�M÷Eá ð ô
  ŸšÒT[Ò]bÐ&cÔdØ Ü—’ÚšW¢gªuð6ô 7ô ˜^¨T¯Z©ZÓ8ñ ;Ø!Ÿ_™_¨S°'Ó:�F÷;áÜ3×7Ñ7¸	À1ÓE�HÜ Ð!1°4·:±:Ó>ñ bØ!%×!5Ñ!5°c¸7ÀGÈYÐX`Ó!a˜÷bäÐ-¨t¯z©zÓ:ñ ?Ø×(Ñ(¨¨g°vÔ>÷?ñ ?òG$?ñ0	?øô ò Úðûô "ò (Ø%Ÿm™m›o�GØ'“Gð(ú÷Eñ Eú÷;ð ;ú÷bð bú÷?ñ ?úsT   Á H-Â*#H=ÄIÆI,ÇI8È
JÈ-	H:È9H:È=IÉIÉI)É,I5É8JÊJN)r   r    r!   r   rN   r7   rH   r>   rt   rx   r{   r‚   r…   rg   rf   r"   r   r   r-   r-   Q   s@   „ ò<ò7ò8	òò<òòEòòò ò7?ór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Â      sL  ðó Û Û Û 	Û Û Û 
Û ã Ø €‡�„ð ØØØØØØñÐ ð€÷:	8ñ 	8ò÷O?ñ O?ðd ˆzÒØ€G×Ñ˜gŸl™lÕ+Ù
ˆ3�8‰8ƒ}�qÒÙÐ5¸¿¹À¹ÑCÔDÙÐ>ÀÇÁÈ!ÁÑLÔMÙÐ`Ðbe×bjÑbjÐklÑbmÔnØˆ�‰�ŒÙ
�C—H‘H˜Q˜R�LÓ
!€CØ‡J�Jˆs�x‰x˜‰{ÔØŸ	™	Ÿ™Ó)ò 1‰ˆˆfØˆ�‰¢$©Ð/Õ0ñ1ð r   