yL i5dZddlmZgdZddlZddlmZddlm Z ddl Z ddl m Z ddl mZmZddlmZdd lmZdd lmZdd lmZdd lmZmZmZdd lmZmZmZm Z m!Z!ddl"m#Z#m$Z$m%Z%er ddl&m'Z'ddlm(Z(m)Z)ddl*m+Z+ddl,m-Z-ddl.m/Z/d dZ0d!dZ1d"dZ2d#dZ3d$dZ4e!d%d&dZ5e!d'dZ5d(d)dZ5d*dZ6d+dZ7d,dZ8y)-z%General repository-related functions.) annotations) rev_parse is_git_dirtouchfind_submodule_git_dirname_to_object short_to_long deref_tag to_commitfind_worktree_git_dirN)Path)digits)BadName BadObject)Git)WorkTreeRepositoryUnsupported)Object)SymbolicReference)cygpath bin_to_hex hex_to_bin)Optional TYPE_CHECKINGUnioncastoverload) AnyGitObjectLiteralPathLike)GitCmdObjectDB)Commit TagObject) Reference)Tag)RepocLt|d5 ddd|S#1swY|SxYw)Nab)open)filenames R/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/git/repo/fun.pyrr3s) h    O Os#ctj|rRtjtj|dsdtjvrtjtj|drhtj|d}tj |xs;tj |xr$tj|jdStj tj|dr]tj tj|dr4tj tj|dr t|y) axThis is taken from the git setup.c:is_git_directory function. :raise git.exc.WorkTreeRepositoryUnsupported: If it sees a worktree directory. It's quite hacky to do that here, but at least clearly indicates that we don't support it. There is the unlikely danger to throw if we see directories which just look like a worktree dir, but are none. objectsGIT_OBJECT_DIRECTORYrefsHEADgitdir commondirgitfileF) ospisdirjoinosenvironisfileislinkreadlink startswithr)dheadrefs r+rr9s yy| IIchhq), -1G2::1U[^[d[d HHQ \ hhq&)G::g&k3::g+>+j2;;wCWCbCbciCj k JJsxx8, - 388A{34 388Ay12/2 2 c tj|}tj|jsy t |j j}|Dcgc]!}|jjd#c}D]\}}|dk(s |cS y#t$rYywxYwcc}w#t$rYywxYw)z&Search for a gitdir for this worktree.Nz: r1) r7statOSErrorS_ISREGst_moder read_text splitlinesstripsplit ValueError)dotgitstatbuflineslinekeyvalues r+r r Ps''&/ << ( V &&(335@EF4::<--d3F JCh    G    s@B+B3#&B. B3B3B3 B+*B+.B33 B?>B?ct|r|S t|5}|jj}dddj dr|dd}t j r t|}tj|sRecursively dereference a tag and return the resulting object.)objectAttributeError)tags r+r r s1  **C    J s  ct|jdk(r t|}|jdk7rtd|z|S)z?Convert the given object to a commit if possible and return it.rscommitz'Cannot convert object %r to type commit)typer rI)objs r+r r s9 xx5n xx8BSHII Jr?c |jdr tdd}d}d}d}d}t|}||kr||dvr|dz }||}|M|dk(r|jj}nI|dk(rt d t ||d|d }n(t ||d|}n|t d |j}|dz }||krf||d k(r]|jd|} | dk(rtd|z||dz| }|dk(r*t d|}|r|jdk(r t|}nn|dk(r' t t|}t|j}n|dvr*t d|}|r|jdk(r t|}nqnp|dk(rY|Jdd} t!|dz } |j#| } t'j(|t+| j,}d}ntd|d|d|r,|r*|j|k7rtd|d|j| dz}|}d} |dk7r9d}||kr.||t.vr| d zt!||z} |dz }d }nn||kr.|sd} |} t t|}|d!k(r+t|}t1| D]}|j2d}n^|d"k(r t|}| rL|j2| dz }n9|dk(r&|jdk7r |j}|||d}|}ntd#|z||kr|t ||}|}|td'|z||k7rtd(|d)|d||S#ttf$rYlwxYw#t$r} td| d} ~ wwxYw#t$$r} t%d| z| d} ~ wwxYw#t$tf$r#} t5d$|d%|t!| d&| d} ~ wwxYw)*aParse a revision string. Like :manpage:`git-rev-parse(1)`. :return: `~git.objects.base.Object` at the given revision. This may be any type of git object: * :class:`Commit ` * :class:`TagObject ` * :class:`Tree ` * :class:`Blob ` :param rev: :manpage:`git-rev-parse(1)`-compatible revision specification as string. Please see :manpage:`git-rev-parse(1)` for details. :raise gitdb.exc.BadObject: If the given revision could not be found. :raise ValueError: If `rev` couldn't be parsed. :raise IndexError: If an invalid reflog index is specified. z:/z commit by message search (regex)Nrurz^~:@r%@r#T)rfr!{}z*Missing closing brace to define type in %sr"rstree)blobz"Require Reference to access reflogz3Support for additional @{...} modes not implementedzInvalid revlog index: %ir~zInvalid output type: z ( in z )z,Could not accommodate requested object type z, got :F ~^zInvalid token: %rzInvalid revision spec 'z(' - not enough parent commits to reach ''z*Revision specifier could not be parsed: %sz!Didn't consume complete rev spec z, consumed part: )r<NotImplementedErrorrlheadrefrrrufindrIrvr rr r}rrint log_entry IndexErrorrrnr newhexsharrangeparentsr)rdrevrwr output_typestart parsed_tolrtokenend revlog_indexeentrynum found_digit_s r+rrs6 ~~d!"DEE#'C CK EI SB "* u:V # QJE E  ;ziimmC<{N4VeY],^_C(s6E{;C8SZZ0   2:#e*+((3&Cby !MPS!STTeai#.Kh&;,388u,#C.C&|S1C#C.--C ,;,388u,#C.C#L(LL# l%(%5%9#:L WMM,7E ))$ 5??0KL!  UX!YZZ ssxx;'> ]hjmjrjr!stt!GEI  C<K"*u:'(SU_4CQJE"&K "*  |S)C|ns)A++a.C)#n++cAg.C#88v%((C#ef+&  !4u!<==Q "*d {T3'  {EKLLBUXZ]^h_hZijkk J]' 3$"l-.cdjkkl"W$%?,%NOUVVWDN+ )#.VW\V]^abe^f]gghi  s['%M MM8%BNMM M5$ M00M58 NNNO 'OO )r*strreturnr)r=rrbool)rJrrz Optional[str])r=rrzOptional[PathLike])r^z'GitCmdObjectDB'r_rrzOptional[bytes]).)rd'Repo'rerrfzLiteral[False]rr)rdrrerrfz Literal[True]r&Union[AnyGitObject, SymbolicReference])F)rdrrerrfrrr)rsz'Tag'rr)rwrrz'Commit')rdrrrrr)9__doc__ __future__r__all__r7os.pathr[r4pathlibr rAstringr gitdb.excrrgit.cmdrgit.excr git.objectsrgit.refsrgit.utilrrrtypingrrrrr git.typesrrrgit.dbr r!r"git.refs.referencer# git.refs.tagr$ror&rrr rr rr r rrbr?r+rs,"   (1&44BA55%-,   .&6   b b u u79tCr?