+
    „WÝjt�  ã                  ó†  € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	H
t
 ^ RIHt ^ RIHtHt ^t^tRtR†tRtRt^PtR‡tR	 R
 ltR]/R R lltR R ltR R ltR R ltR R ltR R ltR R ltR R lt R R lt!R R lt"R  R! lt#R" R# lt$R$ R% lt%R& R' lt&R( R) lt'R* R+ lt(R, R- lt)R. R/ lt*R0 R1 lt+R2 R3 lt,R4 R5 lt-R6 R7 lt.R8 R9 lt/R: R; lt0R< R= lt1R> R? lt2R@ RA lt3RB RC lt4RD RE lt5RF RG lt6RH RI lt7RJ RK lt8RL RM lt9RN RO lt:RˆRP RQ llt;RR RS lt<RT RU lt=RV RW lt>^2t?RXt@RYtARZ R[ ltBR\ R] ltCR^ R_ ltDRˆR` Ra lltERb Rc ltFRd Re ltGRf Rg ltHR‰tIRh Ri ltJRj Rk ltKRl Rm ltLRn Ro ltMRp Rq ltNRr Rs ltORt Ru ltPRv Rw ltQRx Ry ltRRz R{ ltSR|R}/R~ R lltTR€ R� ltUR‚ Rƒ ltVR„ R… ltWR# )Ša~  Backend git operations for the desktop coding rail + review pane.

Mirrors the desktop's Electron-local git ops over the dashboard's authenticated
REST surface so a *remote* gateway acts on the right filesystem. Shells out to
system ``git`` (and ``gh`` for PRs). Reads degrade to ``None``/empty on a
non-repo; mutations raise so the renderer can toast. ``cwd`` is already hardened.
)ÚannotationsN)ÚCallable)ÚPath)Úharden_git_argvÚnoninteractive_git_envi�  iô  iÀÔ c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )é   Úargvú	list[str]ÚcwdÚstrÚtimeoutÚintÚenvÚdictÚreturnz"subprocess.CompletedProcess | None© )Úformats   "ÚFC:\Users\johnn\AppData\Local\hermes\hermes-agent\hermes_cli\web_git.pyÚ__annotate__r   "   s0   € ÷ ñ ˆyð ˜sð ¨Sð °tð Ð@bñ ó    c                ó¢   €  \         P                  ! WRRRRV\         P                  VRR7
      #   \        \         P                  3 d     R# i ; i)züNon-interactive subprocess (stdin nulled, prompts disabled): a credential prompt from
``fetch``/``push`` could never be answered from a REST request, so fail fast and surface
the real auth error in the toast. None when the process could not run at all.Tzutf-8ÚreplaceF)	r   Úcapture_outputÚtextÚencodingÚerrorsr   Ústdinr   ÚcheckN)Ú
subprocessÚrunÚDEVNULLÚOSErrorÚSubprocessError)r	   r   r   r   s   &&&&r   Ú_runr$   "   sR   € ðÜ�~Š~Ø¨$°TÀGØ g´Z×5GÑ5GÈSØô
ð 	
øô
 ”Z×/Ñ/Ð0ô Úðús   ‚,/ ¯AÁAr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   r   r   Úargsr
   r   r   r   ztuple[int, str, str]r   )r   s   "r   r   r   0   s)   € ÷ 5ñ 5ˆcð 5˜ð 5°ð 5ÐG[ñ 5r   c               ó–   € \        R.\        V4      OW\        4       4      pVf   R# VP                  VP                  VP
                  3# )zR(returncode, stdout, stderr) of ``git`` in ``cwd``; never raises on non-zero exit.Úgit)é   Ú zgit invocation failed)r$   r   r   Ú
returncodeÚstdoutÚstderr)r   r&   r   Úprocs   &&$ r   Ú_gitr/   0   sE   € ä�Ð/œ¨Ó.Ð/°Ô?UÓ?WÓX€DØ‚|Ø-Ð-Ø�?‰?˜DŸK™K¨¯©Ð4Ð4r   c               ó$   € V ^8„  d   QhRRRRRR/# ©r   r   r   r&   r
   r   r   )r   s   "r   r   r   8   s!   € ÷ $ñ $�#ð $˜Yð $¨3ñ $r   c                ó4   € \        W4      w  r#pV^ 8X  d   V# R# )z.stdout of a git command, or "" on any failure.r*   ©r/   )r   r&   ÚcodeÚoutÚ_s   &&   r   Ú_git_outr7   8   s    € ä˜“?�L€DˆqØ˜!”)ˆ3Ð# Ð#r   c               ó$   € V ^8„  d   QhRRRRRR/# r1   r   )r   s   "r   r   r   >   s!   € ÷ 'ñ '�3ð '˜ið '¨Cñ 'r   c                ó4   € \        W4      P                  4       # )z<Stripped stdout of a single-value git query ("" on failure).)r7   Ústrip)r   r&   s   &&r   Ú	_git_liner;   >   s   € ä�CÓ×$Ñ$Ó&Ð&r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r   r   r&   r
   r   ÚNoner   )r   s   "r   r   r   C   s&   € ÷ Jñ J�ð J˜Ið J¨$ñ Jr   c                óœ   € \        W4      w  r#pV^ 8w  d7   \        VP                  4       ;'       g    RRP                  V4       R24      hR# )z@Run a git mutation, raising RuntimeError with stderr on failure.zgit Ú z failedN)r/   ÚRuntimeErrorr:   Újoin)r   r&   r4   r6   Úerrs   &&   r   Ú_git_okrC   C   sF   € ä˜“?�L€DˆSØˆq„yÜ˜3Ÿ9™9›;×HÐH¨D°·±¸$³Ð0@ÀÐ*HÓIÐIñ r   c               ó    € V ^8„  d   QhRRRR/# )r   r   r   r   Úboolr   )r   s   "r   r   r   J   s   € ÷ ñ �ð ˜ñ r   c                óZ   €  \        V 4      P                  4       #   \         d     R # i ; i)F)r   Úis_dirr"   ©r   s   &r   Ú_is_dirrI   J   s,   € ðÜ�C‹y×ÑÓ!Ð!øÜô Úðús   ‚ ›*©*c               ó$   € V ^8„  d   QhRRRRRR/# )r   r   r   Úextrar   ztuple[int, str]r   )r   s   "r   r   r   Q   s!   € ÷ ñ �3ð  ð ¨ñ r   c                ó2   € \        V RR.VORN4      w  r#pW#3# )z6(returncode, raw) of ``git status --porcelain=v2 -z``.Ústatusz--porcelain=v2ú-zr3   )r   rK   r4   Úrawr6   s   &*   r   Ú	_status_zrP   Q   s*   € ä˜˜hÐ(8ÐG¸5ÐGÀ$ÐGÓH�L€DˆqØˆ9Ðr   c               ó    € V ^8„  d   QhRRRR/# ©r   r   r   r   r   )r   s   "r   r   r   W   s   € ÷ ^ñ ^�cð ^˜cñ ^r   c                ó   € \        V . RO4      # )zIShort name of origin's default branch (``main``), or "" without a remote.)zsymbolic-refú--quietz--shortzrefs/remotes/origin/HEAD©r;   rH   s   &r   Ú_origin_headrV   W   s   € ä�SÒ\Ó]Ð]r   c               ó    € V ^8„  d   QhRRRR/# rR   r   )r   s   "r   r   r   \   s   € ÷ Hñ H˜Sð H Sñ Hr   c                ó   € \        V . RO4      # )ú	rev-parse)rY   ú--abbrev-refúorigin/HEADrU   rH   s   &r   Ú_origin_head_abbrevr\   \   s   € Ü�SÒFÓGÐGr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r   r   Úrefr   rE   r   )r   s   "r   r   r   `   s&   € ÷ Hñ H�Sð H˜sð H tñ Hr   c                ó6   € \        V R RRV.4      ^ ,          ^ 8H  # )rY   ú--verifyrT   r3   ©r   r^   s   &&r   Ú_ref_existsrb   `   s"   € Ü��k :¨y¸#Ð>Ó?ÀÕBÀaÑGÐGr   c               ó    € V ^8„  d   QhRRRR/# )r   rO   r   r   r   )r   s   "r   r   r   g   s   € ÷ 
*ñ 
*˜Sð 
* Sñ 
*r   c                ól  € \        T ;'       g    R4      P                  4       pRV9  d   V# VP                  R4      w  r#pV'       dH   RV9   dA   VP                  R4      w  rSpVP                  R4      w   r7V V V 2P                  RR4      # VP	                  R4      R,          P                  4       # )u_   ``old => new`` (and ``dir/{old => new}/f``) â†’ the NEW path, so a row addresses the real file.r*   z => Ú{Ú}z//Ú/éÿÿÿÿ)r   r:   Ú	partitionr   Úsplit)rO   ÚpathÚheadr6   ÚtailÚinnerÚsuffixÚtos   &       r   Úresolve_rename_pathrq   g   s¤   € äˆs�yˆy�b‹>×ÑÓ!€DØ�TÔØˆØ—N‘N 3Ó'�M€DˆTß��t”ØŸ>™>¨#Ó.Ñˆ�&Ø—?‘? 6Ó*‰ˆˆ1Ø�˜�t˜F˜8Ð$×,Ñ,¨T°3Ó7Ð7Ø�:‰:�fÓ˜bÕ!×'Ñ'Ó)Ð)r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r   r   r&   r
   r   zdict[str, tuple[int, int]]r   )r   s   "r   r   r   t   s"   € ÷ ñ �#ð ˜Yð Ð+Eñ r   c                óê   € / p\        V RR.VO4      P                  4        FN  pVP                  R4      p\        V4      ^8¼  g   K&  R VR,           4       w  rVWV3V\	        V^,          4      &   KP  	  V# )uP   ``git diff --numstat`` â†’ {path: (added, removed)}; binary files (``-``) â†’ 0.Údiffz	--numstatÚ	c              3  ó\   "  € T F"  qR 8X  d   ^ M\        T;'       g    ^ 4      x € K$  	  R# 5i©Ú-N©r   ©Ú.0Úps   & r   Ú	<genexpr>Ú_numstat.<locals>.<genexpr>z   s#   é € ÐPÁiÀ¨¤8™a´°Q·V°V¸!³Ô<Ãiùs   ‚,�,:Nr   N)r7   Ú
splitlinesrj   Úlenrq   )r   r&   ÚcountsÚlineÚpartsÚaddedÚremoveds   &&     r   Ú_numstatr†   t   ss   € à)+€FÜ˜˜v {Ð:°TÐ:Ó;×FÑFÖHˆØ—
‘
˜4Ó ˆÜˆu‹:˜Ž?ÙPÀeÈBÆiÓP‰NˆEØ5:Ð4DˆFÔ& u¨Q¥xÓ0Ó1ñ	 Ið
 €Mr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r   r   Úrelr   r   r   )r   s   "r   r   r      s!   € ÷ ñ ˜sð ¨ð °ñ r   c                óˆ  €  \        V 4      V,          p\        P                  P                  V4      '       d$   VP	                  4       P
                  \        8”  d   ^ # VP                  4       pRV9   d   ^ # VP                  R4      pV'       d!   VP                  R4      '       g
   V^,           # T#   \         d     ^ # i ; i)u^   Line count of an untracked file (+N for new files in the review tree). Binary/oversized â†’ 0.ó    ó   
)r   Úosrk   ÚisfileÚstatÚst_sizeÚ_UNTRACKED_LINE_MAX_BYTESÚ
read_bytesÚcountÚendswithr"   )r   rˆ   ÚtargetÚdataÚliness   &&   r   Ú_untracked_insertionsr—      s•   € ð
Ü�c“˜S•ˆÜ�w‰w�~‰~˜f×%Ò%¨¯©«×)>Ñ)>ÔAZÔ)ZÙØ× Ñ Ó"ˆØ�DŒ=ÙØ—
‘
˜5Ó!ˆß ¨¯©°u×)=Ò)=ˆu�q�yÐHÀ5ÐHøÜô Úðús0   ‚AB2 ÁB2 Á7B2 ÂB2 Â'B2 Â0B2 Â2CÃ Cc               ó    € V ^8„  d   QhRRRR/# ©r   r   r   r   ú
str | Noner   )r   s   "r   r   r   Ž   s   € ÷ mñ m�cð m˜jñ mr   c                ó€   a € \        S 4      pV'       d   V.M. . RO,           p\        R V 3R lV 4        4       R4      # )zCMerge-base with the remote default branch for "all branch changes".c              3  ó8   "  € T F  q'       g   K  Vx € K  	  R # 5i©Nr   ©r{   Úbs   & r   r}   Ú_branch_base.<locals>.<genexpr>’   s   é € ÐeÑ_�qÓcd—’Ó_ùs   ‚	�
c              3  óB   <"  € T F  p\        SR RV.4      x € K  	  R# 5i)z
merge-baseÚHEADNrU   )r{   r^   r   s   & €r   r}   r    ’   s$   øé € Ð_ÑT^ÈSœY s¨\¸6À3Ð,G×HÐHÓT^ùs   ƒN)zorigin/mainzorigin/masterÚmainÚmaster)r\   Únext)r   rl   Ú
candidatess   f  r   Ú_branch_baser§   Ž   s9   ø€ ä˜sÓ#€Dß �4‘& bÒ,^Õ^€JÜÑeÔ_ÑT^Ô_ÓeÐgkÓlÐlr   c               ó    € V ^8„  d   QhRRRR/# r™   r   )r   s   "r   r   r   •   s   € ÷ 	ñ 	˜cð 	 jñ 	r   c                óÔ   € \        V 4      pV'       d!   VR8w  d   VP                  R^4      R,          # R F.  p\        W4      '       g   K  VP                  R4      R,          u # 	  R# )uD   The repo's trunk name ("main"/"master"/â€¦), preferring origin/HEAD.r[   rg   Nrh   )zrefs/heads/mainzrefs/heads/masterzrefs/remotes/origin/mainzrefs/remotes/origin/master)r\   rj   rb   )r   rl   r^   s   &  r   Ú_default_branch_namerª   •   s]   € ä˜sÓ#€Dß�˜Ô%Ø�z‰z˜#˜qÓ! "Õ%Ð%óJˆä�s× Ô Ø—9‘9˜S“> "Õ%Ò%ñJñ r   c               ó   € V ^8„  d   QhRR/# )r   rO   r   r   )r   s   "r   r   r   ¤   s   € ÷ Dñ D�sñ Dr   c              #  ó  "  € \        V P                  R4      4      pV Fä  pV'       d
   V^ ,          MRpVR8X  d   RRVR,          3x € K-  VR8X  d7   RVP                  R4      ^,          VP                  R^
4      R,          3x € Kj  VR9   g   Ks  VR8X  d   VP                  R^4      R,          MVP                  R^	4      R,          pVR	8X  d   \        VR
4       W2P                  R4      ^,          \        V4      3x € Kæ  	  R
# 5i)z„Yield (tag, xy, path) per changed file from porcelain-v2 ``-z`` output,
skipping branch headers and rename/copy origin-path records.Ú r*   Ú?ú??ºr   NNÚur?   Ú1Ú2Nrh   ©r²   r³   )Úiterrj   r¥   rq   )rO   ÚrecordsÚrecÚtagrk   s   &    r   Ú_walk_entriesr¹   ¤   sÝ   é € ô �3—9‘9˜T“?Ó#€GÛˆßˆc�!Žf ˆØ�#Œ:Ø�t˜S �WÐ$Ô$Ø�CŒZØ�s—y‘y “~ aÕ(¨#¯)©)°C¸Ó*<¸RÕ*@Ð@Ô@Ø�JÖØ,/°3¬J�3—9‘9˜S !Ó$ RÖ(¸C¿I¹IÀcÈ1Ó<MÈbÕ<QˆDØ�cŒzÜ�W˜dÔ#Ø—y‘y “~ aÕ(Ô*=¸dÓ*CÐCÔCó ùs   ‚BD	ÂA7D	c               ó$   € V ^8„  d   QhRRRRRR/# )r   r¸   r   Úxyr   rE   r   )r   s   "r   r   r   µ   s!   € ÷ 9ñ 9�sð 9 ð 9¨ñ 9r   c                ó4   € V R9   ;'       d    V^ ,          R9  # )z1A tracked entry whose index (staged) code is set.r´   ©Ú.r®   r   )r¸   r»   s   &&r   Ú_entry_stagedr¿   µ   s   € à�*Ñ×8Ð8  A¥¨jÑ!8Ð8r   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r¸   r   r»   rk   r   r   r   )r   s   "r   r   r   º   s(   € ÷ ?ñ ?�3ð ?˜Cð ? sð ?¨tñ ?r   c                ó¨   € \        V4      ^8”  d
   V^,          MRpRTR\        W4      RV R8H  ;'       g    V R	9   ;'       d    VR
9  RV R8H  RV R8H  /# )r)   r¾   rk   ÚstagedÚunstagedr®   Ú	untrackedÚ
conflictedr±   r´   r½   )r€   r¿   )r¸   r»   rk   Úys   &&& r   Ú	_classifyrÇ   º   sc   € Ü�R“˜1”ˆˆ1Ž #€AØ�D˜(¤M°#Ó$:Ø˜˜s™
×QÐQ s¨jÑ'8×'PÐ'P¸QÀjÑ=PØ˜ ™ \°3¸#±:ð?ð ?r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r¸   r   r»   r   r   )r   s   "r   r   r   Á   s!   € ÷ 2ñ 2˜ð 2 ð 2¨ñ 2r   c                óâ   € V R9   d   V P                  4       # V^ ,          R8w  d
   V^ ,          M\        V4      ^8”  d
   V^,          MRpVR8w  d   VP                  4       # RP                  4       # )r®   r¾   ÚM)r®   r±   )Úupperr€   )r¸   r»   r4   s   && r   Ú_status_letterrÌ   Á   s^   € Ø
ˆjÔØ�y‰y‹{ÐØ�q•E˜S”Lˆ2ˆaŽ5´°B³¸!´ r¨!¦uÀ€DØ˜C”KˆD×/Ñ/Ó1Ð1 S×/Ñ/Ó1Ð1r   c               ó    € V ^8„  d   QhRRRR/# )r   r   r   r   údict | Noner   )r   s   "r   r   r   Ë   s   € ÷ "ñ "�Sð "˜[ñ "r   c           
     ó$  a a€ \        S 4      '       g   R# \        S R4      w  rV^ 8w  d   R# RpRp^ ;rVVP                  R4       FÜ  pVP                  R4      '       d"   V\	        R4      R pVR8H  pV'       d   RMTpK;  VP                  R4      '       g   KT  VP                  4       R,           Fm  p	V	P                  R	4      '       d   \        V	R
,          ;'       g    ^ 4      pK8  V	P                  R4      '       g   KQ  \        V	R
,          ;'       g    ^ 4      pKo  	  KÞ  	  \        V4       U
UUu. uF  w  r«p\        W«V4      NK  	  ppp
p\        S R.4      P                  4       p\        R V 4       4      pV\        V 3R lVR\          4       4      ,          pRVR\        S 4      RVRVRV/R Uau/ uF  oS\        V3R lV 4       4      bK  	  upCR\	        V4      RVR\        R V 4       4      RVR,          /C# u uppp
i u upi )zDCompact working-tree status for the coding rail. None on a non-repo.Nú--branchFr­   z# branch.head z
(detached)z# branch.ab r°   Ú+:r)   NNrx   r¢   c              3  ó*   "  € T F	  w  rVx € K  	  R # 5ir�   r   )r{   Úar6   s   &  r   r}   Úrepo_status.<locals>.<genexpr>æ   s   é € Ð%™f‘d�a•›fùó   ‚c              3  ój   <"  € T F(  qR ,          '       g   K  \        SVR,          4      x € K*  	  R# 5i)rÄ   rk   N)r—   )r{   Úfr   s   & €r   r}   rÔ   ç   s.   øé € ÐnÑ@[¸1Ðal×_mÑ_mÔ6Ô& s¨A¨f­I×6Ð6Ó@[ùs   ƒ3˜3ÚbranchÚdefaultBranchÚdetachedÚaheadÚbehindc              3  ó4   <"  € T F  qS,          x € K  	  R # 5ir�   r   )r{   r×   Úflags   & €r   r}   rÔ   ë   s   øé € Ð,¡e �t—W’W£eùs   ƒÚchangedr„   r…   c              3  ó*   "  € T F	  w  rVx € K  	  R # 5ir�   r   )r{   r6   Úrs   &  r   r}   rÔ   ì   s   é € Ð=SÉFÁDÀA½aËFùrÕ   Úfiles:NéÈ   N)rÂ   rÃ   rÄ   rÅ   )rI   rP   rj   Ú
startswithr€   r   r¹   rÇ   r†   ÚvaluesÚsumÚ_UNTRACKED_SCAN_CAPrª   )r   r4   rO   rØ   rÚ   rÛ   rÜ   r·   rl   Útokr¸   r»   rk   râ   r�   r„   rÞ   s   f               `r   Úrepo_statusré   Ë   sê  ù€ ä�3�<Š<ÙÜ˜#˜zÓ*�I€DØˆq„yÙà€FØ€HØÐ€EØ�y‰y˜ŽˆØ�>‰>Ð*×+Ò+Ø”sÐ+Ó,Ð.Ð/ˆDØ˜|Ñ+ˆHß%‘T¨4ŠFØ�^‰^˜N×+Ô+Ø—y‘y“{ 2—��Ø—>‘> #×&Ò&Ü  B¥§ ¨1Ó-’EØ—^‘^ C×(Ô(Ü   R¥§ ¨AÓ.’Fó	 'ñ ô <IÈÔ;MÕNÑ;M©-¨#°4ŒY�s Ö%Ñ;M€EÒNô �c˜F˜8Ó$×+Ñ+Ó-€FÜÑ%™fÓ%Ó%€EØ	ŒSÔnÀÐFZÔGZÑ@[ÓnÓnÕn€Eà�&˜/Ô+?ÀÓ+DÀjÐRZØ�˜ &ðñ :kÔ
kÑ9j°ˆ4”Ô,¡eÓ,Ó,Ò,Ñ9jÑ
kðð 	”3�u“:˜w¨¨y¼#Ñ=SÉFÓ=SÓ:SÐU\Ð^cÐdhÕ^iñ	ð ùô Oùò ls   Ä4HÆ9Hc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   r   r   râ   ú
list[dict]Úbaserš   r   r   r   )r   s   "r   r   r   ó   s(   € ÷ *ñ *˜ð * Jð *°jð *ÀTñ *r   c                óÐ   € VP                  R R7       V FH  pVR,          R8X  g   K  VR,          ^ 8X  g   K#  VR,          ^ 8X  g   K3  \        WR,          4      VR&   KJ  	  RVR	V/# )
zOSorted rows; untracked rows with no counts get their insertion count filled in.c                ó   € V R ,          # )rk   r   )r×   s   &r   Ú<lambda>Ú _review_result.<locals>.<lambda>õ   s   € ˜Q˜vžYr   )ÚkeyrM   r®   r„   r…   rk   râ   rì   )Úsortr—   )r   râ   rì   Úfiles   &&& r   Ú_review_resultrô   ó   s`   € à	‡J�JÑ&€JÔ'ÛˆØ��>˜SÖ  T¨'¥]°aÖ%7¸DÀ½OÈqÖ<PÜ1°#¸Fµ|ÓDˆD�‹Mñ ð �U˜F DÐ)Ð)r   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r   r   ÚscopeÚbase_refrš   r   r   r   )r   s   "r   r   r   ü   s(   € ÷ !,ñ !,�Sð !, ð !,°
ð !,¸tñ !,r   c                ó´  € \        V 4      '       g   R. RR/# VR9   dë   VR8X  d   \        V 4      MTpV'       g   R. RR/# VR8X  d   V R2MTp\        W.4      P                  4        UUUu. uF  w  pw  rgRVRVR	VR
RRR/NK  	  ppppVR8X  dl   V U	u0 uF  q™R,          kK  	  p
p	T\	        \        V 4      ^,          4       UUUu. uF#  w  r¼pVR8X  g   K  WZ9  g   K  RVR^ R	^ R
RRR/NK%  	  uppp,          p\        WV4      # \        V 4      w  rÞV^ 8w  d   R. RR/# \        V R.4      p\        V . 4      p. p\	        V4       Fn  w  pppVP                  VR4      w  ppVP                  VR4      w  ppVP                  RVRVV,           R	VV,           R
\        VV4      R\        VV4      /4       Kp  	  \        WR4      # u upppi u up	i u upppi )zBChanged files for a scope. Mirrors the Electron reviewList shapes.râ   rì   NrØ   ÚlastTurnú...HEADrk   r„   r…   rM   rÊ   rÂ   Fr®   ú--cached)rØ   rù   )é    rü   )rI   r§   r†   Úitemsr¹   rP   rô   ÚgetÚappendrÌ   r¿   )r   rö   r÷   rì   Úrngrk   rÓ   rá   râ   r×   Úseenr¸   Ú_xyr4   rO   rÂ   rÃ   r»   ÚsaÚsrÚuaÚurs   &&&                   r   Úreview_listr  ü   s  € ä�3�<Š<Ø˜˜V TÐ*Ð*ØÐ&Ô&Ø$)¨XÔ$5Œ|˜CÔ ¸8ˆßØ˜R ¨Ð.Ð.Ø"'¨8Ô"3���gÑ¸ˆô !)¨¨eÓ 4× :Ñ :Ô <õ
á <‘�‘f�qð �T˜7 A y°!°X¸sÀHÈeÓTÙ <ð 	ò 
ð �JÔÙ',Ó-¡u !�f—I�I¡uˆDÐ-Øä&3´I¸c³NÀ1Õ4EÔ&Fõá&F‘N�C˜dØ˜#‘:ô Yà"&Ñ"2ô Y�˜˜w¨¨9°a¸À3ÈÐRWÓXÙ&Fóõ ˆEô
 ˜c¨$Ó/Ð/ä˜#“�I€DØˆq„yØ˜˜V TÐ*Ð*Ü�c˜J˜<Ó(€FÜ˜˜RÓ €HØ€EÜ& sÖ+‰ˆˆR�Ø—‘˜D &Ó)‰ˆˆBØ—‘˜d FÓ+‰ˆˆBØ�‰�f˜d G¨R°"­W°iÀÀbÅØ¤¨s°BÓ 7¸Ä=ÐQTÐVXÓCYð[ö 	\ñ ,ô
 ˜# dÓ+Ð+ùô1
ùò
 .ùôs   Á-GÂGÃ	G
ÃG
Ã"G
c               ó$   € V ^8„  d   QhRRRRRR/# ©r   r   r   Ú	file_pathr   r   )r   s   "r   r   r      s&   € ÷ Mñ M�sð M sð M¨sñ Mr   c                óž   € \        V 4      V,          P                  4       '       g   R# \        V RRR\        P                  V.4      ^,          # )zYSynthesized all-add diff for an untracked file (``--no-index`` exits non-zero by design).r*   rt   z
--no-indexú--)r   Úis_filer/   rŒ   Údevnull©r   r
  s   &&r   Ú_all_add_diffr     s>   € ä�‹I˜	Õ!×*Ñ*×,Ò,ÙÜ��f˜l¨D´"·*±*¸iÐHÓIÈ!ÕLÐLr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r   r   r&   r
   r
  r   r   )r   s   "r   r   r   '  s.   € ÷ 
Iñ 
I˜3ð 
I ið 
I¸Cð 
IÀCñ 
Ir   c                óÄ  aa€ RV 2p\        V R.VORNRNRNRNVN4      pV'       g   R# \        \        V RR	.4      4      o\        V 4      V,          P                  4       o\        ;QJ d/    VV3R
 lVP                  R4       4       F  '       g   K   RM$	  RM ! VV3R
 lVP                  R4       4       4      '       d   \        R4      h\        V R.VORNRNVN4      # )zGLiteral Git pathspecs still expand directories, including deleted ones.ú
:(literal)rt   ú--no-renamesú--name-onlyrN   r  r*   rY   ú--show-toplevelc              3  ój   <"  € T F(  q'       g   K  SV,          P                  4       S8g  x € K*  	  R # 5ir�   )Úresolve)r{   ÚnameÚrootr”   s   & €€r   r}   Ú$_single_file_diff.<locals>.<genexpr>/  s*   øé € Ð
SÑ9J°ËdÔ,ˆD�4�K× Ñ Ó" fÖ,Ó9Jùs   ƒ	3‘"3r­   TFz'Expected a single file, not a directory)r7   r   r;   r  Úanyrj   r@   )r   r&   r
  ÚliteralÚnamesr  r”   s   &&&  @@r   Ú_single_file_diffr  '  sÔ   ù€ à˜9˜+Ð&€GÜ�S˜6Ð] DÐ]¨.Ð]¸-Ð]ÈÐ]ÈtÐ]ÐU\Ð]Ó^€EßÙÜ”	˜# Ð->Ð?Ó@ÓA€DÜ�3‹i˜)Õ#×,Ñ,Ó.€Fß
ƒsÕ
S¸¿¹ÀTÔ9JÓ
S‡s‡s‚sÕ
S¸¿¹ÀTÔ9JÓ
S×SÒSÜÐDÓEÐEÜ�C˜&ÐG 4ÐG¨ÐG¸ÐG¸wÐGÓHÐHr   c               ó0   € V ^8„  d   QhRRRRRRRRRRR	R/# )
r   r   r   r
  rö   r÷   rš   rÂ   rE   r   r   )r   s   "r   r   r   4  s@   € ÷ Kñ K�Sð K Sð K°ð KÀ
ð KÐTXð KÐ]`ñ Kr   c                óH  € \        V 4      '       g   R # VR8X  d&   \        V 4      pV'       d   \        W R2.V4      # R # VR8X  d   V'       d   \        W.V4      # R # V'       d   \        V R.V4      # \        V . V4      pVP                  4       '       d   V# \	        W4      # )r*   rØ   rú   rù   rû   )rI   r§   r  r:   r  )r   r
  rö   r÷   rÂ   rì   Úworktrees   &&&&&  r   Úreview_diffr#  4  s�   € Ü�3�<Š<ÙØ�ÔÜ˜CÓ ˆßHLÔ  ¨¨wÐ'7Ð&8¸)ÓDÐTÐRTÐTØ�
Ôß@HÔ   j°)Ó<ÐPÈbÐPßÜ   z l°IÓ>Ð>Ü   b¨)Ó4€HØ—~‘~×'Ò'ˆ8ÐJ¬]¸3Ó-JÐJr   c               ó$   € V ^8„  d   QhRRRRRR/# r	  r   )r   s   "r   r   r   B  s&   € ÷ 
Tñ 
T˜3ð 
T¨3ð 
T°3ñ 
Tr   c                ó  € \        V 4      '       g   R# RV 2p\        V R.V4      pVP                  4       '       d   V# \        V RRRV.4      pVP                  4       P	                  R4      '       d   \        W4      # R# )zšWorking-tree-vs-HEAD diff for one file (the preview's diff view). Unlike
review_diff, never all-adds a clean tracked file; only a genuinely untracked one.r*   r  r¢   rM   ú--porcelainr  r¯   )rI   r  r:   r7   rä   r  )r   r
  r  rl   rM   s   &&   r   Úfile_diff_vs_headr'  B  sx   € ô �3�<Š<ÙØ˜9˜+Ð&€GÜ˜S 6 (¨IÓ6€DØ‡z�z‡|‚|ØˆÜ�c˜H m°T¸7ÐCÓD€FØ,2¯L©L«N×,EÑ,EÀd×,KÒ,KŒ=˜Ó(ÐSÐQSÐSr   c               ó$   € V ^8„  d   QhRRRRRR/# ©r   r   r   r
  rš   r   r   r   )r   s   "r   r   r   O  s!   € ÷ ñ �cð  jð °Tñ r   c                ó>   € \        Y'       d   R RV.MR R.4       RR/# )Úaddr  ú-AÚokT©rC   r  s   &&r   Úreview_stager/  O  s%   € ÜˆC®Y�%˜˜yÑ)¸UÀD¸MÔJØ�$ˆ<Ðr   c               ó$   € V ^8„  d   QhRRRRRR/# r)  r   )r   s   "r   r   r   T  s!   € ÷ ñ ˜ð ¨
ð °tñ r   c                óB   € \        T . ROV'       d   RV.M. O4       RR/# )Úresetr  r-  T)r2  ú-qr¢   r.  r  s   &&r   Úreview_unstager4  T  s%   € ÜˆCÒSÇ	¨D°)Ñ+<ÈrÐSÔTØ�$ˆ<Ðr   c               ó$   € V ^8„  d   QhRRRRRR/# r)  r   )r   s   "r   r   r   Y  s!   € ÷ ñ �sð  zð °dñ r   c                óf   € RT;'       g    R.p\        V RR.VO4       \        V RR.VO4       RR/# )	zPDiscard changes back to the committed state (restore tracked, remove untracked).r  r¾   Úcheckoutr¢   Úcleanz-fdr-  Tr3   )r   r
  r”   s   && r   Úreview_revertr9  Y  sF   € à�I×$Ð$ Ð%€FÜˆˆz˜6Ð+ FÐ+Ô,Üˆˆw˜Ð' Ð'Ô(Ø�$ˆ<Ðr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r   r   r^   rš   r   r   )r   s   "r   r   r   a  s&   € ÷ @ñ @˜#ð @ Jð @°:ñ @r   c                óF   € \        T R T;'       g    R.4      ;'       g    R# )rY   r¢   NrU   ra   s   &&r   Úreview_rev_parser<  a  s"   € Ü�S˜;¨¯¨¨vÐ6Ó7×?Ð?¸4Ð?r   c               ó    € V ^8„  d   QhRRRR/# )r   rO   r   r   rE   r   )r   s   "r   r   r   e  s   € ÷ Lñ L�Sð L˜Tñ Lr   c                óŽ   € \         ;QJ d%    R  \        V 4       4       F  '       g   K   R# 	  R# ! R  \        V 4       4       4      # )c              3  ó>   "  € T F  w  rp\        W4      x € K  	  R # 5ir�   )r¿   )r{   r¸   r»   r6   s   &   r   r}   Ú_has_staged.<locals>.<genexpr>f  s   é € ÐKÑ8J©*¨#°1Œ}˜S×%Ð%Ó8Jùs   ‚TF)r  r¹   )rO   s   &r   Ú_has_stagedrA  e  s5   € ß‹3ÑK¼ÀcÔ8JÓK�3Œ3ÐKŠ3ÐKˆ3ÑK¼ÀcÔ8JÓKÓKÐKr   c               ó    € V ^8„  d   QhRRRR/# )r   r   r   r   zdict[str, str]r   )r   s   "r   r   r   i  s   € ÷ ñ ˜Cð  Nñ r   c                óR  € \        \        P                  4      p\        V4      p\        V4      pR F'  pWA9   d   W,          W4&   K  VP	                  VR4       K)  	  R FÄ  p\        RRRV R2.V ^V4      pVf   \        R4      hVP                  ^ 8w  d.   \        VP                  P                  4       ;'       g    R4      h\        P                  ! RVP                  P                  4       4      pVf   \        R4      hVP                  4       w  VRV R	2&   VRV R
2&   KÆ  	  V# )a,  Carry Git's effective identity into an otherwise isolated commit.

Only read-only ``git var`` queries see the original config files. Git resolves
local/conditional config and author/committer environment precedence in *cwd*;
status, staging and the commit itself retain all noninteractive isolation.
Nr(   ÚvarÚGIT_Ú_IDENTzgit identity lookup failedz(.*) <([^<>]*)> -?\d+ [+-]\d{4}z'git returned an invalid commit identityÚ_NAMEÚ_EMAIL)ÚGIT_CONFIG_GLOBALÚGIT_CONFIG_SYSTEMÚGIT_CONFIG_NOSYSTEM)ÚAUTHORÚ	COMMITTER)r   rŒ   Úenvironr   Úpopr$   r@   r+   r-   r:   ÚreÚ	fullmatchr,   Úgroups)r   rì   r   Ú	probe_envrñ   Úroler.   Úidents   &       r   Ú_review_commit_envrV  i  s  € ô ”—
‘
Ó€DÜ
  Ó
&€CÜ�S“	€IÛPˆØŒ;Ø!�YˆI‹Nà�M‰M˜#˜tÖ$ñ	 Qó
 (ˆÜ�U˜E T¨$¨¨vÐ#6Ð7¸¸aÀÓKˆØŠ<ÜÐ;Ó<Ð<Ø�?‰?˜aÔÜ˜tŸ{™{×0Ñ0Ó2×RÐRÐ6RÓSÐSÜ—’Ð?ÀÇÁ×ARÑARÓATÓUˆØŠ=ÜÐHÓIÐIØ<A¿L¹L»NÑ9ˆˆd�4�&˜ÐÑ  t¨D¨6°Ð%8Ó!9ñ (ð €Jr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r   r   ÚmessageÚpushrE   r   r   r   )r   s   "r   r   r   …  s(   € ÷ ñ �sð  Sð °ð ¸ñ r   c                óv  € \        V 4      p\        \        V 4      ^,          4      '       g   \        V RR.4       \	        R.\        RRV.4      OV \        V4      pVe   VP                  ^ 8w  d4   \        Ve   VP                  P                  4       MR;'       g    R4      hV'       d   \        V 4       RR	/# )
zGCommit the working tree; stage everything first when nothing is staged.r+  r,  r(   Úcommitú-mr*   zgit commit failedr-  T)rV  rA  rP   rC   r$   r   Ú_GIT_TIMEOUTr+   r@   r-   r:   Ú_review_push)r   rX  rY  r   r.   s   &&&  r   Úreview_commitr_  …  s¬   € ä
˜SÓ
!€CÜ”y “~ aÕ(×)Ò)Ü��e˜T�]Ô#ÜØ	Ð<” (¨D°'Ð!:Ó;Ð<¸cÄ<ÐQTó€Dð ‚|�t—‘¨!Ô+ÜØ$(Ò$4ˆT�[‰[×ÑÔ ¸"×TÐTÐATó
ð 	
÷ Ü�SÔØ�$ˆ<Ðr   c               ó    € V ^8„  d   QhRRRR/# ©r   r   r   r   r=   r   )r   s   "r   r   r   –  s   € ÷ 7ñ 7�cð 7˜dñ 7r   c                ó®   € \        V . RO4      '       d   \        V R.4       R# \        V . RO4      pV'       d   VR8w  d   \        V RRRV.4       R# R# R# )rY   rY  Nr¢   z-uÚorigin)rY   rZ   z--symbolic-full-namez@{u})rY   rZ   r¢   )r;   rC   )r   rØ   s   & r   r^  r^  –  sP   € Ü�ÒS×TÒTÜ��f�XÔÙÜ�sÒAÓB€Fß�&˜FÔ"Ü��f˜d H¨fÐ5Ö6ñ #�vr   c               ó    € V ^8„  d   QhRRRR/# ©r   r   r   r   r   r   )r   s   "r   r   r   Ÿ  s   € ÷ ñ �Sð ˜Tñ r   c                ó    € \        V 4       R R/# )r-  T)r^  rH   s   &r   Úreview_pushrg  Ÿ  s   € Ü�ÔØ�$ˆ<Ðr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r   r   Úpath_allowedzCallable[[Path], bool] | Noner   r   r   )r   s   "r   r   r   ¤  s(   € ÷ eñ e˜sð eÐ2Oð eÐ[_ñ er   c                óp  € \        V 4      '       d   \        V 4      MRw  r#V^ 8w  d   RRRR/# \        \        V4      4      p\	        V4      '       d   RR.MRR.pVf   \        W4      pMÑ\        V RR.4      pV'       g   RRRR/# \        V. VOR	NR
NRN4      P                  R4      pV U	u. uF1  q™'       g   K  V! \        V4      V	,          4      '       g   K,  RV	 2NK3  	  p
p	V
'       d   \        V. VOR	NRNV
O4      MRpV Uu. uF+  q±! \        V4      V^,          ,          4      '       g   K)  VNK-  	  pp\        V4      \        8”  d&   \        V4      \        ,
          pVR\          RV R2pV UUUu. uF  w  rÞqýR8X  g   K  VNK  	  ppppV'       do   VR\         pVRRP                  R V 4       4      ,           ,          p\        V4      \        V4      8”  d'   VR\        V4      \        V4      ,
           R2,          pRT;'       g    RR\        V . RO4      /# u up	i u upi u upppi )zJDiff of what WILL commit + recent subjects, for drafting a commit message.r*   rt   Úrecentrû   r¢   NrY   r  r  r  rN   r­   r  r  z
# diff truncated: z chars omitted
r®   z
# New (untracked) files:
c              3  ó.   "  € T F  pR V R2x € K  	  R# 5i)z#   Ú
Nr   rz   s   & r   r}   Ú(review_commit_context.<locals>.<genexpr>½  s   é € Ð8WÉwÈ!¸4À¸sÀ"½Ëwùs   ‚z#   ... z more omitted
)r)   r*   )Úlogz-nÚ10z--pretty=format:%s)rI   rP   Úlistr¹   rA  r7   r;   rj   r   r€   Ú_COMMIT_CONTEXT_DIFF_MAX_CHARSÚ_COMMIT_CONTEXT_UNTRACKED_MAXrA   )r   ri  r4   rO   Úentriesr&   rt   Úrepor  r  ÚallowedÚentryÚomittedr¸   r  rk   rÄ   Úvisibles   &&                r   Úreview_commit_contextrz  ¤  s'  € ä")¨#§,¢,”	˜#”°G�I€DØˆq„yØ˜˜H bÐ)Ð)Ü”= Ó%Ó&€GÜ#.¨s×#3Ò#3ˆF�JÑ¸&À&Ð9I€DØÒÜ˜Ó"‰ô ˜˜{Ð,=Ð>Ó?ˆßØ˜B ¨"Ð-Ð-Ü˜ÐK ÐK ~ÐK°}ÐKÀdÐKÓL×RÑRÐSWÓXˆÙ38Óe±5¨4»DÔ&Á\ÔRVÐW[ÓR\Ð_cÕRc×EdÔ&�Z ˜vÓ&±5ˆÐeßJQŒx˜ÐE ÐE nÐE°dÐE¸WÐEÔFÐWYˆÙ&-ÓU¡g˜U°¼dÀ4»jÈ5ÐQRÍ8Õ>S×1T—5�5¡gˆÐUÜ
ˆ4ƒyÔ1Ô1Ü�d“)Ô<Õ<ˆØÐ6Ô6Ð7Ð8Ð8LÈWÈIÐUeÐfˆÙ,3ÕB©G™.˜# D¸c±z—�©G€IÒBßØÐ:Ô:Ð;ˆØÐ.°·±Ñ8WÉwÓ8WÓ1WÕWÕWˆÜˆy‹>œC ›LÔ(Ø�hœs 9›~´°G³Õ<Ð=¸_ÐMÕMˆDØ�D—J�J˜B ¬)°CÒ9bÓ*cÐdÐdùò fùâUùô Cs*   Â.	H'Â<H'Ã	H'Ä	&H,Ä4H,Å;H1ÆH1c               ó$   € V ^8„  d   QhRRRRRR/# )r   r   r   r&   r
   r   ztuple[bool, str, str]r   )r   s   "r   r   r   Æ  s'   € ÷ Fñ FˆSð F˜	ð FÐ&;ñ Fr   c                ó  € \         P                  ! R4      '       g   R# \        4       pRVR&   \        R.VOV \        V4      pVf   R# VP
                  ^ 8H  VP                  ;'       g    RVP                  ;'       g    R3# )už   ``(ok, stdout, stderr)`` of ``gh`` in ``cwd``. Never raises on non-zero exit â€”
the caller decides what a failure means, and the real reason rides in stderr.Úghr*   r²   ÚGH_PROMPT_DISABLED)Fr*   r*   )ÚshutilÚwhichr   r$   Ú_GH_TIMEOUTr+   r,   r-   )r   r&   r   r.   s   &&  r   Ú_ghr‚  Æ  s{   € ô �<Š<˜×ÒØÐä
 Ó
"€CØ #€CÐÑÜ��˜�˜s¤K°Ó5€DØ‚|ØÐØ�?‰?˜aÑ §¡×!2Ð!2°°D·K±K×4EÐ4EÀ2ÐEÐEr   c               ó    € V ^8„  d   QhRRRR/# )r   r   r   r&   r
   r   )r   s   "r   r   r   Ô  s   € ÷ ñ �#ð ˜Yñ r   c                ó˜   € \        W4      w  r#pV'       g   R#  \        P                  ! V4      #   \        P                   d     R# i ; i)z6Parsed JSON stdout of a successful gh call, else None.N)r‚  ÚjsonÚloadsÚJSONDecodeError)r   r&   r-  r5   Ú_stderrs   &&   r   Ú_gh_jsonr‰  Ô  sA   € ä˜3“~Ñ€BˆWßÙðÜ�zŠz˜#‹ÐøÜ×Ñô Úðús   š0 °A	ÁA	c               ó    € V ^8„  d   QhRRRR/# re  r   )r   s   "r   r   r   ß  s   € ÷ )ñ )˜#ð ) $ñ )r   c                ó.  € \        V 4      '       d   \        V RR.4      ^ ,          '       g   RRRR/# \        V . RO4      pV'       dI   VP                  R4      '       d2   RRRRVR,          R	VP                  R	4      R
VP                  R
4      //# RRRR/# )zPgh availability/auth + this branch's PR. ghReady false when gh missing/unauthed.ÚauthrM   ÚghReadyFÚprNÚurlTÚstateÚnumber)rŽ  Úviewú--jsonzurl,state,number)rI   r‚  r‰  rþ   )r   rŽ  s   & r   Úreview_ship_infor”  ß  s‘   € ä�3�<Š<œs 3¨°Ð(:Ó;¸A×>Ô>Ø˜5 $¨Ð-Ð-Ü	�#ÒCÓ	D€Bß	ˆb�f‰f�U�mŠmØ˜4 ¨¨r°%­y¸'À2Ç6Á6È'Ã?ÐT\Ð^`×^dÑ^dÐemÓ^nÐ'oÐpÐpØ�t˜T 4Ð(Ð(r   i,  z<number state isDraft isCrossRepository title url headRefNamec          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r   Úownerr   r  Úbranchesr
   Únumbersz	list[int]r   r   )r   s   "r   r   r   ð  s0   € ÷ +ñ +�Sð + ð +¨yð +À9ð +ÐQTñ +r   c                óž  € \        V4       UUu. uF)  w  rER V R\        P                  ! V4       R\         R2NK+  	  pppT\        V4       UUu. uF  w  rGRV RV R\         R2NK  	  upp,          pR\        P                  ! V 4       R	\        P                  ! V4       R
2RP	                  V4      ,           R,           # u uppi u uppi )rŸ   z: pullRequests(headRefName: zE, first: 5, orderBy: {field: CREATED_AT, direction: DESC}) { nodes { z } }Únz: pullRequest(number: z) { z }zquery { repository(owner: z, name: z) {
rm  z
} })Ú	enumerater…  ÚdumpsÚ_PR_NODE_FIELDSrA   )r–  r  r—  r˜  ÚirØ   Úfieldsrš  s   &&&&    r   Ú	_pr_queryr   ð  sä   € ô
 # 8Ô,ô	ñ -‰IˆAð ˆAˆ3Ð*¬4¯:ª:°fÓ+=Ð*>ð ?ä&Ð' vó	/ñ -ð	 ñ ð ÔU^Ð_fÔUgÔhÑUgÉTÈQ��1�#Ð+¨A¨3¨e´OÐ3DÀCÓHÑUgÒhÕh€FØ)¬$¯*ª*°UÓ*;Ð)<¸HÄTÇZÂZÐPTÓEUÐDVÐV\Ð]Ø�i‰i˜Óõ Ø")õ*ð +ùóùó is   �/CÁC	c               ó    € V ^8„  d   QhRRRR/# )r   rŽ  r   r   r   )r   s   "r   r   r   þ  s   € ÷ Rñ R�Dð R˜Tñ Rr   c                óª  € R \        V P                  R4      4      R\        V P                  R4      4      R\        V P                  R4      ;'       g    ^ 4      R\        V P                  R4      ;'       g    R4      P	                  4       R\        V P                  R4      ;'       g    R4      R\        V P                  R4      ;'       g    R4      /# )	rØ   ÚheadRefNameÚdraftÚisDraftr‘  r�  r*   Útitler�  )r   rþ   rE   r   Úlower)rŽ  s   &r   Ú_pr_payloadr¨  þ  s¤   € Ø”c˜"Ÿ&™& Ó/Ó0°'¼4ÀÇÁÀyÓ@QÓ;RØ”c˜"Ÿ&™& Ó*×/Ð/¨aÓ0°'¼3¸r¿v¹vÀg»×?TÐ?TÐRTÓ;U×;[Ñ;[Ó;]Ø”S˜Ÿ™ ›×.Ð.¨BÓ/°¼¸B¿F¹FÀ5»M×<OÐ<OÈRÓ8PðRð Rr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rñ   r   Úfieldr   r   rÎ   r   )r   s   "r   r   r     s&   € ÷ gñ g�ð g˜Tð g kñ gr   c                óŒ   € V P                  R4      '       d   V# \        R VP                  R4      ;'       g    .  4       R4      # )u&  The PR a GraphQL alias resolved to. Asked-by-number (``n<i>``) â†’ ours by construction (a
fork PR can't come from our own transcript). Fork PRs share our branch namespace (a
contributor's `main` would badge a trunk session with a stranger's PR), so by-branch
lookups only count own-repo nodes.rš  c              3  ój   "  € T F)  q'       g   K  VP                  R 4      '       d   K%  Vx € K+  	  R# 5i)ÚisCrossRepositoryN)rþ   ©r{   rš  s   & r   r}   Ú_own_pr.<locals>.<genexpr>  s$   é € Ð_Ñ5�q»!”ÀAÇEÁEÐJ]×D^—’Ó5ùs   ‚	3�3©
3ÚnodesN)rä   r¥   rþ   )rñ   rª  s   &&r   Ú_own_prr±    s@   € ð
 ‡~�~�c×ÒØˆÜÑ_˜UŸY™Y wÓ/×5Ð5°2Ð5Ó_ÐaeÓfÐfr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   r   r   r—  r
   r˜  zlist[int] | Noner   r   r   )r   s   "r   r   r     s*   € ÷ )ñ )˜ð ) yð )Ð;Kð )ÐW[ñ )r   c                ón  € RRR. /p\        V 4      '       g   V# \        \        P                  R T;'       g    .  4       4      4      R\         p\        \        P                  R T;'       g    .  4       4      4      R\         pV'       g   V'       g   V# \        V . RO4      w  rgpVP                  4       P                  R4      w  ršpV'       d   V	'       d	   V'       g   V# . p\        p\        ^ \        V4      V4       Uu. uF  qäWîV,            . 3NK  	  up\        ^ \        V4      V4       Uu. uF  p. W^Wí,            3NK  	  up,           pV FÏ  w  pp\        V RR	R
R\        W›VV4       2.4      pT;'       g    / P                  R4      ;'       g    / P                  R4      ;'       g    / pVP                  4        FY  w  ppV'       d   \        VV4      MRpV'       g   K&  VP                  R4      '       g   K?  VP!                  \#        V4      4       K[  	  KÑ  	  RRRV/# u upi u upi )u™   PRs on the given branches (plus any asked for by number) â€” queried per branch
rather than paging the repo's newest PRs and hoping ours are in the page.r�  FÚprsc              3  óJ   "  € T F  q'       g   K  \        V4      x € K  	  R # 5ir�   )r   rž   s   & r   r}   Ú!review_pr_list.<locals>.<genexpr>  s   é € ÐF±¨1ÃA¤¤ A§ ³ùó   ‚	#�#Nc              3  óJ   "  € T F  q'       g   K  \        V4      x € K  	  R # 5ir�   ry   r®  s   & r   r}   r¶    s   é € Ð"H±M¨aÃa¤6¤3 q§6 6³Mùr·  rg   ÚapiÚgraphqlz-fzquery=r•   Ú
repositoryr£  T)ru  r’  r“  ÚnameWithOwnerr3  z.nameWithOwner)rI   rq  r   ÚfromkeysÚ_PR_QUERY_BRANCH_CAPr‚  r:   ri   Ú_PR_QUERY_BRANCH_CHUNKÚranger€   r‰  r   rþ   rý   r±  rÿ   r¨  )r   r—  r˜  Ú	not_readyÚwantedÚ	by_numberÚrepo_okÚrepo_outÚ	_repo_errr–  r6   r  r´  Ústeprž  ÚchunksÚbranch_chunkÚnumber_chunkr•   r»  rñ   rª  rŽ  s   &&&                    r   Úreview_pr_listrË    sò  € ð ˜E 5¨"Ð-€IÜ�3�<Š<ØÐÜ”$—-‘-ÑF°·°¸R°ÓFÓFÓGÐH]ÔI]Ð^€FÜ”T—]‘]Ñ"H°G·M°M¸r°MÓ"HÓHÓIÐJ_ÔK_Ð`€IßŸ)ØÐÜ#& sÒ,oÓ#pÑ €G�yØ—^‘^Ó%×/Ñ/°Ó4�N€EˆdßŸ%§tàÐà€CÜ!€DÜ16°q¼#¸f»+ÀtÔ1LÓMÑ1L¨A�q˜T�Ð" BÓ'Ñ1LÑMÜ6;¸A¼sÀ9»~ÈtÔ6TÓUÑ6T°�"�i !¥(Ð+Ó,Ñ6TÑUõV€Fã&,Ñ"ˆ�lä˜˜e Y°¸¼yÈÐVbÐdpÓ?qÐ>rÐ6sÐtÓuˆØ—z�z˜r×&Ñ& vÓ.×4Ð4°"×9Ñ9¸,ÓG×MÐMÈ2ˆ
Ø$×*Ñ*Ö,‰JˆC�ß(-”˜˜eÔ$°4ˆBß‰r�b—f‘f˜]×+Ô+Ø—
‘
œ; r›?Ö+ó -ñ	 '-ð �t˜U CÐ(Ð(ùò NùÚUs   ÄH-Ä4H2c               ó    € V ^8„  d   QhRRRR/# re  r   )r   s   "r   r   r   -  s   € ÷ ñ ˜#ð  $ñ r   c                óF  €  \        V 4       \        V . RO4      w  rpV'       g1   VP                  4       \        ) R ;'       g    Rp\        RV 24      h\        R \        VP                  4       P                  4       4       4       R4      pRV/#   \         d     L’i ; i)zLCreate a PR for the current branch (push first), letting gh fill title/body.Nz"is gh installed and authenticated?zgh pr create failed: c              3  óT   "  € T F  qP                  4       '       g   K  Vx € K   	  R # 5ir�   )r:   ©r{   r‚   s   & r   r}   Ú#review_create_pr.<locals>.<genexpr><  s   é € ÐTÑ!C˜ÇzÁzÇ|—’Ó!Cùs   ‚(ž
(r*   r�  )rŽ  Úcreatez--fill)r^  r@   r‚  r:   Ú_GH_ERR_TAIL_CHARSr¥   Úreversedr   )r   Úcreatedr5   rB   Údetailr�  s   &     r   Úreview_create_prrÖ  -  s    € ðÜ�SÔô ˜CÒ!;Ó<Ñ€G�#ßð —‘“Ô0Ð0Ð1Ð2×ZÐZÐ6ZˆÜÐ2°6°(Ð;Ó<Ð<Ü
ÑT¤¨#¯)©)«+×*@Ñ*@Ó*BÔ!CÓTÐVXÓ
Y€CØ�3ˆ<Ðøô ô Ùðús   ‚B ÂB ÂB c               ó    € V ^8„  d   QhRRRR/# ©r   r   r   r   rë   r   )r   s   "r   r   r   C  s   € ÷ ñ �sð ˜zñ r   c                ó  € . p\        V . RO4      P                  R4       Fà  pVP                  R4      '       d8   VP                  RVR,          P	                  4       RRRV'       * RR	R
R	/4       KQ  V'       g   K[  VP                  R4      '       d5   VR,          P	                  4       P                  RR^4      VR,          R&   K¦  VR8X  d   RVR,          R&   K»  VP                  R
4      '       g   KÔ  RVR,          R
&   Kâ  	  V# )zI``git worktree list --porcelain`` -> one dict per tree (main tree first).rm  z	worktree rk   :é	   NNrØ   NÚisMainrÚ   FÚlockedzbranch :é   NNúrefs/heads/r*   T)r"  rq  r&  rh   )r7   rj   rä   rÿ   r:   r   )r   Útreesr‚   s   &  r   Úworktree_listrà  C  sß   € à€EÜ˜ÒAÓB×HÑHÈÖNˆØ�?‰?˜;×'Ò'Ø�L‰L˜& $ r¥(§.¡.Ó"2°H¸dÀHÐRWÌiØ$ e¨X°uð>ö ?çÙØ�_‰_˜Y×'Ò'Ø"& r¥(§.¡.Ó"2×":Ñ":¸=È"ÈaÓ"PˆE�"�I�hÓØ�ZÔØ$(ˆE�"�I�jÓ!Ø�_‰_˜X×&Ô&Ø"&ˆE�"�I�hÓñ Oð €Lr   c               ó    € V ^8„  d   QhRRRR/# rR   r   )r   s   "r   r   r   U  s   € ÷ .ñ .�Cð .˜Cñ .r   c                óL   € \        V 4      pV'       d   V^ ,          R,          # T # )rü   rk   )rà  )r   rß  s   & r   Ú
_main_rootrã  U  s"   € Ü˜#Ó€Eß$ˆ5��8�FÕÐ-¨#Ð-r   c               ó    € V ^8„  d   QhRRRR/# ©r   r  r   r   r   )r   s   "r   r   r   _  s   € ÷ ñ ˜3ð  3ñ r   c                ó|   € \        T ;'       g    R 4      p\         F  w  r#\        P                  ! W#V4      pK  	  V# )r*   )r   Ú_BRANCH_SANITIZERSrP  Úsub)r  ÚvalueÚpatternÚrepls   &   r   Ú_sanitize_branchrì  _  s2   € Ü�—
�
˜‹O€Eß+‰ˆÜ—’�w eÓ,Šñ ,à€Lr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r  r   ÚremoterØ   r   rE   r   )r   s   "r   r   r   f  s.   € ÷ Sñ S˜cð S¨3ð S¸ð SÀñ Sr   c           	     óJ   € ^ RI Hp \        V RW! W4      .4      ^ ,          ^ 8H  # )zóFetch ``<remote>/<branch>`` by explicit refspec; True when the remote has the branch.

A tag-pinned narrow clone maps only the tag in ``remote.<remote>.fetch``, so a by-name
fetch writes FETCH_HEAD without creating the tracking ref (#125686).
)Útracking_refspecÚfetch)Úhermes_cli.update_cmd_checkrð  r/   )r  rî  rØ   rð  s   &&& r   Ú_fetch_tracking_refró  f  s,   € õ =ä��w Ð(8¸Ó(HÐIÓJÈ1ÕMÐQRÑRÐRr   c               ó    € V ^8„  d   QhRRRR/# rå  r   )r   s   "r   r   r   q  s   € ÷ ñ �3ð ˜3ñ r   c                ó  € \         P                  ! R R\        T ;'       g    R4      P                  4       P	                  4       4      p\         P                  ! RRV4      R,          P                  R4      pT;'       g    R# )z
[^a-z0-9]+rx   r*   z^-+|-+$:Né(   NÚwork)rP  rè  r   r:   r§  Úrstrip)r  Úslugs   & r   Ú_slugifyrú  q  s^   € Ü�6Š6�- ¤c¨$¯*¨*°"£o×&;Ñ&;Ó&=×&CÑ&CÓ&EÓF€DÜ�6Š6�*˜b $Ó'¨Õ,×3Ñ3°CÓ8€DØ�>ˆ>�6Ðr   c               ó    € V ^8„  d   QhRRRR/# rR   r   )r   s   "r   r   r   w  s   € ÷ ñ ˜ð  ñ r   c                ó¬   a € \        S 4      P                  R R^4      ;'       g1    \        S . RO4      ;'       g    \        V 3R l\         4       R4      # )úorigin/r*   c              3  ó\   <"  € T F!  p\        SR RRV 2.4      '       g   K  Vx € K#  	  R# 5i)úshow-refr`   rÞ  NrU   )r{   rŸ   r   s   & €r   r}   Ú"_default_branch.<locals>.<genexpr>{  s-   øé € Ðk™O�q¬y¸¸zÈ:ÐYdÐefÐdgÐWhÐ>i×/j—’›Oùs   ƒ,¢
,)Úconfigz--getzinit.defaultBranch)rV   r   r;   r¥   Ú_TRUNK_BRANCHESrH   s   fr   Ú_default_branchr  w  sS   ø€ ä�SÓ×!Ñ! )¨R°Ó3÷ 	qð 	qÜ�SÒCÓD÷	qð 	qäÔk�OÓkÐmoÓpðr   c               ó    € V ^8„  d   QhRRRR/# ra  r   )r   s   "r   r   r     s   € ÷ 
Jñ 
J�cð 
J˜dñ 
Jr   c                óž   € \        V RR.4      R8w  d   \        V R.4       RpM\        V R4      '       * pV'       d   \        V . RO4       R# R# )	z˜A new project folder may not be a repo (or has no commit to branch from);
init it with a root commit so worktrees just work. No-op for a committed repo.rY   z--is-inside-work-treeÚtrueÚinitTr¢   N)ú-czuser.email=hermes@localhostr  zuser.name=Hermesr[  z--allow-emptyr\  zInitial commit)r;   rC   rb   )r   Ú
needs_roots   & r   Ú_ensure_repor
    sR   € ô ��{Ð$;Ð<Ó=ÀÔGÜ��f�XÔØ‰
ä$ S¨&Ó1Ô1ˆ
ßÜ�ò Iö 	Jñ r   c               ó    € V ^8„  d   QhRRRR/# )r   rì   r   r   r   )r   s   "r   r   r   Œ  s   € ÷ @ñ @�cð @˜cñ @r   c                ó”   a € \         P                  ! S .V 3R  l\         P                  ! ^4       4       4      p\        R V 4       4      # )c              3  ó2   <"  € T F  pS R V 2x € K  	  R# 5irw   r   )r{   rš  rì   s   & €r   r}   Ú_unique_dir.<locals>.<genexpr>�  s   øé € Ð)TÑAS¸A¨T¨F°!°A°3­-ÓASùs   ƒc              3  ót   "  € T F.  p\         P                  P                  V4      '       d   K*  Vx € K0  	  R # 5ir�   )rŒ   rk   Úexists)r{   Úcs   & r   r}   r  Ž  s!   é € Ð?™:�a¬R¯W©W¯^©^¸A×->—’›:ùs   ‚'8®
8)Ú	itertoolsÚchainr’   r¥   )rì   r¦   s   f r   Ú_unique_dirr  Œ  s6   ø€ Ü—’ $ Ô)TÄÇÂÐQRÔASÓ)TÓU€JÜÑ?™:Ó?Ó?Ð?r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r   r   r  r   r   )r   s   "r   r   r   ‘  s!   € ÷ !ñ !˜ð ! 3ð !¨3ñ !r   c                ó„   € RV9  g    \        V RRRRV 2.4      ^ ,          ^ 8w  d   R# VP                  R^4      ^ ,          # )z²The remote a ref belongs to ("origin" for "origin/main"), or "" when ``name`` is not a
remote-tracking ref here. Asks git rather than assuming "origin" (mirrors the Electron op).rg   rÿ  r`   rT   zrefs/remotes/r*   )r/   rj   )r   r  s   &&r   Ú_remote_of_refr  ‘  sK   € ð �$„œ$˜s Z°¸YÈ-ÐX\ÐW]ÐH^Ð$_Ó`ÐabÕcÐghÔhÙØ�:‰:�c˜1Ó˜aÕ Ð r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r  r   Úraw_namer   r   r   )r   s   "r   r   r   ™  s&   € ÷ 0Bñ 0B ð 0B°ð 0B¸ñ 0Br   c           
     óB  € \        V4      pV'       g   \        R4      h\        W4      pRpV'       g[   RV9   dT   \        V RV 24      '       g?   VP	                  R^4      w  rV\        V RRV.4      '       d   \        WV4      '       d   TRrCV'       d   VP	                  R^4      ^,          MTpV'       g'   V\        V 4      8X  d   \        V RV.4       R	V R
VRV /# \        \        P                  P                  V R\        V4      4      4      pV'       dq   T;'       g    \        WV4      p\        V RRRRWxV.4      ^ ,          ^ 8w  d<   \        V RRRWxV.4       V'       d#   \        V RRRW7.4       \        V R
RV 2V.4       M\        V RRW‡.4       R	VR
VRV /# )uK  Check out an existing local or remote-tracking branch into a worktree (or switch the
main tree when it IS the trunk).

"origin/feature" is a remote-tracking ref â€” `git worktree add <dir> origin/feature` detaches
HEAD. Create a local branch of the same short name tracking it, like `git switch feature`
does (Electron-op parity).
úBranch name is required.Frg   rÞ  rî  zget-urlTÚswitchrk   rØ   ÚrepoRootú
.worktreesr"  r+  z--trackú-bzset-branchesz--addz--set-upstream-to=)rì  r@   r  rb   rj   r;   ró  r  rC   r  rŒ   rk   rA   rú  r/   )	r  r  Ú	requestedrî  ÚfetchedÚmaybe_remoteÚmaybe_branchÚexistingr”   s	   &&       r   Ú_worktree_for_existingr%  ™  s£  € ô ! Ó*€IßÜÐ5Ó6Ð6ô ˜DÓ,€FØ€Gß�c˜YÔ&¬{¸4À;ÈyÈkÐAZ×/[Ò/[ð
 &/§_¡_°S¸!Ó%<Ñ"ˆÜ�T˜H i°Ð>×?Ò?ÔDWØ ÷E
ò E
ð +¨D�Gß-3ˆy�‰˜s AÓ& qÖ)¸€Hß�h¤/°$Ó"7Ô7Ü��x Ð*Ô+Ø˜˜h¨°*¸dÐCÐCÜœŸ™Ÿ™ d¨L¼(À8Ó:LÓMÓN€Fßð ×HÐHÔ0°¸xÓHˆÜ��z 5¨)°T¸8ÈYÐWÓXÐYZÕ[Ð_`Ô`ô
 �D˜: u¨d°HÀiÐPÔQßÜ�T˜H n°g¸vÐPÔQÜ�T˜HÐ(:¸9¸+Ð&FÈÐQÔRøä��z 5¨&Ð;Ô<Ø�F˜H h°
¸DÐAÐAr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r   r   Úoptionsr   r   r   )r   s   "r   r   r   Ì  s&   € ÷ %@ñ %@�cð %@ Dð %@¨Tñ %@r   c                ó`  € \        V 4       \        V 4      pT;'       g    / pVP                  R 4      '       d9   \        W!R ,          4      pVP                  R4      V8w  d   ^ RIHp V! V4       V# \        VP                  R4      ;'       g(    R\        P                  ! ^4      P                  4        24      p\        VP                  R4      ;'       g    R4      ;'       g    RV 2p\        \        P                  P                  VRV4      4      pR	R
RWg.pVP                  R4      '       d‚   \        VR,          4      p	V	P                  R4      '       dH   V	\!        R4      R p
\#        VRRV
.4      ^ ,          ^ 8X  d   \%        VRV
4       VP'                  R4       VP'                  V	4       \#        W(4      w  r¼pV^ 8w  dR   RT;'       g    RP)                  4       9  d$   \+        VP-                  4       ;'       g    R4      h\/        VR	R
Wv.4       ^ RIHp V! V4       RVRVRV/# )ÚexistingBranchrk   )Úrecord_worktree_repor  zwork-rØ   r*   zhermes/r  r"  r+  r  rì   rý  Nzcheck-ref-formatrÐ   rc  z
--no-trackzalready existszgit worktree add failedr  )r
  rã  rþ   r%  Úhermes_cli.worktree_registryr*  rú  rŒ   ÚurandomÚhexrì  r  rk   rA   r   rä   r€   r/   ró  rÿ   r§  r@   r:   rC   )r   r'  r  Úresultr*  rù  rØ   r”   r&   rì   Úremote_branchr4   r6   rB   s   &&            r   Úworktree_addr0  Ì  sÞ  € Ü�ÔÜ�c‹?€DØ�mˆm˜€GØ‡{�{Ð#×$Ò$Ü'¨Ð6FÕ.GÓHˆØ�:‰:�fÓ Ô%ÝIÙ  Ô&Øˆä�G—K‘K Ó'×HÐH¨U´2·:²:¸a³=×3DÑ3DÓ3FÐ2GÐ+HÓI€DÜ˜gŸk™k¨(Ó3×9Ð9°rÓ:×NÐNÀÈÀvÐ>N€FÜœŸ™Ÿ™ d¨L¸$Ó?Ó@€FØ˜˜t VÐ4€DØ‡{�{�6×ÒÜ�7˜6•?Ó#ˆð �?‰?˜9×%Ò%Ø ¤ Y£ Ð1ˆMô �DÐ-¨z¸=ÐIÓJÈ1ÕMÐQRÔRÜ# D¨(°MÔBð �K‰K˜Ô%Ø�‰�DÔÜ˜Ó#�L€DˆSØˆq„yØ C§I I¨2×#4Ñ#4Ó#6Ô6Ü˜sŸy™y›{×GÐGÐ.GÓHÐHÜ��z 5¨&Ð9Ô:ÝAÙ˜ÔØ�F˜H f¨j¸$Ð?Ð?r   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r   r   Úworktree_pathÚforcerE   r   r   r   )r   s   "r   r   r   ô  s(   € ÷ &ñ &˜ð &¨Sð &¸ð &À$ñ &r   c                óV   € \        \        V 4      R R.V'       d   R.M. OVN4       RV/# )r"  Úremovez--forcer…   )rC   rã  )r   r2  r3  s   &&&r   Úworktree_remover6  ô  s2   € ÜŒJ�s‹O˜j¨(ÐcÇU°y±kÐPRÐcÐUbÐcÔdØ�}Ð%Ð%r   Úfmtz%(refname:short)c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r   r   Úpatternsr7  r   r
   r   )r   s   "r   r   r   ù  s.   € ÷ Fñ F�Cð F Cð F¨cð FÈ9ñ Fr   c               óÀ   € \        V RRV 2R.VO4      pVP                  R4       Uu. uF*  qDP                  4       '       g   K  VP                  4       NK,  	  up# u upi )z6Non-empty ``for-each-ref`` lines, newest commit first.zfor-each-refz	--format=z--sort=-committerdaterm  )r7   rj   r:   )r   r7  r9  r5   r‚   s   &$*  r   Ú
_ref_namesr;  ù  sQ   € ä
�3˜¨9°S°EÐ):Ð<SÐ_ÐV^Ð_Ó
`€CØ%(§Y¡Y¨t¤_ÓE¡_˜T¿
¹
¿ŒLˆD�J‰JŽL¡_ÑEÐEùÒEs   ¨AÁAc               ó    € V ^8„  d   QhRRRR/# rØ  r   )r   s   "r   r   r   ÿ  s   € ÷ ñ �Sð ˜Zñ r   c                ó¾  aa€ \        V R4      pV'       g   . # \        V 4       Uu/ uF$  q"R,          '       g   K  VR,          VR,          bK&  	  upo\        V 4      o\        V4      p\        V R4       Uu. uF>  pVP	                  R4      '       d   K  VP                  R^4      R	,          V9  g   K<  VNK@  	  pp. VV3R lV 4       OR V 4       O# u upi u upi )
u  Branches for the convert-a-branch picker: local heads first, then remote-tracking
refs with no local head yet (a teammate's branch without a manual checkout).

Parity with the Electron op â€” a remote gateway serves this mirror for the same desktop UI (#81724).
ú
refs/headsrØ   rk   úrefs/remotesz/HEADrg   c              3  óŒ   <"  € T F9  pR TRVS9   R\        S;'       d    VS8H  4      RRRSP                  V4      /x € K;  	  R# 5i)r  Ú
checkedOutÚ	isDefaultÚisRemoteFÚworktreePathN)rE   rþ   )r{   r  Úpath_by_branchÚtrunks   & €€r   r}   Úbranch_list.<locals>.<genexpr>  sW   øé € ð 
]ÙT[ÈDð �4˜ t¨~Ñ'=¸{ÌDÐQV×QhÐQhÐ[_ÐchÑ[hÓLiØ�u˜n¨n×.@Ñ.@ÀÓ.FõHÛT[ùs
   ƒAž&Ac              3  ó:   "  € T F  pR VRRRRRRRR/x € K  	  R# 5i)r  rA  FrB  rC  TrD  Nr   )r{   r  s   & r   r}   rG    s/   é € ð 
6Ù-4 Tð �4˜ u¨k¸5À*ÈdØ˜4õ!Û-4ùs   ‚rh   )r;  rà  r  Úsetr“   rj   )r   Úlocals_ÚtÚ	local_setr  ÚremotesrE  rF  s   &     @@r   Úbranch_listrN  ÿ  sì   ù€ ô ˜˜lÓ+€GßØˆ	Ü6CÀCÔ6HÓXÑ6H°ÈhÏKÉKÔ,�a˜•k 1 V¥9Ò,Ñ6HÑX€NÜ˜CÓ €EÜ�G“€Iô !+¨3°Ô ?ó ZÑ ?˜Ø—m‘m G×,ô Ø15·±¸CÀÓ1CÀBÕ1GÈyÑ1X÷ ˆtÑ ?€Gð Zðõ
]ÙT[ó
]ðñ
6Ù-4ó
6ð	ð ùò Yùò
Zs   ¦C»CÁ7CÂCÂ5Cc               ó$   € V ^8„  d   QhRRRRRR/# )r   r   r   rØ   r   r   r   )r   s   "r   r   r     s!   € ÷ ñ �sð  Cð ¨Dñ r   c                ób   € \        V4      pV'       g   \        R 4      h\        V RV.4       RV/# )r  r  rØ   )rì  r@   rC   )r   rØ   r”   s   && r   Úbranch_switchrQ    s5   € Ü˜fÓ%€FßÜÐ5Ó6Ð6ÜˆC�(˜FÐ#Ô$Ø�fÐÐr   c               ó    € V ^8„  d   QhRRRR/# rØ  r   )r   s   "r   r   r      s   € ÷ ñ ˜#ð  *ñ r   c                ó   € \        V RRRR7      pV'       g   . # \        V 4      ;'       g    \        V 4      pR V 4        Uu. uF/  pRTRVP                  R4      R	\	        T;'       d    W28H  4      /NK1  	  up# u upi )
z†Local heads + remote-tracking refs for the base-branch picker; the remote default
(origin/HEAD) is flagged so the UI can preselect it.r>  r?  z%%(refname:short)	%(committerdate:iso))r7  c              3  óP   "  € T F  qP                  R 4      ^ ,          x € K  	  R# 5i)ru   N)rj   rÏ  s   & r   r}   Ú#base_branch_list.<locals>.<genexpr>*  s   é € Ð;±U¨T—Z‘Z Ó% a×(Ò(³Uùs   ‚$&r  rC  rý  rB  )r;  rV   r  rä   rE   )r   r–   Údefaultr  s   &   r   Úbase_branch_listrW     sˆ   € ô �s˜L¨.Ð>fÔg€EßØˆ	ä˜3Ó×7Ð7¤?°3Ó#7€Gñ <±UÔ;óá;ˆDð 
��z 4§?¡?°9Ó#=¸{ÌDÐQX×QlÐQlÐ]aÑ]lÓLmÓnÙ;ñð ùò s   Á&A;Á*A;i   )r£   r¤   r�   ))z\s+rx   )z[^\w./-]r*   )z-{2,}rx   )z/{2,}rg   )z\.{2,}r¾   )z^[-./]+|[-./]+$r*   )XÚ__doc__Ú
__future__r   r  r…  rŒ   rP  r  r   Úcollections.abcr   Úpathlibr   Úhermes_cli._subprocess_compatr   r   r]  r�  rÒ  r�   rç   rr  rs  r  r$   r/   r7   r;   rC   rI   rP   rV   r\   rb   rq   r†   r—   r§   rª   r¹   r¿   rÇ   rÌ   ré   rô   r  r  r  r#  r'  r/  r4  r9  r<  rA  rV  r_  r^  rg  rz  r‚  r‰  r”  r¿  r¾  r�  r   r¨  r±  rË  rÖ  rà  rã  rç  rì  ró  rú  r  r
  r  r  r%  r0  r6  r;  rN  rQ  rW  r   r   r   Ú<module>r]     sË  ðñõ #ã Û Û 	Û 	Û Û Ý $Ý ç Qà€Ø€ð Ð Ø'Ð ØÐ Ø!(Ð Ø "Ð Ø$€õð5°l÷ 5õ$õ'õ
Jõõõ^õ
HõHõ
*õõõmõ	õDõ"9õ
?õ2õ"õP*õ!,õHMõ
IõKõ
Tõõ
õ
õ@õLõõ8õ"7õ÷
eõDFõõ)ð Ð ØÐ ØP€õ+õRõg÷)õ>õ,õ$.ð
Ð õ
õSõõõ
Jõ@õ
!õ0Bõf%@õP&ð
FÐ4F÷ Fõõ2÷r   