Ë
    @çiõ  ã                   ó`  — d dl m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mZ ddlmZ ddlmZ ddlmZ  ej&                  e«      Z G d„ d	e«      Zd
„ Zdedefd„Zd„ Z ed«      fdefd„Zdedefd„Zdedefd„Zedefd„«       Zdedefd„Z e
j@                  de!e«      Z"de"de"fd„Z#y)é    )ÚcontextmanagerN)ÚPathé   )ÚDecoratedMain)Úfatal)ÚXPc                   ó   — e Zd Zy)ÚCommandErrorN)Ú__name__Ú
__module__Ú__qualname__© ó    úb/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/dora/git_save.pyr
   r
      s   „ Ør   r
   c                 ór  — t        j                  | ft         j                  t         j                  dœ|¤Ž}|j                  rOdj                  d„ | D «       «      }t        d|› d|j                  › d�|j                  j                  «       z   «      ‚|j                  j                  «       j                  «       S )N)ÚstdoutÚstderrÚ c              3   óF   K  — | ]  }t        j                  |«      –— Œ y ­w)N)ÚshlexÚquote)Ú.0Úcs     r   Ú	<genexpr>zrun_command.<locals>.<genexpr>   s   è ø€ Ð?±w°!œuŸ{™{¨1Ÿ~±wùs   ‚!zCommand z	 failed (z): 
)
ÚspÚrunÚPIPEÚSTDOUTÚ
returncodeÚjoinr
   r   ÚdecodeÚstrip)ÚcommandÚkwargsÚprocÚcommand_strs       r   Úrun_commandr'      s“   € Ü�6‰6�'ÐF¤"§'¡'´"·)±)ÑF¸vÑF€DØ‡‚Ø—h‘hÑ?±wÓ?Ó?ˆÜØ�{�m 9¨T¯_©_Ð,=¸UÐCÀdÇkÁk×FXÑFXÓFZÑZó\ð 	\à�;‰;×ÑÓ×%Ñ%Ó'Ð'r   ÚrootÚmainc                 ó  — t        g d¢«      }g }|j                  j                  }|€|j                  dz   }t        j
                  j                  |«      }d }|�;|j                  €J ‚t        |j                  «      j                  «       j                  }|j                  d«      D ]®  }|sŒt        j                  |«      }g }	t        |«      dk(  r|	j                  |d   «       n't        |«      dk(  r|d   dk(  sJ ‚|	|d   |d   gz  }	n	 d	}
|	D ]-  }|€d
}
 n'| |z  j                  «       }	 |j                  |«       Œ/ |
rŒž|j                  |«       Œ° |r dj#                  |«      }t%        d|› �«       y y # t         $ r d
}
Y Œvw xY w)N)ÚgitÚstatusz--porcelainz.gridsÚ
é   r   é   é   z->TFzRRepository is not clean! The following files should be commited or git ignored: 
 )r'   ÚdoraÚgrid_packageÚpackageÚ	importlibÚutilÚ	find_specÚoriginr   ÚresolveÚparentÚsplitr   ÚlenÚappendÚrelative_toÚ
ValueErrorr    r   )r(   r)   ÚoutÚfilteredÚ	grid_nameÚspecÚ	grid_pathÚlineÚpartsÚpathsÚ
line_cleanÚpathÚrpathÚfiless                 r   Úcheck_repo_cleanrK   %   s˜  € Ü
Ò6Ó
7€CØ€Hð —	‘	×&Ñ&€IØÐØ—L‘L 8Ñ+ˆ	Ü�>‰>×#Ñ# IÓ.€DØ#'€IØÐØ�{‰{Ð&Ð&Ð&Ü˜Ÿ™Ó%×-Ñ-Ó/×6Ñ6ˆ	Ø—	‘	˜$–ˆÙØÜ—‘˜DÓ!ˆØ ˆÜˆu‹:˜Š?Ø�L‰L˜˜q™Õ"Ü�‹Z˜1Š_Ø˜‘8˜tÒ#Ð#Ð#Ø�e˜A‘h  a¡Ð)Ñ)‰Eà"Øˆ
ÛˆDØÐ Ø"�
ÙØ˜D‘[×)Ñ)Ó+ˆEð#Ø×!Ñ! )Õ,ð ò Ø�O‰O˜DÕ!ð/  ñ0 Ø—	‘	˜(Ó#ˆÜð $Ø$) 7ð,õ 	-ð øô	 ò #Ø"’
ð#ús   Ä.E:Å:FÆFc                  óJ   — t        t        g d¢«      «      j                  «       S )N)r+   z	rev-parsez--show-toplevel)r   r'   r8   r   r   r   Úget_git_rootrM   Q   s   € Ü”ÒCÓDÓE×MÑMÓOÐOr   Ú.Úrepoc                 ó    — t        g d¢| ¬«      S )N)r+   Úlogz-1z--format=%H)Úcwd)r'   )rO   s    r   Úget_git_commitrS   U   s   € ÜÒ:ÀÔEÐEr   ÚsourceÚtargetc           	      óÞ   — |j                   |j                  dz   z  }t        ddddt        | «      z   t        |«      g«       t	        |«      }|j                   |z  }|j                  |«       |S )Nz.tmpr+   Úclonez	--depth=1zfile://)r9   Únamer'   ÚstrrS   Úrename)rT   rU   Ú
tmp_targetÚactual_commitÚactual_targets        r   Úshallow_cloner^   Y   sg   € Ø—‘ &§+¡+°Ñ"6Ñ7€JÜ�˜ ¨i¼#¸f»+Ñ.EÄsÈ:ÃÐWÔXô
 # :Ó.€MØ—M‘M MÑ1€MØ×Ñ�mÔ$ØÐr   Úreturnc                 ó,  — t        «       }t        «       }t        || «       | j                  j                  | j                  j
                  z  }|j                  dd¬«       ||z  }|j                  «       st        ||«      }|j                  «       sJ ‚|S )z,Return a fresh clone in side the given path.T)ÚparentsÚexist_ok)	rM   rS   rK   r1   ÚdirÚ_codesÚmkdirÚexistsr^   )r)   rT   ÚcommitÚcodesrU   s        r   Úget_new_cloneri   f   sx   € ä‹^€FÜÓ€FÜ�V˜TÔ"Ø�I‰I�M‰M˜DŸI™I×,Ñ,Ñ,€EØ	‡K�K˜ t€KÔ,Ø�V‰^€FØ�=‰=Œ?Ü˜v vÓ.ˆØ�=‰=Œ?Ðˆ?Ø€Mr   rW   c              #   óˆ  K  — t        d«      j                  «       }t        «       }|j                  |«      }t	        |«      t
        j                  d<   t        j                  | |z  «       	 d–— t        j                  |«       t
        j                  d= y# t        j                  |«       t
        j                  d= w xY w­w)zcContext manager that temporarily relocates to a clean clone of the
    current git repository.
    rN   Ú_DORA_ORIGINAL_DIRN)r   r8   rM   r=   rY   ÚosÚenvironÚchdir)rW   rR   r(   Úrelative_paths       r   Úenter_clonerp   t   sŽ   è ø€ ô
 ˆs‹)×
Ñ
Ó
€CÜ‹>€DØ—O‘O DÓ)€Mä'*¨3£x„B‡J�JÐ#Ñ$Ü‡H�HˆU�]Ñ"Ô#ð-Ûä
�‰�ŒÜ�J‰JÐ+Ñ,øô 	�‰�ŒÜ�J‰JÐ+Ñ,üs   ‚A)CÁ,B Á0'CÂ(B?Â?CÚxpc                 ó0  — | j                   j                  sJ ‚| j                  }|j                  «       rQ|j	                  «       r|j                  «        n0|j                  «       r|j                  |j                  dz  «       n	 |j                  |«       y )NÚold_code)
r1   Úgit_saveÚcode_folderrf   Ú
is_symlinkÚunlinkÚis_dirrZ   r9   Ú
symlink_to)rq   rW   Úcodes      r   Úassign_cloner{   †   sg   € Ø�7‰7×ÒÐÐØ�>‰>€DØ‡{�{„}Ø�?‰?ÔØ�K‰K�MØ�[‰[Œ]Ø�K‰K˜Ÿ™ jÑ0Õ1à<Ø‡O�O�EÕr   ÚAnyPathrH   c                 óÂ  — t        | «      }t        | «      }dt        j                  vr:	 ddl}t        |j
                  j                  t        |«      «      «      } ||«      S t        t        j                  d   «      }|j                  «       r ||«      S  |||z  «      S # t        $ r3 |j                  «       s t        t        j                  «       «      |z  }Y Œ‚w xY w)an  When using `git_save`, this takes a potentially relative path
    with respect to the original execution folder and return an absolute path.
    This is required if you use relative path with respect to this original folder.

    When using both `git_save` and Hydra, two change of directory happens:
    - Dora moves to git clone
    - Hydra moves to XP folder

    Hydra provides a `to_absolute_path()` function. In order to simplify your code,
    if `git_save` was not used, and Hydra is in use, this will fallback to calling
    Hydra version, so that you only need to ever call this function to cover all cases.
    rk   r   N)Útyper   rl   rm   Úhydra.utilsÚutilsÚto_absolute_pathrY   ÚImportErrorÚis_absoluteÚgetcwd)rH   ÚklassÚ_pathÚhydraÚoriginal_cwds        r   r�   r�   –   sÃ   € ô �‹J€EÜ�‹J€EØ¤2§:¡:Ñ-ð	CÛô
 ˜Ÿ™×5Ñ5´c¸%³jÓAÓBˆEÙ�U‹|Ðô œBŸJ™JÐ';Ñ<Ó=ˆØ×ÑÔÙ˜“<Ðá˜¨Ñ-Ó.Ð.øô ò 	2Ø×$Ñ$Ô&ÜœRŸY™Y›[Ó)¨EÑ1�ùð	2ús   ªB" Â"9CÃC)$Ú
contextlibr   Úimportlib.utilr4   Úloggingrl   r   Ú
subprocessr   ÚtypingÚtpÚpathlibr   r)   r   rQ   r   rq   r   Ú	getLoggerr   ÚloggerÚ	Exceptionr
   r'   rK   rM   rS   r^   ri   rp   r{   ÚTypeVarrY   r|   r�   r   r   r   Ú<module>r”      sû   ðõ &Û Û Û 	Û Û Û Ý å Ý Ý ð 
ˆ×	Ñ	˜8Ó	$€ô	�9ô 	ò(ð)-˜4ð )- }ó )-òXPñ !% S£	ñ F˜ó Fð
˜$ð 
¨ó 
ð˜ð ¨$ó ð ð-�tò -ó ð-ð"
�Rð 
 ó 
ð ˆ"�*‰*�Y  TÓ
*€ð /˜7ð  / wô  /r   