ž 7’Re,"c@s½dZddlZddlZddlmZmZddlmZddlm Z m Z m Z m Z m Z ddgZGdd „d eƒZeƒZGd d „d eƒZd d„ZdS( u)Handles all VCS (version control) supportiN(uurlparseuurllib(ulogger(u display_pathu backup_diru find_commandurmtreeuask_path_existsuvcsuget_src_requirementcsΘ|EeZdZiZddddddgZ‡fdd†Zd d „Zed d „ƒZed d„ƒZ edd„ƒZ dd„Z dddd„Z dd„Zdd„Zdd„Z‡S(u VcsSupportusshugituhgubzrusftpusvncsRtjj|jƒttddƒr;tjj|jƒntt|ƒj ƒdS(Nu uses_fragment( uurlparseu uses_netlocuextenduschemesugetattruNoneu uses_fragmentusuperu VcsSupportu__init__(uself(u __class__(u)/tmp/pip-zej_zi-build/pip/vcs/__init__.pyu__init__suVcsSupport.__init__cCs |jjƒS(N(u _registryu__iter__(uself((u)/tmp/pip-zej_zi-build/pip/vcs/__init__.pyu__iter__suVcsSupport.__iter__cCst|jjƒƒS(N(ulistu _registryuvalues(uself((u)/tmp/pip-zej_zi-build/pip/vcs/__init__.pyubackendssuVcsSupport.backendscCsdd„|jDƒS(NcSsg|]}|j‘qS((udirname(u.0ubackend((u)/tmp/pip-zej_zi-build/pip/vcs/__init__.pyu $s u'VcsSupport.dirnames..(ubackends(uself((u)/tmp/pip-zej_zi-build/pip/vcs/__init__.pyudirnames"suVcsSupport.dirnamescCs.g}x!|jD]}|j|jƒqW|S(N(ubackendsuextenduschemes(uselfuschemesubackend((u)/tmp/pip-zej_zi-build/pip/vcs/__init__.pyu all_schemes&suVcsSupport.all_schemescCsPt|dƒs'tjd|jƒdS|j|jkrL||j|j+://, e.g. svn+http://myrepo/svn/MyApp#egg=MyAppu+iu@uN(uurluAssertionErrorusplituurlparseuurlsplituNoneursplitu urlunsplit( uselfu error_messageuurluschemeunetlocupathuqueryufragurev((u)/tmp/pip-zej_zi-build/pip/vcs/__init__.pyu get_url_revss" uVersionControl.get_url_revcCsH|jdƒj|jƒ s,td|ƒ‚|j|ƒ|j|ƒfS(uA Returns (url, revision), where both are strings u/uBad directory: %s(urstripuendswithudirnameuAssertionErroruget_urlu get_revision(uselfulocation((u)/tmp/pip-zej_zi-build/pip/vcs/__init__.pyuget_info…s,uVersionControl.get_infocCstj|ƒjdƒS(ua Normalize a URL for comparison by unquoting it and removing any trailing slash. u/(uurllibuunquoteurstrip(uselfuurl((u)/tmp/pip-zej_zi-build/pip/vcs/__init__.pyu normalize_urlŒsuVersionControl.normalize_urlcCs|j|ƒ|j|ƒkS(uV Compare two repo URLs for identity, ignoring incidental differences. (u normalize_url(uselfuurl1uurl2((u)/tmp/pip-zej_zi-build/pip/vcs/__init__.pyu compare_urls’suVersionControl.compare_urlscCs t‚dS(uΜ Takes the contents of the bundled text file that explains how to revert the stripped off version control data of the given package and returns the URL and revision of it. N(uNotImplementedError(uselfucontent((u)/tmp/pip-zej_zi-build/pip/vcs/__init__.pyuparse_vcs_bundle_file˜su$VersionControl.parse_vcs_bundle_filecCs t‚dS(ux Called when installing or updating an editable package, takes the source path of the checkout. N(uNotImplementedError(uselfudest((u)/tmp/pip-zej_zi-build/pip/vcs/__init__.pyuobtain suVersionControl.obtaincCs t‚dS(uB Switch the repo at ``dest`` to point to ``URL``. N(uNotImplemented(uselfudestuurlu rev_options((u)/tmp/pip-zej_zi-build/pip/vcs/__init__.pyuswitch§suVersionControl.switchcCs t‚dS(uO Update an already-existing repo to the given ``rev_options``. N(uNotImplementedError(uselfudestu rev_options((u)/tmp/pip-zej_zi-build/pip/vcs/__init__.pyuupdate­suVersionControl.updatec Cs@d}d}tjj|ƒr#d}tjjtjj||jƒƒrϊ|j|ƒ}|j||ƒrΘt j d|j j ƒt |ƒ|fƒt jdt |ƒ|j |fƒ|j||ƒq t jd|j|j t |ƒ|fƒd}q#t jd ||j|j fƒd}n|r<t jd |j|fƒtd |d |dƒ}|dkr¦t jd|j t |ƒ||fƒ|j|||ƒq<|dkr΅q<|dkrλt jdt |ƒƒt|ƒd}q<|dkr<t|ƒ} t jdt |ƒ| fƒtj|| ƒd}q<n|S(u­ Prepare a location to receive a checkout/clone. Return True if the location is ready for (and requires) a checkout/clone, False otherwise. u)%s in %s exists, and has correct URL (%s)uUpdating %s %s%su%s %s in %s exists with URL %su%(s)witch, (i)gnore, (w)ipe, (b)ackup usuiuwubu0Directory %s already exists, and is not a %s %s.u(i)gnore, (w)ipe, (b)ackup u+The plan is to install the %s repository %suWhat to do? %siiuSwitching %s %s to %s%su Deleting %suBacking up %s to %sTF(usuiuwub(u%(s)witch, (i)gnore, (w)ipe, (b)ackup (usuiuwub(uiuwub(u(i)gnore, (w)ipe, (b)ackup (uiuwub(uTrueuFalseuosupathuexistsujoinudirnameuget_urlu compare_urlsuloggeruinfou repo_nameutitleu display_pathunotifyuupdateuwarnunameuask_path_existsuswitchurmtreeu backup_dirushutilumove( uselfudestuurlu rev_optionsu rev_displayucheckoutupromptu existing_urluresponseudest_dir((u)/tmp/pip-zej_zi-build/pip/vcs/__init__.pyucheck_destination³sZ$                      u VersionControl.check_destinationcCs0tjj|ƒrt|ƒn|j|ƒdS(N(uosupathuexistsurmtreeuobtain(uselfulocation((u)/tmp/pip-zej_zi-build/pip/vcs/__init__.pyuunpackνs uVersionControl.unpackcCs t‚dS(N(uNotImplementedError(uselfudistulocationu find_tags((u)/tmp/pip-zej_zi-build/pip/vcs/__init__.pyuget_src_requirementςsu"VersionControl.get_src_requirementNF(u__name__u __module__u __qualname__unameudirnameuNoneu__init__u_filteru_is_local_repositoryupropertyucmdu get_url_revuget_infou normalize_urlu compare_urlsuparse_vcs_bundle_fileuobtainuswitchuupdateucheck_destinationuunpackuFalseuget_src_requirement(u __locals__((u __class__u)/tmp/pip-zej_zi-build/pip/vcs/__init__.pyuVersionControlVs"           : uVersionControlcCsFtj|ƒ}|r+|ƒj|||ƒStjd|ƒ|jƒS(Nutcannot determine version of editable source in %s (is not SVN checkout, Git clone, Mercurial clone or Bazaar branch)(uvcsuget_backend_from_locationuget_src_requirementuloggeruwarnuas_requirement(udistulocationu find_tagsuversion_control((u)/tmp/pip-zej_zi-build/pip/vcs/__init__.pyuget_src_requirementφs (u__doc__uosushutilupip.backwardcompatuurlparseuurllibupip.loguloggerupip.utilu display_pathu backup_diru find_commandurmtreeuask_path_existsu__all__uobjectu VcsSupportuvcsuVersionControluget_src_requirement(((u)/tmp/pip-zej_zi-build/pip/vcs/__init__.pyus  ( D