o 7]h@sddlZddlZddlZddlZddlmZddlmZmZm Z m Z m Z m Z ddl mZddlmZddlmZeeZejdededfd d Zejded fd d ZGdd d ZdS)N) TracebackType)DictIteratorOptionalSetTypeUnion)Link)InstallRequirement) TempDirectorychangesreturnc kstj}t}i}|D]\}}z||||<Wn ty&|||<Ynw|||<q z"dVW|D]\}}||urA||=q5t|tsHJ|||<q5dS|D]\}}||ur_||=qSt|tsfJ|||<qSwN)osenvironobjectitemsKeyError isinstancestr)r targetnon_existent_marker saved_valuesname new_valueoriginal_valuer?/usr/lib/python3/dist-packages/pip/_internal/req/req_tracker.pyupdate_env_context_managers0     rRequirementTrackerc cstjd}tC}|dur'|tddj}|t|dt d|t | }|VWdn1s9wYWddSWddS1sQwYdS)NPIP_REQ_TRACKERz req-tracker)kind)r z Initialized build tracking at %s) rrget contextlib ExitStack enter_contextr pathrloggerdebugr)rootctxtrackerrrrget_requirement_tracker)s    "r,c@seZdZdeddfddZdddZdeeed eed ee ddfd d Z d e defddZ de ddfddZde ddfddZdddZejde dedfddZdS)rr)r NcCs ||_t|_td|jdS)NzCreated build tracker: %s)_rootset_entriesr'r()selfr)rrr__init__7szRequirementTracker.__init__cCstd|j|S)NzEntered build tracker: %s)r'r(r-)r0rrr __enter__<szRequirementTracker.__enter__exc_typeexc_valexc_tbcCs |dSr)cleanup)r0r3r4r5rrr__exit__@s zRequirementTracker.__exit__linkcCs$t|j}tj|j|Sr) hashlibsha224url_without_fragmentencode hexdigestrr&joinr-)r0r8hashedrrr _entry_pathHszRequirementTracker._entry_pathreqcCs|jsJ||j}zt| }|}Wdn1swYWn ty.Yn wd|j|}t|||jvsAJt|ddd}|t |Wdn1sZwY|j |t d||j dS)z,Add an InstallRequirement to build tracking.Nz{} is already being built: {}wzutf-8)encodingzAdded %s to build tracker %r)r8r@openreadFileNotFoundErrorformat LookupErrorr/writeraddr'r(r-)r0rA entry_pathfpcontentsmessagerrrrJLs$      zRequirementTracker.addcCs<|jsJt||j|j|td||jdS)z1Remove an InstallRequirement from build tracking.z Removed %s from build tracker %rN) r8runlinkr@r/remover'r(r-r0rArrrrPhs  zRequirementTracker.removecCs,t|jD]}||qtd|jdS)NzRemoved build tracker: %r)r.r/rPr'r(r-rQrrrr6rs zRequirementTracker.cleanupccs ||dV||dSr)rJrPrQrrrtrackxs zRequirementTracker.track)r r)r N)__name__ __module__ __qualname__rr1r2rr BaseExceptionrr7r r@r rJrPr6r#contextmanagerrrRrrrrr6s$    )r#r9loggingrtypesrtypingrrrrrrpip._internal.models.linkr pip._internal.req.req_installr pip._internal.utils.temp_dirr getLoggerrSr'rWrrr,rrrrrs