Ë tèÝ(.£²yãó—ddlZddlZddlZddlmZddlmZddlmZm Z m Z ddl m Z e j«ZdZdezZd„Zd Zer&ej&ej(zej*zZd Zd „Zd „Zd „d„fd„Zd„d„fd„Zy)éN)Ú_)Úsha1nodeconstants)ÚencodingÚerrorÚpycompaté)Úgitutila© CREATE TABLE refs ( -- node and name are unique together. There may be more than one name for -- a given node, and there may be no name at all for a given node (in the -- case of an anonymous hg head). node TEXT NOT NULL, name TEXT ); -- The "possible heads" of the repository, which we use to figure out -- if we need to re-walk the changelog. CREATE TABLE possible_heads ( node TEXT NOT NULL ); -- The topological heads of the changelog, which hg depends on. CREATE TABLE heads ( node TEXT NOT NULL ); -- A total ordering of the changelog CREATE TABLE changelog ( rev INTEGER NOT NULL PRIMARY KEY, node TEXT NOT NULL, p1 TEXT, p2 TEXT ); CREATE UNIQUE INDEX changelog_node_idx ON changelog(node); CREATE UNIQUE INDEX changelog_node_rev_idx ON changelog(rev, node); -- Changed files for each commit, which lets us dynamically build -- filelogs. CREATE TABLE changedfiles ( node TEXT NOT NULL, filename TEXT NOT NULL, -- 40 zeroes for deletions filenode TEXT NOT NULL, -- to handle filelog parentage: p1node TEXT, p1filenode TEXT, p2node TEXT, p2filenode TEXT ); CREATE INDEX changedfiles_nodes_idx ON changedfiles(node); PRAGMA user_version=%d cóÀ—tjtj|««}t|_|j d«j«d}|dk(rJtjd«D]!}|j |j««Œ#|j«n(|tk(rntjtd««‚|j d«|S)NzPRAGMA user_versionrÚ;s(sqlite database has unrecognized versionzPRAGMA journal_mode=WAL)Úsqlite3ÚconnectrÚ strfromlocalÚbytesÚ text_factoryÚexecuteÚfetchoneÚ_SCHEMAÚsplitÚstripÚcommitÚ_CURRENT_SCHEMA_VERSIONrÚAbortr)ÚpathÚdbÚresÚ statements ú3usr/lib/python3.12/site-packages/hgext/git/index.pyÚ _createdbrKs°€ô �‰œ×.Ñ.¨tÓ4Ó 5€BÜ€B„Oà �*‰*Ð*Ó +× 4Ñ 4Ó 6°qÑ 9€Cð ˆa‚xÜ Ÿ™ sÖ+ˆIØ �J‰J�y—‘Ó(Õ )ð,ð � ‰ � à Ô'Ò 'Ø ô�k‰kœ!ÐGÓHÓIÐIà‡J�JÐ(Ô)à €Ió©i cóÊ—t|t«sJdt|«z«‚t|t«sJdt|«z«‚|jd||f«D�chc]}|dj d«’Œ}}|j |t «}|D]2}|jj|vsŒ|jjcStjd|||f«‚cc}w)ažFind the nearest ancestor that introduces a file node. Args: db: a handle to our sqlite database. gitrepo: A pygit2.Repository instance. file_path: the path of a file in the repo walk_start: a pygit2.Oid that is a commit where we should start walking for our nearest ancestor. Returns: A hexlified SHA that is the commit ID of the next-nearest parent. zfile_path must be str, got %rzfilenode must be str, got %rzASELECT node FROM changedfiles WHERE filename = ? AND filenode = ?rÚasciiz8Unable to find introducing commit for %s node %s from %s) Ú isinstanceÚstrÚtyperÚdecodeÚwalkÚ _OUR_ORDERÚidÚhexrÚProgrammingError) rÚgitrepoÚ file_pathÚ walk_startÚfilenodeÚrowÚparent_optionsÚ inner_walkerÚws rÚ'_find_nearest_ancestor_introducing_noder4qs€ô �i¤Ô %ðÐ'FÌØóJñ(óÐ %ô �h¤Ô $ðÐ&DÄtØóHñ'óÐ $ð —:‘:ð 2à ˜Ð !ô óñ ˆCð ˆA‰� ‰ �gÕð ððð—<‘<  ¬JÓ7€LÛ ˆØ �4‰4�8‰8�~Ò %Ø—4‘4—8‘8ŠOðô × Ñ ØBØ �H˜jÐ)ó ðùòsÁC c ó0—t|t«sJdt|«z«‚t|t«sJdt|«z«‚tj||fg«}|�r”|j «\}}||}g} |j D]‹} | j} |jd«D]} || | j} Œt|||| j| jj«} | j| | jjf«Œ�tjx}x}x}}| D]Q\}}t!|j#d|||f«j%«d«}|dk(sŒ;|€J‚|j||f«ŒS| r| d\}}t'| «dk(r| d\}}t'| «dkDrt)j*d «‚|j#d |||||jj||f«|r�Œ”|j-«y#t$rY�ŒŒwxYw) a’Given a starting commit and path, fill in a filelog's parent pointers. Args: gitrepo: a pygit2.Repository db: a handle to our sqlite database startcommit: a hexlified node id for the commit to start at path: the path of the file whose parent pointers we should fill in. filenode: the hexlified node id of the file at startcommit TODO: make filenode optional zstartcommit must be str, got %rz!startfilenode must be str, got %rÚ/zfSELECT COUNT(*) FROM changedfiles WHERE node = ? AND filename = ? AND filenode = ? AND p1node NOT NULLrNérs'git support can't handle octopus mergeszUPDATE changedfiles SET p1node = ?, p1filenode = ?, p2node = ?, p2filenode = ? WHERE node = ? AND filename = ? AND filenode = ?)r#r$r%Ú collectionsÚdequeÚpopleftÚparentsÚtreerr)ÚKeyErrorr4r*Úappendr ÚnullgitÚintrrÚlenrr+r)r,rÚ startcommitrÚ startfilenodeÚvisitÚcnoder/rr;ÚparentÚtÚcompÚ introducerÚp1nodeÚp1fnodeÚp2nodeÚp2fnodeÚparÚparfnodeÚfounds rÚfill_in_filelogrQ˜s8€ô Ø”Sô ð=à(¬4° Ó+<Ñ<ó=ð ô Ø”sô ðAà*¬T°-Ó-@Ñ@óAð ô × Ñ   ¨]Ð;Ð<Ó =€EÚ ØŸ-™-›/‰ˆˆxؘ‘ˆØˆØ—n”nˆFØ— ‘ ˆAØŸ ™  3ž�ðØ  $¡§ ¡ Ñ+‘Að(ô Eؘ  v§y¡y°!·$±$·(±(ó� ð—‘  ¨A¯D©D¯H©HÐ5Õ6ð%ô/6¯o©oÐ=ˆÐ=�Ð=˜6 GÛ$‰MˆC�ÜØ— ‘ ð&ð˜$ Ð)ó ÷ ‘(“*˜Qñ  óˆEð˜‹zØ�Ð&�Ø— ‘ ˜c 8˜_Õ-ð%ñ Ø% a™j‰OˆF�GÜ ˆw‹<˜1Ò Ø% a™j‰OˆF�GÜ ˆw‹<˜!Ò Ü×(Ñ(Ø:óð ð � ‰ ð ?ð�W˜f g¨v¯y©y¯}©}¸dÀHÐ Mô  óK ðV‡I�I…KøôE òÛðúsÂ,HÈ HÈHcó—y©Nr ©Úxs rÚrVÜs€�Drcó—yrSr ©ÚargsÚkwargss rrVrVÝs€¨Trc ó” —|j«}t«}|d«}t|«D]§\}}|�|j|«|j d«s4|j d«s#|j d«s|j d«sŒ^ |j |«j tj«} |j| j«Œ©|jd«D� chc]} tj| d«’Œ} } d} |D� chc]} | j’Œ}} || k(ry|d«|D],} | €|j!| t"«} Œ| j%| «Œ.|jd «|�|j'«|d «}t| «D�]d\}}|�|j|«t(j*x}}t-|j.«d kDr+t1j2d t-|j.«z«‚|j.r#|j.djj}t-|j.«d k(r#|j.d jj}|jd||jj||f«|jd|jjf«j5«d}|r�Œ?i}|j.r#|j.djjnd}|�-|j7||jjt8¬«}n!|j:j=dt8¬«}d„|D«}|D�cic]J}|jj>t@jBk7r!|jD|jj“ŒL}}|jG«D]2\}}|jd|jj||ddddf«Œ4�Œg|jd«|jd«|D]\}|j} |jd| f«|jd| | f«j5«d}|rŒJ|jd| f«Œ^|jI«|�|j'«yy#t$rY�Œ‰wxYwcc} wcc} wcc}w)Nsrefsz refs/heads/z refs/tags/z refs/remotes/zrefs/hg/zSELECT node FROM possible_headsrs$heads mismatch, rebuilding dagcache zDELETE FROM changelogscommitsr7sJgit support can't handle octopus merges, found a commit with %d parents :(rzz_index_repo..:sèø€Ð<±8¨a˜Ÿ™×)Õ)±8ùs‚ "zwINSERT INTO changedfiles (node, filename, filenode, p1node, p1filenode, p2node, p2filenode) VALUES(?, ?, ?, ?, ?, ?, ?)zDELETE FROM headszDELETE FROM possible_headsz+INSERT INTO possible_heads (node) VALUES(?)z5SELECT COUNT(*) FROM changelog WHERE p1 = ? OR p2 = ?z"INSERT INTO heads (node) VALUES(?))%Úlistall_referencesÚsetÚ enumerateÚupdateÚ startswithÚlookup_referenceÚpeelÚpygit2ÚGIT_OBJ_COMMITÚ ValueErrorÚaddr)rrÚsysstrr*r'r(ÚpushÚcompleter r?rAr;rr+rÚdiffÚ _DIFF_FLAGSr<Ú diff_to_treeÚrawrÚnullidrÚitemsr)r,rÚlogfnÚprogress_factoryÚall_refsÚpossible_headsÚprogÚposÚrefÚstartrUÚ cache_headsÚwalkerÚhÚcur_cache_headsrÚp1Úp2Únum_changedfilesÚfilesÚpatchgenÚ new_filesÚnfrbÚnÚhidÚhaschilds rÚ _index_reporŽÙsP€ð×)Ñ)Ó+€HÜ“U€NÙ ˜GÓ $€DܘhÖ'‰ˆˆSØ Ð Ø �K‰K˜Ô à �N‰N˜=Ô )Ø�~‰~˜lÔ+Ø�~‰~˜oÔ.Ø�~‰~˜jÔ)à ð Ø×,Ñ,¨SÓ1×6Ñ6´v×7LÑ7LÓMˆEð ×ј5Ÿ8™8Õ$ð(ð4—‘Ð=Ô>óá>ˆAô �‰˜˜!™ÕØ>ððð€FÙ&4Ó5¡n �q—u“u n€OÐ5ؘ+Ò%ØÙ Ð 2Ô3ÛˆØ ˆ>Ø—\‘\ %¬Ó4‰Fà �K‰K˜Õ ð  ð‡J�JÐ&Ô'Ø ÐØ � ‰ ŒÙ ˜JÓ '€Dô! ×(‰ ˆˆVØ Ð Ø �K‰K˜Ô Ü—/‘/Ð!ˆˆRÜ ˆv�~‰~Ó  Ò "Ü×(Ñ(ð9ô�f—n‘nÓ%ñ &óð ð �>Š>Ø—‘ Ñ"×%Ñ%×)Ñ)ˆBÜ ˆv�~‰~Ó  !Ò #Ø—‘ Ñ"×%Ñ%×)Ñ)ˆBØ � ‰ Ø JØ �&—)‘)—-‘-  RÐ (ô ð Ÿ:™:Ø >Ø �Y‰Y�]‰]Ð ó ÷ ‰(‹*�QñÐó ØˆEð .4¯^ª^�—‘ Ñ"×%Ñ%×)Ò)ÀˆB؈~Ø"Ÿ<™<¨¨F¯I©I¯M©MĘ<ÓM‘à!Ÿ;™;×3Ñ3ؤ[ð4ó�ñ=±8Ó<ˆIñ$óá#�BØ—5‘5—9‘9Ô 1× 8Ñ 8Ò8𗑘Ÿ™Ÿ™Ñ"Ø#ð ðð Ÿ ™ ž ‘��1ð— ‘ ð>ð—Y‘Y—]‘] A q¨$°°d¸DÐAõ ò &ðY)ðl‡J�JÐ"Ô#؇J�JÐ+Ô,ÛˆØ �G‰GˆØ � ‰ Ð@À1À$ÔGØ—:‘:Ø CÀaÈÀVó ç ‰(‹*�QñˆòØ �J‰JÐ;¸a¸TÕ Bðð‡I�I„KØ ÐØ � ‰ �ðøôOò â ð üòùò 6ùòvs% .R+Ã+R;ÄSÍ+ASÒ+ R8Ò7R8có—yrSr rTs rrVrV[s€˜Trcó—yrSr rXs rrVrV[s€ÈDrcó^—tjjtj|j«ddd«}tjj |«stj |«tjj|d«}t|«}t||||«|S)Ns..s.hgscachesgit-commits.sqlite) ÚosrÚjoinrÚfsencodeÚexistsÚmakedirsrrŽ)r,rxryÚ cachepathÚdbpathrs rÚ get_indexr™Zs�€ô—‘— ‘ Ü×ј'Ÿ,™,Ó'¨°¸ó€Iô �7‰7�>‰>˜)Ô $Ü � ‰ �IÔÜ �W‰W�\‰\˜)Ð%:Ó ;€FÜ �6Ó €Bô�˜˜UÐ$4Ô5Ø €Ir)r8r’r Úmercurial.i18nrÚmercurial.noderÚ mercurialrrrÚr Ú get_pygit2rkrrrr(ÚGIT_SORT_TOPOLOGICALÚ GIT_SORT_TIMEÚGIT_SORT_REVERSErsr4rQrŽr™r rrÚr¢sºðÛÛ ÛåÝ,÷ñõ ð ˆ× Ñ Ó €àÐð1ðdñe2ðònð6€ Ù à×#Ñ#Ø × Ñ ñ à × !Ñ !ñ "ðð € ò$òN>ñH Ù1ó ~ñD"Ñ4Pô r