RddlmZddlZddlZddlZddlZddlZddl Zddl m Z ddl m Z ddlmZmZddlmZmZmZddlmZddlmZmZmZmZmZmZmZejj Z ejj!Z!ej"e#Z$ej%d Z&ej%d Z'ej%d ej(Z)ddZ*GddeZ+ej,e+dS)) annotationsN)replace)Any) BadCommandInstallationError) HiddenText display_pathhide_url) make_command)AuthInfoRemoteNotFoundErrorRemoteNotValidError RevOptionsVersionControl(find_path_to_project_root_from_repo_rootvcsz(^git version (\d+)\.(\d+)(?:\.(\d+))?.*$z^[a-fA-F0-9]{40}$a/^ # Optional user, e.g. 'git@' (\w+@)? # Server, e.g. 'github.com'. ([^/:]+): # The server-side path. e.g. 'user/project.git'. Must start with an # alphanumeric character so as not to be confusable with a Windows paths # like 'C:/foo/bar' or 'C:\foo\bar'. (\w[^:]*) $shastrreturnboolcPtt|SN)r HASH_REGEXmatch)rs u/builddir/build/BUILD/imunify360-venv-2.6.1/opt/imunify360/venv/lib/python3.11/site-packages/pip/_internal/vcs/git.pylooks_like_hashr:s    %% & &&ceZdZdZdZdZdZdZdZe d5d Z e d6fd Z d7dZ d8dZe d9dZe d:dZe d;dZe dd%Z d?d>d'Z d?d>d(Ze d@d)Ze dAd*Ze dBd+Ze dCdDd-Ze d9d.Ze dEfd0 Ze d?dFd1Ze d9fd2 Ze dGd4ZxZ S)HGitgitz.gitclone)zgit+httpz git+httpszgit+sshzgit+gitzgit+file)GIT_DIR GIT_WORK_TREEHEADrevrr list[str]c|gSrr%s rget_base_rev_argszGit.get_base_rev_argsNs u rargsrkwargsctjdr%|di}d|d<d|d<||d<tj|i|S)N PIP_NO_INPUT extra_environ0GIT_TERMINAL_PROMPTzssh -oBatchMode=yesGIT_SSH_COMMAND)osenvirongetsuper run_command)clsr+r,r/ __class__s rr7zGit.run_commandRsh :>>. ) ) 4"JJ;;M36M/ 0/DM+ ,&3F? #"uww"D3F333rurldestrc|t|\}}|jsdS|||jsdSt |||jd}| S)NFr)get_url_rev_optionsr r%is_commit_id_equalrget_revision_sha)selfr:r;_ rev_optionsis_tag_or_branchs ris_immutable_rev_checkoutzGit.is_immutable_rev_checkout[s11(3--@@; 5&&t[_== 5  5 5dKO L LQ OPP###rtuple[int, ...]c0|dgddd}t|}|std|dSt |dt |d fS) Nversionz git versionFT) command_desc show_stdout stdout_onlyzCan't parse git version: %sr()r7GIT_VERSION_REGEXrloggerwarningintgroup)r@rGrs rget_git_versionzGit.get_git_versionis"" K& #   "''00  NN8' B B B2EKKNN##SQ%8%899rlocation str | Nonecgd}||ddd|}|}|dr|tddSdS)zl Return the current branch, or None if HEAD isn't at a branch (e.g. detached HEAD). )z symbolic-ref-qr$rKFTextra_ok_returncodesrIrJcwdz refs/heads/N)r7strip startswithlen)r8rSr+outputrefs rget_current_branchzGit.get_current_branchvsw.-- !% !  llnn >>- ( ( -s=))++, ,trtuple[str | None, bool]c|d|g|ddd}i}|dD][}|d}|s |dd \}}n #t$rt d |wxYw|||<\d |}d |} ||} | | dfS|| } | dfS)z Return (sha_or_none, is_branch), where sha_or_none is a commit hash if the revision names a remote branch or tag, otherwise None. Args: dest: the repository directory. rev: the revision name. zshow-refFTignore)rZrIrJ on_returncode   rL)maxsplitzunexpected show-ref line: zrefs/remotes/origin/z refs/tags/)r7r[splitrstrip ValueErrorr5) r8r;r%r^refslineref_sharef_name branch_reftag_refrs rr?zGit.get_revision_shas6  " !  LLNN((.. % %D;;t$$D  H$(JJsQJ$?$?! H H H!!Fd!F!FGGG H %DNN1C11 $s$$hhz"" ?; hhwU|s !A<<Bc|drdSt|sdS|||rdSdS)a$ Return true if rev is a ref or is a commit that we don't have locally. Branches and tags are not considered in this method because they are assumed to be always available locally (which is a normal outcome of ``git clone`` and ``git fetch --tags``). zrefs/TF)r\r has_commit)r8r;r%s r _should_fetchzGit._should_fetchsR >>' " " 4s## 5 >>$ $ $ 5trrrBrc |j}|J|||\}}|,||}t||r|nd}|St |st d||||s|S|tdd|| || |d}||}|S) z Resolve a revision to a new RevOptions object with the SHA1 of the branch, tag, or ref if found. Args: rev_options: a RevOptions object. N) branch_namez:Did not find branch or tag '%s', assuming revision or ref.fetchrVrZ FETCH_HEADr)) arg_revr?make_newrrrNinfortr7r to_args get_revision)r8r;r:rBr%r is_branchs rresolve_revisionzGit.resolve_revisions(!--dC88Y ?%..s33K!+9zGit.is_commit_id_equals* 5%%--r verbosityrPNonec|}td||t||dkrd}n |dkrd}nd}|dkr&|t dd g|||Rn$|t dg|||R|jr||||}t|d d}t d |||V| ||js:t d d | }|||ng| ||kr#d|} d d|d| g}|||n*||} || }td||j|||dS)NzCloning %s%s to %sr)z--quietrKr()z --verbosez --progress)rLr!z--filter=blob:nonervzRev options %s, branch_name %scheckoutrVrxzorigin/z-bz--trackzResolved %s to commit %sr) to_displayrNr|r rRr7r r%rgetattrdebugr>r}r`r~r{update_submodules) r@r;r:rBr rev_displayflagsrvcmd_args track_branchrs r fetch_newz Git.fetch_news\",,..  (#{L>%1EE !^^EE/E    ! !W , ,   (          \'EEE3EEEE F F F ? 4//c;GGK!+}dCCK LL9; T T T"..t[_EE9+"#++--  H $$X4$888((..+== 766    t 444##D))C%..s33K .[_EEE ty99999rrc*|tdd||g}|dkr|dtdg||R}||||||dS)Nconfigzremote.origin.urlrxrrVrr)r7r appendr}rr@r;r:rBr extra_flagsrs rswitchz Git.switchPs  #6 < <     >>   t $ $ $ P[P+:M:M:O:OPPP t,,, ty99999rcg}|dkr|d|dkr|ddg||n|dg||||||}t ddg||R}|||||| dS) NrrV)rK rwz--tagsrxresetz--hardr)rrRr7rr r}rrs rupdatez Git.updatefs >>   t $ $ $    ! !V + +   gx>+>D  I I I I   g4 4$  ? ? ?++D#{CC         ! !     t,,, ty99999rc`|gdddd|}|} |d}n#t$rtwxYw|D]}|dr|}n|dd }||S) z Return URL of the first remote encountered. Raises RemoteNotFoundError if the repository does not have a remote url configured. )rz --get-regexpzremote\..*\.urlrWFTrXrzremote.origin.url rgrK)r7 splitlines IndexErrorr r\ri_git_remote_to_pip_urlr[)r8rSstdoutremotes found_remoteremoter:s rget_remote_urlzGit.get_remote_urls : : :!% !  ##%% &"1:LL & & &% % &  F  !566 %    %%a())#))++666s ;A c:tjd|r|Stj|r&t j|St|}|r| dSt|)a8 Convert a remote url from what git uses to what pip accepts. There are 3 legal forms **url** may take: 1. A fully qualified url: ssh://git@example.com/foo/bar.git 2. A local project.git folder: /path/to/bare/repository.git 3. SCP shorthand for form 1: git@example.com:foo/bar.git Form 1 is output as-is. Form 2 must be converted to URI and form 3 must be converted to form 1. See the corresponding test test_git_remote_url_to_pip() for examples of sample inputs/outputs. z\w+://z ssh://\1\2/\3) rerr3pathexistspathlibPurePathas_uri SCP_REGEXexpandr)r: scp_matchs rrzGit._git_remote_to_pip_urls" 8Is # # J 7>>#   2#C((//11 1OOC((  6##$455 5!#&&&rch |dddd|zg|ddS#t$rYdSwxYw)zU Check if rev is a commit that is available in the local repository. rev-parserVz--verifyzsha^F)rZlog_failed_cmdT)r7r)r8rSr%s rrszGit.has_commitsc  OOdJ =$    4!   55 s # 11Nch|d}|d|gdd|}|S)Nr$rFTrIrJrZ)r7r[)r8rSr% current_revs rr~zGit.get_revisionsI ;Coo #  &    """rct|ddgdd|}tj|s tj||}tjtj|d}t||S)z Return the path to Python project root, relative to the repo root. Return None if the project root is in the repo root. rz --git-dirFTrz..)r7r[r3risabsjoinabspathr)r8rSgit_dir repo_roots rget_subdirectoryzGit.get_subdirectorys// + & "  %''  w}}W%% 6gll8W55GGOOBGLL$$?$?@@ 7)LLLr tuple[str, str | None, AuthInfo]ct|\}}}}}|dr|dt|d }|tj|dddz}|ddz} |d| t|| d||||fz}d|vrXd|vsJ|d d }t |\}} } |d d }n%t |\}} } || | fS) a9 Prefixes stub URLs like 'user@hostname:user/repo.git' with 'ssh://'. That's required because although they use SSH they sometimes don't work with a ssh:// scheme (e.g. GitHub). But we need a scheme for parsing. Hence we remove it again afterwards and return it as a stub. fileN/\+rKz://zfile:zgit+z git+ssh://zssh://) urlsplitendswithr]lstripurllibrequest url2pathnamerfind urlunsplitr6get_url_rev_and_auth) r8r:schemenetlocrqueryfragmentinitial_slashesnewpath after_plusr% user_passr9s rrzGit.get_url_rev_and_authso19 -eX ??6 " " "#;c$++c*:*:&;&;%;#;">s"C"C Ci++h++CC"'''">">s"C"C CiC""rcgd}|dkr|dtjtj|dsdS|||dS)N) submodulerz--initz --recursiverrVz .gitmodulesrx)rr3rrrr7)r8rSrargvs rrzGit.update_submoduless~??? >> KK   w~~bgll8]CCDD  F        rc`t|}|r|S |ddg|dddd}n8#t$rtd|YdSt $rYdSwxYwtj | dS) Nrz--show-toplevelFTraise)rZrIrJrdrzKcould not determine if %s is under git control because git is not availablez ) r6get_repository_rootr7rrNrrr3rnormpathrj)r8rSlocrr9s rrzGit.get_repository_rootsgg))(33  J /0! %$  AA    LL/    44    44 w 0 0111sA%A;. A;:A;repo_urlcdS)zEIn either https or ssh form, requirements must be prefixed with git+.Tr()rs rshould_add_vcs_url_prefixzGit.should_add_vcs_url_prefix5s tr)r%rrr&)r+rr,rrr)r:rr;rrr)rrE)rSrrrT)r;rr%rrra)r;rr%rrr)r;rr:rrBrrr)r;rrrTrr) r;rr:rrBrrrPrr)r)rSrrr)r:rrr)rSrr%rrrr)rSrr%rTrr)r:rrr)rSrrrPrr)rrrr)!__name__ __module__ __qualname__rdirname repo_nameschemes unset_environdefault_arg_rev staticmethodr* classmethodr7rDrRr`r?rtrr>rrrrrrsr~rrrrr __classcell__)r9s@rrr>s DGIG1MO\44444[4 $ $ $ $ : : : :[0+++[+Z[,+++[+Z . . .[ .=:=:=:=:H :::::6 :::::<777[7:'''\'<   [  # # # #[ #MMM[M"#####[#<     [  22222[20\rr)rrrr)- __future__rloggingos.pathr3rr urllib.parserurllib.request dataclassesrtypingrpip._internal.exceptionsrrpip._internal.utils.miscrr r pip._internal.utils.subprocessr pip._internal.vcs.versioncontrolr r rrrrrparserr getLoggerrrNcompilerMrVERBOSErrrregisterr(rrrs"""""" BBBBBBBBGGGGGGGGGG777777 <  \ $   8 $ $BJ RZ+ , ,  BJ  J   ''''zzzzz.zzzz  Sr