Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
§

iµµh¿­ãód—dZddlZddlZddlZddlZddlZddlmZddlm	Z	m
Z
mZmZm
Z
mZ	ddlmZn#e$r	ddlmZYnwxYwddlZddlZddlmZddlmZdd	lmZmZmZmZmZmZm Z dd
l!m"Z"ddl#m$Z$m%Z%m&Z&ddl'm(Z(m)Z)m*Z*dd
l+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImZmJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSddlTmUZUmVZVmWZWddlXmYZYmZZZej[e\¦«Z]Gd„d¦«Z^Gd„de¦«Z_Gd„de^¦«Z`Gd„de^¦«ZaGd„d¦«ZbGd„deb¦«ZcGd„dec¦«Zdd„Zede(fd „Zfde(fd!„Zgde(fd"„ZhGd#„d$¦«Zie<e;dfZjGd%„d&¦«ZkGd'„d(¦«ZlGd)„d*¦«ZmGd+„d,ec¦«ZnGd-„d.eb¦«Zoedeneod/œZpGd0„d1ejq¦«ZrGd2„d3ejs¦«Ztejufd4„Zvejudejwejxfd5„Zyd6„Zzd7„Z{d8„Z|e\d9krev¦«dSdS):aêGit smart network protocol server implementation.

For more detailed implementation on the network protocol, see the
Documentation/technical directory in the cgit distribution, and in particular:

* Documentation/technical/protocol-capabilities.txt
* Documentation/technical/pack-protocol.txt

Currently supported capabilities:

 * include-tag
 * thin-pack
 * multi_ack_detailed
 * multi_ack
 * side-band-64k
 * ofs-delta
 * no-progress
 * report-status
 * delete-refs
 * shallow
 * symref
éN)Úpartial)ÚDictÚIterableÚListÚOptionalÚSetÚTuple)ÚProtocol)Ú	log_utilsé)Ú
tar_stream)ÚApplyDeltaErrorÚChecksumMismatchÚGitProtocolErrorÚ	HookErrorÚNotGitRepositoryÚObjectFormatExceptionÚUnexpectedCommandError)Úpeel_sha)ÚCommitÚObjectIDÚvalid_hexsha)ÚObjectContainerÚPackedObjectContainerÚwrite_pack_from_container))ÚCAPABILITIES_REFÚCAPABILITY_AGENTÚCAPABILITY_DELETE_REFSÚCAPABILITY_INCLUDE_TAGÚCAPABILITY_MULTI_ACKÚCAPABILITY_MULTI_ACK_DETAILEDÚCAPABILITY_NO_DONEÚCAPABILITY_NO_PROGRESSÚCAPABILITY_OFS_DELTAÚCAPABILITY_QUIETÚCAPABILITY_REPORT_STATUSÚCAPABILITY_SHALLOWÚCAPABILITY_SIDE_BAND_64KÚCAPABILITY_THIN_PACKÚCOMMAND_DEEPENÚCOMMAND_DONEÚCOMMAND_HAVEÚCOMMAND_SHALLOWÚCOMMAND_UNSHALLOWÚCOMMAND_WANTÚ	MULTI_ACKÚMULTI_ACK_DETAILEDÚNAK_LINEÚSIDE_BAND_CHANNEL_DATAÚSIDE_BAND_CHANNEL_FATALÚSIDE_BAND_CHANNEL_PROGRESSÚ
SINGLE_ACKÚTCP_GIT_PORTÚZERO_SHAÚBufferedPktLineWriterr
ÚReceivableProtocolÚack_typeÚcapability_agentÚextract_capabilitiesÚextract_want_line_capabilitiesÚformat_ack_lineÚformat_ref_lineÚformat_shallow_lineÚformat_unshallow_lineÚsymref_capabilities)ÚPEELED_TAG_SUFFIXÚ
RefsContainerÚwrite_info_refs)ÚBaseRepoÚRepocó—eZdZdZd„ZdS)ÚBackendz2A backend for the Git smart server implementation.có*—t|j¦«‚)zÖOpen the repository at a path.

        Args:
          path: Path to the repository
        Raises:
          NotGitRepository: no git repository was found at path
        Returns: Instance of BackendRepo
        )ÚNotImplementedErrorÚopen_repository)ÚselfÚpaths  ú9/usr/local/lib/python3.11/site-packages/dulwich/server.pyrMzBackend.open_repository€s€õ" $Ô"6Ñ7Ô7Ð7óN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rM©rQrPrJrJ}s)€€€€€Ø<Ð<ð	8ð	8ð	8ð	8ð	8rQrJcój—eZdZUdZeed<eed<deeeffd„Z	dede
efd„Z	d
d	„ZdS)ÚBackendRepoz‹Repository abstraction used by the Git server.

    The methods required here are a subset of those provided by
    dulwich.repo.Repo.
    Úobject_storeÚrefsÚreturncó—t‚)zRGet all the refs in the repository.

        Returns: dict of name -> sha
        ©rL©rNs rPÚget_refszBackendRepo.get_refs–s
€õ
"Ð!rQÚnamecó—dS)a›Return the cached peeled value of a ref, if available.

        Args:
          name: Name of the ref to peel
        Returns: The peeled value of the ref. If the ref is known not point to
            a tag, this will be the SHA the ref refers to. If no cached
            information about a tag is available, this method may return None,
            but it should attempt to peel the tag if possible.
        NrV)rNr`s  rPÚ
get_peeledzBackendRepo.get_peeleds	€ðˆtrQNcó—t‚)aYield the objects required for a list of commits.

        Args:
          progress: is a callback to send progress messages to the client
          get_tagged: Function that returns a dict of pointed-to sha ->
            tag sha for including tags.
        r])rNÚdetermine_wantsÚgraph_walkerÚprogressÚ
get_taggeds     rPÚfind_missing_objectsz BackendRepo.find_missing_objects©s
€õ"Ð!rQ©N)
rRrSrTrUrÚ__annotations__rErÚbytesr_rrbrhrVrQrPrXrXŒsŸ€€€€€€ððð(Ð'Ð'Ñ'Ø
ÐÐÑð"˜$˜u e˜|Ô,ð"ð"ð"ð"ð
˜uð
¨°%¬ð
ð
ð
ð
ðCGð
"ð
"ð
"ð
"ð
"ð
"rQrXcó*—eZdZdZdd„Zdedefd„ZdS)ÚDictBackendz?Trivial backend that looks up Git repositories in a dictionary.r[Ncó—||_dSri)Úrepos)rNros  rPÚ__init__zDictBackend.__init__¹s
€ØˆŒ
ˆ
ˆ
rQrOc
óʗt d|¦«	|j|S#t$r.}t	djdit
|¬¦«¤Ž¦«|‚d}~wwxYw)NzOpening repository at %sz%No git repository was found at {path})rOrV)ÚloggerÚdebugroÚKeyErrorrÚformatÚdict)rNrOÚexcs   rPrMzDictBackend.open_repository¼s|€ÝŠÐ/°Ñ6Ô6Ð6ð	Ø”:˜dÔ#Ð#øÝð	ð	ð	Ý"Ø>Ð7Ô>ÐQÐQÅÈ4ÀÁÄÐQÐQñôàð
øøøøð	øøøs*ª
A"´)AÁA"©r[N)rRrSrTrUrpÚstrrGrMrVrQrPrmrm¶sP€€€€€ØIÐIððððð Cð¨HððððððrQrmcó8‡—eZdZdZejfdˆfd„
Zd„ZˆxZS)ÚFileSystemBackendzDSimple backend looking up Git repositories in the local file system.r[Ncó•—t¦« ¦«tj |¦«tjz tjdztj¦«|_dS)Né)ÚsuperrpÚosrOÚabspathÚsepÚreplaceÚroot)rNrƒÚ	__class__s  €rPrpzFileSystemBackend.__init__ÉsQø€Ý
‰Œ×ÒÑÔÐÝ”W—_’_ TÑ*Ô*­R¬VÑ3×<Ò<½R¼VÀa¹ZÍÌÑPÔPˆŒ	ˆ	ˆ	rQcóØ—t d|¦«tj tj |j|¦«¦«tjz}tj |¦«}tj |j¦«}| 	|¦«std|›d|j›¦«‚t|¦«S)Nzopening repository at %szPath z not inside root )rrrsrrOr€ÚjoinrƒrÚnormcaseÚ
startswithrrH)rNrOr€Únormcase_abspathÚ
normcase_roots     rPrMz!FileSystemBackend.open_repositoryÍs´€ÝŠÐ/°Ñ6Ô6Ð6Ý”'—/’/¥"¤'§,¢,¨t¬y¸$Ñ"?Ô"?Ñ@Ô@Å2Ä6ÑIˆÝœ7×+Ò+¨GÑ4Ô4ÐÝœ×(Ò(¨¬Ñ3Ô3ˆ
Ø×*Ò*¨=Ñ9Ô9ð	SÝ"Ð#Q¨4Ð#QÐ#QÀDÄIÐ#QÐ#QÑRÔRÐRݐG‰}Œ}ÐrQrx)	rRrSrTrUrrrprMÚ
__classcell__©r„s@rPr{r{Æscø€€€€€ØNÐNàœFðQðQðQðQðQðQðQðððððððrQr{có"—eZdZdZddd„Zd„ZdS)	ÚHandlerz*Smart protocol command handler base class.Fr[Ncó0—||_||_||_dSri)ÚbackendÚprotoÚ
stateless_rpc)rNrr‘r’s    rPrpzHandler.__init__Ús€ØˆŒ؈Œ
Ø*ˆÔÐÐrQcó*—t|j¦«‚ri)rLÚhandler^s rPr”zHandler.handleßs€Ý! $¤+Ñ.Ô.Ð.rQ©Frx)rRrSrTrUrpr”rVrQrPrŽrŽ×sB€€€€€Ø4Ð4ð+ð+ð+ð+ð+ð
/ð/ð/ð/ð/rQrŽcó҇—eZdZdZddˆfd„
Zedeefd„¦«Zedeefd„¦«Z	edeefd„¦«Z
d	eeddfd
„Zdedefd„Z
dd
„ZˆxZS)ÚPackHandlerzProtocol handler for packs.Fr[Ncój•—t¦« |||¦«d|_d|_dS©NF)r~rpÚ_client_capabilitiesÚ_done_received)rNrr‘r’r„s    €rPrpzPackHandler.__init__æs5ø€Ý
‰Œ×Ò˜ %¨Ñ7Ô7Ð7Ø:>ˆÔ!à#ˆÔÐÐrQcó*—t|j¦«‚ri)rLÚcapabilities©Úclss rPrzPackHandler.capabilitiesìs€å! #Ô"2Ñ3Ô3Ð3rQcóP—ttttt	¦«gSri)rr)r#r$r<ržs rPÚinnocuous_capabilitiesz"PackHandler.innocuous_capabilitiesðs#€õ
#Ý Ý"Ý ÝÑÔð
ð	
rQcó—gS)zAReturn a list of capabilities that we require the client to have.rVržs rPÚrequired_capabilitiesz!PackHandler.required_capabilitiesús	€ðˆ	rQÚcapscóÀ—t| ¦«¦«}| | ¦«¦«|D]6}| t
dz¦«rŒ ||vrt
d|z¦«‚Œ7| ¦«D]}||vrt
d|z¦«‚Œt|¦«|_t 
d|¦«dS)Nó=z7Client asked for capability %r that was not advertised.z/Client does not support required capability %r.zClient capabilities: %s)Úsetr¡Úupdaterrˆrrr£ršrrÚinfo)rNr¤Úallowable_capsÚcaps    rPÚset_client_capabilitiesz#PackHandler.set_client_capabilitiesÿs€Ý˜T×8Ò8Ñ:Ô:Ñ;Ô;ˆØ×Ò˜d×/Ò/Ñ1Ô1Ñ2Ô2Ð2Øð	ð	ˆC؏~Š~Õ.°Ñ5Ñ6Ô6ð
ØØ˜.Ð(Ð(Ý&ØPÐSVÑVñôðð)ð×-Ò-Ñ/Ô/ð	ð	ˆCؘ$ˆˆÝ&ØHÈ3ÑNñôððõ%(¨¡I¤IˆÔ!ݏŠÐ-¨tÑ4Ô4Ð4Ð4Ð4rQr«cóF—|j€td|z¦«‚||jvS)Nz=Server attempted to access capability %r before asking client)ršr)rNr«s  rPÚhas_capabilityzPackHandler.has_capabilitys6€ØÔ$Ð,Ý"ØRÐUXÑXñôð
ðdÔ/Ð/Ð/rQcó—d|_dS)NT)r›r^s rPÚnotify_donezPackHandler.notify_dones€Ø"ˆÔÐÐrQr•rx)rRrSrTrUrpÚclassmethodrrkrr¡r£r¬Úboolr®r°r‹rŒs@rPr—r—ãs%ø€€€€€Ø%Ð%ð$ð$ð$ð$ð$ð$ð$ðð4˜X eœ_ð4ð4ð4ñ„[ð4ðð
 x°¤ð
ð
ð
ñ„[ð
ðð h¨u¤oðððñ„[ðð5¨H°U¬Oð5Àð5ð5ð5ð5ð$0 %ð0¨Dð0ð0ð0ð0ð#ð#ð#ð#ð#ð#ð#ð#rQr—c󌇗eZdZdZ	d
	dˆfd„
Zed„¦«Zed„¦«Zdefd	„Z	d
„Z
ddeeeffd„Z
d„ZˆxZS)ÚUploadPackHandlerz4Protocol handler for uploading a pack to the client.Fr[Nc󺕗t¦« |||¬¦«| |d¦«|_d|_||_d|_dS)N©r’rF)r~rprMÚrepoÚ
_graph_walkerÚadvertise_refsÚ_processing_have_lines©rNrÚargsr‘r’r¹r„s      €rPrpzUploadPackHandler.__init__s]ø€õ	‰Œ×Ò˜ %°}ÐÑEÔEÐEØ×+Ò+¨D°¬GÑ4Ô4ˆŒ	Ø!ˆÔØ,ˆÔð',ˆÔ#Ð#Ð#rQc	ór—tttttt
tttg	Sri)	r!r r(r)r$r#rr'r"ržs rPrzUploadPackHandler.capabilities+s)€õ
*Ý Ý$Ý Ý Ý"Ý"ÝÝð

ð
	
rQcó*—tttfSri)r(r)r$ržs rPr£z'UploadPackHandler.required_capabilities9s€õ
%Ý Ý ð
ð	
rQÚmessagecó—dSrirV)rNr¿s  rPrfzUploadPackHandler.progressAó€ØˆrQcó$—| t¦«rd| t¦«s$t|jjt¦«|_t|jjt¦«|_	dS|jj
|_	dSri)r®r(r#rr‘Úwrite_sidebandr5rfr3Úwrite_pack_dataÚwriter^s rPÚ_start_pack_send_phasez(UploadPackHandler._start_pack_send_phaseDsˆ€Ø×ÒÕ7Ñ8Ô8ð	4ð×&Ò&Õ'=Ñ>Ô>ð
Ý 'Ø”JÔ-Õ/Iñ!ô!”
õ$+Ø”
Ô)Õ+Añ$ô$ˆDÔ Ð Ð ð$(¤:Ô#3ˆDÔ Ð Ð rQcó$—| t¦«siS|€|j ¦«}|€t	|jdd¦«}|€iSi}| ¦«D]%\}}| |¦«}||kr|||<Œ&|S)a¼Get a dict of peeled values of tags to their original tag shas.

        Args:
          refs: dict of refname -> sha of possible tags; defaults to all
            of the backend's refs.
          repo: optional Repo instance for getting peeled refs; defaults
            to the backend's repo, if available
        Returns: dict of peeled_sha -> tag_sha, where tag_sha is the sha of a
            tag whose peeled value is peeled_sha.
        Nr·)r®rr·r_ÚgetattrÚitemsrb)rNrZr·Útaggedr`ÚshaÚ
peeled_shas       rPrgzUploadPackHandler.get_taggedSsª€ð×"Ò"Õ#9Ñ:Ô:ð	؈I؈<Ø”9×%Ò%Ñ'Ô'ˆD؈<ݘ4œ9 f¨dÑ3Ô3ˆD؈|ð
	ðˆØŸš™œð	)ð	)‰IˆD#ØŸš¨Ñ.Ô.ˆJؘSÒ Ð Ø%(zÑ"øØˆ
rQc󢇇—d|_t||jj|jj|jjj¦«ŠgŠˆˆfd„}|j |‰|j|j	¬¦«}t|¦«}t‰¦«dkrdS‰ | 
t¦«|j¦«sdS| ¦«| dt|¦«z d¦«¦«t%|j|jj|¦«|j d¦«dS)NTcóJ•—‰ ‰j|fi|¤Ž¦«‰Sri)Úextendrd)rZÚkwargsreÚwantss  €€rPÚ
wants_wrapperz/UploadPackHandler.handle.<locals>.wants_wrappers0ø€ØLŠLÐ5˜Ô5°dÐEÐE¸fÐEÐEÑFÔFÐF؈LrQ)rgrzcounting objects: %d, done.
Úascii)rºÚ_ProtocolGraphWalkerr·rYrbrZÚget_symrefsrhrfrgÚlistÚlenÚhandle_doner®r"r›rÆÚencoderrÄr‘Úwrite_pkt_line)rNrÒÚmissing_objectsÚ
object_idsrerÑs    @@rPr”zUploadPackHandler.handlesspøø€ð'+ˆÔ#å+ØØŒIÔ"ØŒIÔ ØŒIŒNÔ&ñ	
ô
ˆðˆð	ð	ð	ð	ð	ð	ðœ)×8Ò8ØØØŒMØ”ð	9ñ
ô
ˆõ˜/Ñ*Ô*ˆ
õˆu‰:Œ:˜Š?ˆ?ØˆFà×'Ò'Ø×#Ò#Õ$6Ñ7Ô7Ð7¸Ô9Lñ
ô
ð	ð
ˆFà×#Ò#Ñ%Ô%Ð%Ø
Š
Ø
,­s°:©¬Ñ
>×FÒFÀwÑOÔOñ	
ô	
ð	
õ	"ØÔ  $¤)Ô"8¸*ñ	
ô	
ð	
ð	
Œ
×!Ò! $Ñ'Ô'Ð'Ð'Ð'rQ©FFrx)NN)rRrSrTrUrpr±rr£rkrfrÆrrrgr”r‹rŒs@rPr´r´sìø€€€€€Ø>Ð>ðINð
,à	
ð
,ð
,ð
,ð
,ð
,ð
,ðð
ð
ñ„[ð
ðð
ð
ñ„[ð
ð
 ð
ð
ð
ð
ð
4ð
4ð
4ðð°$°xÀÐ7IÔ2Jððððð@2(ð2(ð2(ð2(ð2(ð2(ð2(rQr´có
—|sdg}n)| d¦« dd¦«}|d}|||vrt|¦«‚t|¦«dkr|tdfvr|dfSt|¦«dkrq|t
tttfvr3t|d¦«std¦«‚t|¦«S|tkr|t|d¦«fStd|z¦«‚)	acSplit a line read from the wire.

    Args:
      line: The line read from the wire.
      allowed: An iterable of command names that should be allowed.
        Command names not listed below as possible return values will be
        ignored.  If None, any commands from the possible return values are
        allowed.
    Returns: a tuple having one of the following forms:
        ('want', obj_id)
        ('have', obj_id)
        ('done', None)
        (None, None)  (for a flush-pkt)

    Raises:
      UnexpectedCommandError: if the line cannot be parsed into one of the
        allowed return values.
    Nó
ó rrr}zInvalid shaz%Received invalid line from client: %r)ÚrstripÚsplitrr×r+r/r,r-r.rrÚtupler*Úint)ÚlineÚallowedÚfieldsÚcommands    rPÚ_split_proto_lineré¨s€ð&ð3ؐˆˆà—’˜UÑ#Ô#×)Ò)¨$°Ñ2Ô2ˆØQŒi€GØÐ˜w¨gÐ5Ð5Ý$ WÑ-Ô-Ð-Ý
ˆ6{„{aÒИG­°dÐ';Ð;Ð;ؘˆÐÝ	ˆV‰Œ˜Ò	Ð	ØÝÝÝÝð	
ð
ð
õ   q¤	Ñ*Ô*ð
6Ý& }Ñ5Ô5Ð5ݘ‘=”=Ð Ø
Ò
&Ð
&؝C  q¤	™NœNÐ*Ð*Ý
ÐBÀTÑIÑ
JÔ
JÐJrQÚstorecó䇇‡
—iŠ
ˆ
ˆfd„}g}|D]F}t‰|¦«\}}t|t¦«r| |jdf¦«ŒGt¦«}t¦«}	|ry| ¦«\}
}||krE| |
¦«|dzŠ| ˆfd„||
¦«D¦«¦«n|	 |
¦«|°y|	|fS)aFind shallow commits according to a given depth.

    Args:
      store: An ObjectStore for looking up objects.
      heads: Iterable of head SHAs to start walking from.
      depth: The depth of ancestors to include. A depth of one includes
        only the heads themselves.
    Returns: A tuple of (shallow, not_shallow), sets of SHAs that should be
        considered shallow and unshallow according to the arguments. Note that
        these sets may overlap if a commit is reachable along multiple paths.
    có\•—‰ |d¦«}|s‰|j}|‰|<|Sri)ÚgetÚparents)rËÚresultrîrês  €€rPÚget_parentsz"_find_shallow.<locals>.get_parentsás8ø€Ø—’˜S $Ñ'Ô'ˆØð	"ؘ3”ZÔ'ˆFØ!ˆGC‰L؈
rQrc3ó •K—|]}|‰fV—Œ	dSrirV)Ú.0ÚpÚ	new_depths  €rPú	<genexpr>z _find_shallow.<locals>.<genexpr>õs'øèè€ÐAÐA¨1˜˜I˜ÐAÐAÐAÐAÐAÐArQ)	rÚ
isinstancerÚappendÚidr§ÚpopÚaddrÏ)rêÚheadsÚdepthrðÚtodoÚhead_shaÚ	_unpeeledÚpeeledÚnot_shallowÚshallowrËÚ	cur_depthrôrîs`           @@rPÚ
_find_shallowrÓs-øøø€ð)+€Gððððððð€DØð(ð(ˆÝ$ U¨HÑ5Ô5ш	6ݐffÑ%Ô%ð	(ØKŠK˜œ A˜Ñ'Ô'Ð'øå‘%”%€K݉eŒe€GØ
ðØŸš™œ‰ˆˆYؐuÒÐØOŠO˜CÑ Ô Ð Ø! A™
ˆIØKŠKÐAÐAÐAÐA°°¸CÑ0@Ô0@ÐAÑAÔAÑAÔAÐAÐAàKŠK˜ÑÔÐðððKÐÐrQcó~—||}tj|g¦«}|h}|rš| ¦«}|j|vrdSt	|t
¦«sŒ7|jD][}||vrŒ| |¦«||}	t	|	t
¦«sJ‚|	j|kr| 	|	¦«Œ\|°šdS)NTF)
ÚcollectionsÚdequeÚpopleftrørörrîrúÚcommit_timer÷)
rêÚhavesÚwantÚearliestÚoÚpendingÚknownÚcommitÚparentÚ
parent_objs
          rPÚ_want_satisfiedrüsâ€Ø
ˆdŒ€AÝÔ  Ñ$Ô$€GØ
ˆF€EØ
ð+Ø—’Ñ"Ô"ˆØŒ9˜ÐÐØ4ݘ&¥&Ñ)Ô)ð	àØ”nð	+ð	+ˆFؘˆˆØØIŠIfÑÔÐؘvœˆJݘj­&Ñ1Ô1Ð1Ð1Ð1àÔ%¨Ò1Ð1Ø—’˜zÑ*Ô*Ð*øðð+ð ˆ5rQc󲇗t|¦«}|r(ˆfd„|D¦«}td„|D¦«¦«}nd}|D]}t‰|||¦«sdSŒdS)a~Check whether all the current wants are satisfied by a set of haves.

    Args:
      store: Object store to retrieve objects from
      haves: A set of commits we know the client has.
      wants: A set of commits the client wants
    Note: Wants are specified with set_wants rather than passed in since
        in the current interface they are determined outside this class.
    có •—g|]
}‰|‘ŒSrVrV)ròÚhrês  €rPú
<listcomp>z(_all_wants_satisfied.<locals>.<listcomp>sø€Ð-Ð-Ð- !U˜1”XÐ-Ð-Ð-rQcóF—g|]}t|t¦«¯|j‘ŒSrV)rörr	)ròrs  rPrz(_all_wants_satisfied.<locals>.<listcomp> s)€ÐRÐRÐR¨!½JÀqÍ&Ñ<QÔ<QÐR˜œ
ÐRÐRÐRrQrFT)r§Úminr)rêr
rÑÚ	have_objsrrs`     rPÚ_all_wants_satisfiedrsŒø€õ
‰JŒJ€EØðØ-Ð-Ð-Ð- uÐ-Ñ-Ô-ˆ	ÝÐRÐR¨yÐRÑRÔRÑSÔSˆˆàˆØððˆÝ˜u e¨T°8Ñ<Ô<ð	ؐ55ð	ðˆ4rQcó„—eZdZdZdeddfd„Zdd„Zd„Zd„Zd	„Z	d
„Z
d„ZeZd„Z
d
„Zd„Zdd„Zd„Zd„Zd„Zd„Zd„ZdS)rÔa7A graph walker that knows the git protocol.

    As a graph walker, this class implements ack(), next(), and reset(). It
    also contains some base methods for interacting with the wire and walking
    the commit tree.

    The work of determining which acks to send is passed on to the
    implementation instance stored in _impl. The reason for this is that we do
    not know at object creation time what ack level the protocol requires. A
    call to set_ack_type() is required to set up the implementation, before
    any calls to next() or ack() are made.
    rYr[Ncó>—||_||_||_||_|j|_|j|_|j|_g|_t¦«|_	t¦«|_
t¦«|_d|_g|_
d|_d|_dS)NFr)ÚhandlerrêrbrÕr‘r’r¹Ú_wantsr§rÚclient_shallowÚ	unshallowÚ_cachedÚ_cacheÚ_cache_indexÚ_impl)rNrrYrbrÕs     rPrpz_ProtocolGraphWalker.__init__8sŠ€ðˆŒØ&2ˆŒ
Ø$ˆŒØ&ˆÔØ”]ˆŒ
Ø$Ô2ˆÔØ%Ô4ˆÔØ#%ˆŒÝ#&¡5¤5ˆŒÝ*-©%¬%ˆÔÝ%(¡U¤UˆŒØˆŒØ#%ˆŒØˆÔ؈Œ
ˆ
ˆ
rQc
ó—| ¦«}t| ¦«¦«}|js|jsftt
| ¦«¦«¦«D]\}\}}	| |¦«}n#t$rYŒ,wxYw|dkr}t d|j 
¦«¦«t|||j 
¦«t| ¦«¦«z¦«}	nt||¦«}	|j |	¦«||kr0|j t|t$z|¦«¦«Œ|j d¦«|jrgS|j ¦«}
|
sgSt)|
¦«\}	}|j |¦«| t/|¦«¦«t0t2t4df}t7|	|¦«\}
}g}|
t0krN||vrt9d|z¦«‚| |¦«| |¦«\}
}|
t0k°N| |¦«|
t2t4fvr+|  |
|¦«| !|¦«|jr|j "¦«rgS|S)a-Determine the wants for a set of heads.

        The given heads are advertised to the client, who then specifies which
        refs they want using 'want' lines. This portion of the protocol is the
        same regardless of ack type, and in fact is used to set the ack type of
        the ProtocolGraphWalker.

        If the client has the 'shallow' capability, this method also reads and
        responds to the 'shallow' and 'deepen' lines from the client. These are
        not part of the wants per se, but they set up necessary state for
        walking the graph. Additionally, later code depends on this method
        consuming everything up to the first 'have' line.

        Args:
          heads: a dict of refname->SHA1 to advertise
        Returns: a list of SHA1s requested by the client
        rúSending capabilities: %sNzClient wants invalid object %s)#rÕr§Úvaluesr¹r’Ú	enumerateÚsortedrÉrbrtrrr©rrr@rCr‘rÚrDÚ
read_pkt_liner>r¬Úset_ack_typer;r/r-r*rérr÷Úread_proto_lineÚ	set_wantsÚunread_proto_lineÚ_handle_shallow_requestÚeof)rNrûrüÚsymrefsr(ÚiÚrefrËrÌrårr¤rærèÚ	want_revss               rPrdz$_ProtocolGraphWalker.determine_wantsKs€ð$×"Ò"Ñ$Ô$ˆÝU—\’\‘^”^Ñ$Ô$ˆØÔð	 dÔ&8ñ	Ý!*­6°%·+²+±-´-Ñ+@Ô+@Ñ!AÔ!Að
ñ
‘
‘:C˜ðØ!%§¢°Ñ!5Ô!5JJøÝððððHð	øøøð
˜’66Ý—K’KÐ :¸D¼L×<UÒ<UÑ<WÔ<WÑXÔXÐXÝ*ØØØœ×1Ò1Ñ3Ô3Ý-¨g¯mªm©o¬oÑ>Ô>ñ?ñôDDõ+¨3°Ñ4Ô4DØ”
×)Ò)¨$Ñ/Ô/Ð/Ø Ò$Ð$Ø”J×-Ò-Ý'¨Õ.?Ñ(?ÀÑLÔLñôðùð

ŒJ×%Ò% dÑ+Ô+Ð+àÔ"ð
ؐ	ðŒz×'Ò'Ñ)Ô)ˆØð	؈IÝ3°DÑ9Ô9‰
ˆˆdØŒ×,Ò,¨TÑ2Ô2Ð2Ø×ҝ( 4™.œ.Ñ)Ô)Ð)Ý¥µ.À$ÐGˆÝ(¨¨wÑ7Ô7‰ˆàˆ	؝Ò%Ð%ؘ&Ð Ð Ý&Ð'GÈ#Ñ'MÑNÔNÐNØ×Ò˜SÑ!Ô!Ð!Ø×/Ò/°Ñ8Ô8‰LˆGSð	Ò%Ð%ð	
ŠyÑ!Ô!Ð!Ø•­Ð7Ð7Ð7Ø×"Ò" 7¨CÑ0Ô0Ð0Ø×(Ò(¨Ñ3Ô3Ð3àÔð	 $¤*§.¢.Ñ"2Ô"2ð	ð
ˆIàÐsÁ=BÂ
B ÂB có´—t|t¦«r"t|¦« d¦«}|j |dz|z¦«dS)NrÓrà)röräryrÙr‘Úunread_pkt_line)rNrèÚvalues   rPr/z&_ProtocolGraphWalker.unread_proto_linesR€ÝeSÑ!Ô!ð	/ݘ‘J”J×%Ò% gÑ.Ô.ˆEØŒ
×"Ò" 7¨T¡>°EÑ#9Ñ:Ô:Ð:Ð:Ð:rQcó—dSrirVr^s rPÚnakz_ProtocolGraphWalker.nak¢rÁrQcó€—t|¦«dkrtd|z¦«‚|j |¦«S)Né(zinvalid sha %r)r×Ú
ValueErrorr%Úack©rNÚhave_refs  rPr>z_ProtocolGraphWalker.ack¥s;€Ýˆx‰=Œ=˜BÒÐÝÐ-°Ñ8Ñ9Ô9Ð9ØŒz~Š~˜hÑ'Ô'Ð'rQcó"—d|_d|_dS)NTr)r"r$r^s rPÚresetz_ProtocolGraphWalker.resetªs€ØˆŒ؈ÔÐÐrQcóڗ|js$|js	|jrdSt|j¦«S|xjdz
c_|jt|j¦«krdS|j|jS)Nr)r"r%r’Únextr$r×r#r^s rPrDz_ProtocolGraphWalker.next®sv€ØŒ|ð	$Ø”:ð
 $Ô"4ð
ؐtݘœ
Ñ#Ô#Ð#ØÐÔ˜QÑÐÔØÔs 4¤;Ñ/Ô/Ò/Ð/ؐ4ØŒ{˜4Ô,Ô-Ð-rQcóP—t|j ¦«|¦«S)aRead a line from the wire.

        Args:
          allowed: An iterable of command names that should be allowed.
        Returns: A tuple of (command, value); see _split_proto_line.

        Raises:
          UnexpectedCommandError: If an error occurred reading the line.
        )rér‘r+)rNræs  rPr-z$_ProtocolGraphWalker.read_proto_lineºs"€õ! ¤×!9Ò!9Ñ!;Ô!;¸WÑEÔEÐErQcó—	| ttf¦«\}}|tkr|}n|j |¦«ŒM| d¦«t|j||¦«\}}|j ||z
¦«|j|jz
}||jzx}|_	t|¦«D])}	|j t|	¦«¦«Œ*t|¦«D])}	|j t|	¦«¦«Œ*|j d¦«dS)NTri)r-r*r-r rúrrêrr¨r!r*r‘rÚrArB)
rNrÑrèÚvalrürrÚnew_shallowr!rËs
          rPr0z,_ProtocolGraphWalker._handle_shallow_requestÆsR€ð	)Ø×/Ò/µÅÐ0QÑRÔR‰LˆGS؝.Ò(Ð(ØØØÔ×#Ò# CÑ(Ô(Ð(ð	)ð	
×Ò˜WÑ%Ô%Ð%å,¨T¬Z¸ÀÑFÔFшð	
Œ×Ò˜G kÑ1Ñ2Ô2Ð2Ø”l TÔ%8Ñ8ˆØ%0°4Ô3FÑ%FÐFˆ	D”Nå˜+Ñ&Ô&ð	@ð	@ˆCØŒJ×%Ò%Õ&9¸#Ñ&>Ô&>Ñ?Ô?Ð?Ð?ݘ)Ñ$Ô$ð	Bð	BˆCØŒJ×%Ò%Õ&;¸CÑ&@Ô&@ÑAÔAÐAÐAàŒ
×!Ò! $Ñ'Ô'Ð'Ð'Ð'rQcó8—|j ¦«dSri)rr°r^s rPr°z _ProtocolGraphWalker.notify_doneÞs€àŒ× Ò Ñ"Ô"Ð"Ð"Ð"rQrQcóV—|j t||¦«¦«dSri)r‘rÚr?)rNrËr;s   rPÚsend_ackz_ProtocolGraphWalker.send_ackâs(€ØŒ
×!Ò!¥/°#°xÑ"@Ô"@ÑAÔAÐAÐAÐArQcóD—|j t¦«dSri)r‘rÚr2r^s rPÚsend_nakz_ProtocolGraphWalker.send_nakås€ØŒ
×!Ò!¥(Ñ+Ô+Ð+Ð+Ð+rQcó8—|j ||¦«Sri)r%rØ©rNÚ
done_requiredÚ
done_receiveds   rPrØz _ProtocolGraphWalker.handle_doneès€àŒz×%Ò% m°]ÑCÔCÐCrQcó—||_dSri)r)rNrÑs  rPr.z_ProtocolGraphWalker.set_wantsìs
€ØˆŒˆˆrQcó8—t|j||j¦«S)a0Check whether all the current wants are satisfied by a set of haves.

        Args:
          haves: A set of commits we know the client has.
        Note: Wants are specified with set_wants rather than passed in since
            in the current interface they are determined outside this class.
        )rrêr)rNr
s  rPÚall_wants_satisfiedz(_ProtocolGraphWalker.all_wants_satisfiedïs€õ$ D¤J°°t´{ÑCÔCÐCrQcó~—tttttt
i}|||¦«|_dSri)r0ÚMultiAckGraphWalkerImplr1ÚMultiAckDetailedGraphWalkerImplr6ÚSingleAckGraphWalkerImplr%)rNr;Úimpl_classess   rPr,z!_ProtocolGraphWalker.set_ack_typeùs7€åÕ.ÝÕ ?ÝÕ0ð
ˆð
,\ (Ô+¨DÑ1Ô1ˆŒ
ˆ
ˆ
rQri)rQ)rRrSrTrUrrprdr/r:r>rBrDÚ__next__r-r0r°rKrMrØr.rTr,rVrQrPrÔrÔ*sF€€€€€ðððØ%4ðà	
ððððð&PðPðPðPðd;ð;ð;ð

ð
ð
ð(ð(ð(ð
ððð.ð.ð.ð€Hð
Fð
Fð
Fð(ð(ð(ð0#ð#ð#ðBðBðBðBð,ð,ð,ðDðDðDððððDðDðDð2ð2ð2ð2ð2rQrÔcó0—eZdZdZdd„Zd„Zd„ZeZd„ZdS)	rXz@Graph walker implementation that speaks the single-ack protocol.r[Ncó"—||_g|_dSri©ÚwalkerÚ_common©rNr^s  rPrpz!SingleAckGraphWalkerImpl.__init__ó€ØˆŒØ$&ˆŒˆˆrQcó€—|js6|j |¦«|j |¦«dSdSri)r_r^rKr÷r?s  rPr>zSingleAckGraphWalkerImpl.acksH€ØŒ|ð	*ØŒK× Ò  Ñ*Ô*Ð*ØŒL×Ò Ñ)Ô)Ð)Ð)Ð)ð	*ð	*rQcó°—|j t¦«\}}|dtfvr|j ¦«dS|t
kr|SdSri)r^r-Ú_GRAPH_WALKER_COMMANDSr+r°r,©rNrèrËs   rPrDzSingleAckGraphWalkerImpl.nexts]€Ø”{×2Ò2Õ3IÑJÔJ‰ˆØt\Ð*Ð*Ð*àŒK×#Ò#Ñ%Ô%Ð%ؐ4Ø
Ò
$Ð
$؈Jð%Ð
$rQcóh—|js|j ¦«|r|sdS|s	|jsdSdS)NFT)r_r^rMrOs   rPrØz$SingleAckGraphWalkerImpl.handle_donesS€ØŒ|ð	#ØŒK× Ò Ñ"Ô"Ð"àð	 ð	ð5àð	 T¤\ð	ð5àˆtrQrx©	rRrSrTrUrpr>rDrZrØrVrQrPrXrXsb€€€€€ØJÐJð'ð'ð'ð'ð*ð*ð*ð
ððð€HðððððrQrXcó0—eZdZdZdd„Zd„Zd„ZeZd„ZdS)	rVz?Graph walker implementation that speaks the multi-ack protocol.r[Ncó0—||_d|_g|_dSr™)r^Ú_found_baser_r`s  rPrpz MultiAckGraphWalkerImpl.__init__4s€ØˆŒØ ˆÔØ$&ˆŒˆˆrQcóҗ|j |¦«|jsC|j |d¦«|j |j¦«rd|_dSdSdS)NócontinueT)r_r÷rjr^rKrTr?s  rPr>zMultiAckGraphWalkerImpl.ack9sw€ØŒ×Ò˜HÑ%Ô%Ð%ØÔð	(ØŒK× Ò  ¨;Ñ7Ô7Ð7ØŒ{×.Ò.¨t¬|Ñ<Ô<ð
(Ø#'Ô Ð Ð ð	(ð	(ð
(ð
(rQcó,—	|j t¦«\}}|€|j ¦«Œ?|tkr|j ¦«dS|tkr$|jr|j |d¦«|SŒ”)NTrl)	r^r-rdrMr+r°r,rjrKres   rPrDzMultiAckGraphWalkerImpl.nextAs›€ð	Øœ;×6Ò6Õ7MÑNÔN‰LˆGS؈ؔ×$Ò$Ñ&Ô&Ð&ð؝LÒ(Ð(Ø”×'Ò'Ñ)Ô)Ð)ؐt؝LÒ(Ð(ØÔ#ð;à”K×(Ò(¨¨kÑ:Ô:Ð:ؐ
ð	rQcó´—|r|sdS|s	|jsdS|jr&|j |jd¦«n|j ¦«dS©NFéÿÿÿÿT©r_r^rKrMrOs   rPrØz#MultiAckGraphWalkerImpl.handle_doneTóu€Øð	 ð	ð5àð	 T¤\ð	ð5ðŒ<ð	#ØŒK× Ò  ¤¨bÔ!1Ñ2Ô2Ð2Ð2àŒK× Ò Ñ"Ô"Ð"؈trQrxrgrVrQrPrVrV1sb€€€€€ØIÐIð'ð'ð'ð'ð
(ð(ð(ðððð"€HðððððrQrVcó0—eZdZdZdd„Zd„Zd„ZeZd„ZdS)	rWzEGraph walker implementation speaking the multi-ack-detailed protocol.r[Ncó"—||_g|_dSrir]r`s  rPrpz(MultiAckDetailedGraphWalkerImpl.__init__orarQcóp—|j |¦«|j |d¦«dS)Nscommon)r_r÷r^rKr?s  rPr>z#MultiAckDetailedGraphWalkerImpl.ackss6€àŒ×Ò˜HÑ%Ô%Ð%ØŒ×Ò˜X yÑ1Ô1Ð1Ð1Ð1rQcóŽ—	|j t¦«\}}|€m|j |j¦«r&|j |jdd¦«|j ¦«|jjrdSn3|tkr|j 	¦«dS|tkr|SŒÅ)NTrpsready)r^r-rdrTr_rKrMr’r+r°r,res   rPrDz$MultiAckDetailedGraphWalkerImpl.nextxsʀð	Øœ;×6Ò6Õ7MÑNÔN‰LˆGS؈ؔ;×2Ò2°4´<Ñ@Ô@ðEØ”K×(Ò(¨¬°bÔ)9¸8ÑDÔDÐDØ”×$Ò$Ñ&Ô&Ð&Ø”;Ô,ð ð ˜4ð ðLÒ(Ð(à”×'Ò'Ñ)Ô)Ð)ؐ؝LÒ(Ð(ð
ð-	rQcó´—|r|sdS|s	|jsdS|jr&|j |jd¦«n|j ¦«dSrorqrOs   rPrØz+MultiAckDetailedGraphWalkerImpl.handle_done•rrrQrxrgrVrQrPrWrWlsb€€€€€ØOÐOð'ð'ð'ð'ð2ð2ð2ð
ððð6€HðððððrQrWcóև—eZdZdZ	d
	dˆfd„
Zedeefd„¦«Zde	e
eeefde	e
eeffd„Zd	e	e
eefddfd
„Zd„Z
dd„ZˆxZS)ÚReceivePackHandlerz8Protocol handler for downloading a pack from the client.Fr[Ncóž•—t¦« |||¬¦«| |d¦«|_||_dS)Nr¶r)r~rprMr·r¹r»s      €rPrpzReceivePackHandler.__init__°sKø€õ	‰Œ×Ò˜ %°}ÐÑEÔEÐEØ×+Ò+¨D°¬GÑ4Ô4ˆŒ	Ø,ˆÔÐÐrQcóN—tttttt
gSri)r&rr%r$r(r"ržs rPrzReceivePackHandler.capabilities·s €õ
%Ý"ÝÝ Ý$Ýð

ð	
rQrZcóà—tttttt
jtjtf}g}d}|D]}|dtkrd}Œ|r´	t|jdd¦«}|jj
 |jj|¦«| d¦«nr#|$rU}| dt#|¦« dd¦« d	¦«f¦«Yd}~nd}~wwxYw| d¦«|D]Ç\}}	}
d
}	|	tkrYt(| ¦«vrt-d¦«‚	|jj |
|¦«n=#|$rd}Yn4wxYw	|jj |
||	¦«n
#|$rd
}YnwxYwn#t4$rd}YnwxYw| |
|f¦«ŒÈ|S)NFrTÚrecv)óunpackóokr~ú
Úúutf-8rz8Attempted to delete refs without delete-refs capability.sfailed to deletesfailed to writesbad ref)ÚIOErrorÚOSErrorrrÚAssertionErrorÚsocketÚerrorÚzlibrr8rÈr‘r·rYÚ
add_thin_packÚreadr÷ryr‚rÙrrrrZÚremove_if_equalsÚ
set_if_equalsrt)rNrZÚall_exceptionsÚstatusÚwill_send_packrèr}ÚeÚoldsharËr4Ú
ref_statuss            rPÚ_apply_packzReceivePackHandler._apply_packÂsV€õ
ÝÝÝÝÝŒLÝŒJÝ!ð	
ˆðˆØˆàð	&ð	&ˆGؐqŒzXÒ%Ð%Ø!%øàð	.ð
Uݘtœz¨6°4Ñ8Ô8Ø”	Ô&×4Ò4°T´Z´_ÀdÑKÔKÐKØ—
’
Ð0Ñ1Ô1Ð1Ð1øØ!ð
Uð
Uð
UØ—
’
˜y­#¨a©&¬&¯.ª.¸¸rÑ*BÔ*B×*IÒ*IÈ'Ñ*RÔ*RÐSÑTÔTÐTÐTÐTÐTÐTÐTøøøøð
Uøøøð
MŠMÐ,Ñ-Ô-Ð-à $ð	-ð	-ÑˆFC˜ØˆJð
(؝(’??Ý-°T×5FÒ5FÑ5HÔ5HÐHÐHÝ.ð*ñôðð9Øœ	œ×7Ò7¸¸VÑDÔDÐDÐDøØ)ð9ð9ð9Ø%8˜
˜
˜
ð9øøøð8Øœ	œ×4Ò4°S¸&À#ÑFÔFÐFÐFøØ)ð8ð8ð8Ø%7˜
˜
˜
ð8øøøøøåð
(ð
(ð
(Ø'


ð
(øøøàMŠM˜3 
Ð+Ñ,Ô,Ð,Ð,àˆ
stÁAB2Â2DÂ7ADÄDÄ/5GÅ% FÆGÆFÆ
GÆFÆGÆ!F6Æ5GÆ6GÆ=GÆ?GÇGÇGÇGrŽcód‡‡—‰ t¦«r tˆfd„¦«Š‰j}ˆˆfd„}n‰jj}d„}|D]L\}}|dkr|d|zdz¦«Œ|dkr|d|zdz¦«Œ5|d	|zd
z|zdz¦«ŒM|d¦«|¦«dS)NcóD•—‰j t|¦«Sri©r‘rÃr3)ÚdrNs €rPú<lambda>z3ReceivePackHandler._report_status.<locals>.<lambda>sø€˜$œ*×3Ò3Õ4JÈAÑNÔN€rQcód•—‰ ¦«‰j d¦«dSri)Úflushr‘rÚ)rNÚwriters€€rPršz0ReceivePackHandler._report_status.<locals>.flushs,ø€Ø—’‘”Ø”
×)Ò)¨$Ñ/Ô/Ð/Ð/Ð/rQcó—dSrirVrVrQrPršz0ReceivePackHandler._report_status.<locals>.flushs€ØrQr~sunpack rßrsok sng rà)r®r(r9rÅr‘rÚ)rNrŽrÅršr`Úmsgr›s`     @rPÚ_report_statusz!ReceivePackHandler._report_statusþs!øø€Ø×ÒÕ7Ñ8Ô8ð	Ý*ØNÐNÐNÐNñôˆFð”LˆEð
0ð
0ð
0ð
0ð
0ð
0ð
0ð
”JÔ-ˆEð
ð
ð
ð ð	:ð	:‰IˆD#ؐyÒ Ð Øj 3Ñ&¨Ñ.Ñ/Ô/Ð/Ð/ؘ’Øf˜t‘m eÑ+Ñ,Ô,Ð,Ð,àf˜t‘m dÑ*¨SÑ0°5Ñ8Ñ9Ô9Ð9Ð9Ø
ˆˆd‰ŒˆØ
ˆ‰ŒˆˆˆrQcór—|jj dd¦«}|sdS	| |¦«}|r"|j t|¦«dSdS#t$rK}|j tt|¦« 
d¦«¦«Yd}~dSd}~wwxYw)Nzpost-receiver‚)r·ÚhooksríÚexecuter‘rÃr5rr4ryrÙ)rNÚclient_refsÚhookÚoutputÚerrs     rPÚ_on_post_receivez#ReceivePackHandler._on_post_receivesӀØŒyŒ×"Ò" >°4Ñ8Ô8ˆØð	ØˆFð	YØ—\’\ +Ñ.Ô.ˆFØð
NØ”
×)Ò)Õ*DÀfÑMÔMÐMÐMÐMð
Nð
Nøåð	Yð	Yð	YØŒJ×%Ò%Õ&=½sÀ3¹x¼x¿ºÈwÑ?WÔ?WÑXÔXÐXÐXÐXÐXÐXÐXÐXøøøøð	Yøøøs¦7A!Á!
B6Á+AB1Â1B6c
ó—|js|js•t|j ¦« ¦«¦«}t|jj ¦« ¦«¦«}|sttfg}t d| ¦«¦«|j
 t|dd|dd| ¦«t!|¦«z¦«¦«t#dt%|¦«¦«D]>}||}|j
 t|d|d¦«¦«Œ?|j
 d¦«|jrdSg}|j
 ¦«}|€dSt)|¦«\}}| |¦«|rB| | ¦«¦«|j
 ¦«}|°B| |¦«}| |¦«| t6¦«r| |¦«dSdS)Nr'rr)r¹r’r*r·r_rÉrZrÕrr8rrr©rr‘rÚr@rCÚranger×r+r=r¬r÷râr“r¦r®r&rž)rNrZr2r3r4r¢r¤rŽs        rPr”zReceivePackHandler.handle$sf€ØÔð	 dÔ&8ñ	ݘ$œ)×,Ò,Ñ.Ô.×4Ò4Ñ6Ô6Ñ7Ô7ˆDݘTœYœ^×7Ò7Ñ9Ô9×?Ò?ÑAÔAÑBÔBˆGàð
6Ý)­8Ð4Ð5ÝKŠKÐ2°D×4EÒ4EÑ4GÔ4GÑHÔHÐHØŒJ×%Ò%ÝØ˜”G˜A”Jؘ”G˜A”JØ×%Ò%Ñ'Ô'Õ*=¸gÑ*FÔ*FÑFñôñ
ô
ð
õ˜1c $™iœiÑ(Ô(ð
Kð
KØ˜1”gØ”
×)Ò)­/¸#¸a¼&À#ÀaÄ&Ñ*IÔ*IÑJÔJÐJÐJàŒJ×%Ò% dÑ+Ô+Ð+ØÔ"ð
ØàˆØŒj×&Ò&Ñ(Ô(ˆðˆ;ØˆFå(¨Ñ-Ô-‰	ˆˆTØ×$Ò$ TÑ*Ô*Ð*ðð	-Ø×Ò˜sŸyšy™{œ{Ñ+Ô+Ð+Ø”*×*Ò*Ñ,Ô,ˆCðð	-ð
×!Ò! +Ñ.Ô.ˆà×Ò˜kÑ*Ô*Ð*ð×ÒÕ7Ñ8Ô8ð	(Ø×Ò Ñ'Ô'Ð'Ð'Ð'ð	(ð	(rQrÝrx)rRrSrTrUrpr±rrkrrr	r“ržr¦r”r‹rŒs@rPryry­sø€€€€€ØBÐBðINð-à	
ð-ð-ð-ð-ð-ð-ðð
˜X eœ_ð
ð
ð
ñ„[ð
ð:ؘ˜u e¨UÐ2Ô3Ô4ð:à	
ˆeE˜5LÔ!Ô	"ð:ð:ð:ð:ðx T¨%°°u°Ô*=Ô%>ðÀ4ððððð6	Yð	Yð	Yð.(ð.(ð.(ð.(ð.(ð.(ð.(ð.(rQrycó(‡—eZdZddˆfd„
Zd„ZˆxZS)ÚUploadArchiveHandlerFr[NcóŽ•—t¦« |||¦«| |d¦«|_dS)Nr)r~rprMr·)rNrr¼r‘r’r„s     €rPrpzUploadArchiveHandler.__init__Vs<ø€Ý
‰Œ×Ò˜ %¨Ñ7Ô7Ð7Ø×+Ò+¨D°¬GÑ4Ô4ˆŒ	ˆ	ˆ	rQcóL‡—ˆfd„}g}‰j ¦«D][}| dd¦«\}}|dkrtd|z¦«‚| | d¦«¦«Œ\d}d}d	}‰jj}	|t|¦«kr€||}
|
d
kr|dz
}||}nL|
dkr!|dz
}|| 	d¦«}n%‰jj
|
}|	|	|j}|dz
}|t|¦«k°€‰j d
¦«‰j d¦«t|	|tj¦«||¬¦«D]
}
||
¦«Œ‰j d¦«dS)NcóD•—‰j t|¦«Srir–)ÚxrNs €rPrÅz*UploadArchiveHandler.handle.<locals>.write[sø€Ø”:×,Ò,Õ-CÀQÑGÔGÐGrQràrsargumentzunknown command %srßrQÚtarrs--prefixs--formatrÓsACK)ÚmtimeÚprefixru)r‘Úread_pkt_seqrârr÷rár·rYr×ÚdecoderZÚtreerÚr
Útime)rNrÅÚ	argumentsÚpktÚkeyr8r±rur3rêÚargumentÚ
commit_shar´Úchunks`             rPr”zUploadArchiveHandler.handleZsãø€ð	Hð	Hð	Hð	Hð	Hðˆ	Ø”:×*Ò*Ñ,Ô,ð	2ð	2ˆCØŸ9š9 T¨1Ñ-Ô-‰LˆS%ؐkÒ!Ð!Ý&Ð';¸cÑ'AÑBÔBÐBØ×Ò˜UŸ\š\¨%Ñ0Ô0Ñ1Ô1Ð1Ð1؈؈Ø
ˆØ!%¤Ô!7ˆØ•#i‘.”.Ò Ð Ø  ”|ˆHؘ;Ò&Ð&ؐQ‘Ø" 1œØ˜[Ò(Ð(ؐQ‘Ø" 1œ×,Ò,¨WÑ5Ô5à!œYœ^¨HÔ5
ؘU :Ô.Ô3Ô4Ø
‰FˆAð•#i‘.”.Ò Ð ð	
Œ
×!Ò! &Ñ)Ô)Ð)ØŒ
×!Ò! $Ñ'Ô'Ð'ÝØ4tœy™{œ{°6À&ð
ñ
ô
ð	ð	ˆEð
ˆE%‰LŒLˆLˆLØŒ
×!Ò! $Ñ'Ô'Ð'Ð'Ð'rQr•rx)rRrSrTrpr”r‹rŒs@rPrªrªUsQø€€€€€ð5ð5ð5ð5ð5ð5ð5ð (ð (ð (ð (ð (ð (ð (rQrª)sgit-upload-packsgit-receive-packsgit-upload-archivecó—eZdZdd„Zd„ZdS)ÚTCPGitRequestHandlerr[NcóH—||_tjj|g|¢Ri|¤ŽdSri)ÚhandlersÚsocketserverÚStreamRequestHandlerrp)rNr¿r¼rÐs    rPrpzTCPGitRequestHandler.__init__†s3€Ø ˆŒ
ÝÔ)Ô2°4ÐI¸$ÐIÐIÐIÀ&ÐIÐIÐIÐIÐIrQcó‚—t|jj|jj¦«}| ¦«\}}t d||¦«|j 	|d¦«}t|¦«std|z¦«‚||jj
||¦«}| ¦«dS)NzHandling %s request, args=%szInvalid service %s)r:Ú
connectionr}ÚwfilerÅÚread_cmdrrr©r¿ríÚcallablerÚserverrr”)rNr‘rèr¼rŸrs      rPr”zTCPGitRequestHandler.handleŠs¨€Ý" 4¤?Ô#7¸¼Ô9IÑJÔJˆØŸšÑ(Ô(‰
ˆÝŠÐ2°G¸TÑBÔBÐBàŒm×Ò ¨Ñ.Ô.ˆÝ˜‰}Œ}ð	CÝ"Ð#7¸'Ñ#AÑBÔBÐBØˆC”Ô# T¨5Ñ1Ô1ˆØ	Š‰
Œ
ˆ
ˆ
ˆ
rQrx)rRrSrTrpr”rVrQrPr½r½…s;€€€€€ðJðJðJðJð	ð	ð	ð	ð	rQr½cóJ—eZdZdZejjZd„Ze	dfdd„Z
d„Zd„ZdS)	ÚTCPGitServerTcó,—t|jg|¢Ri|¤ŽSri)r½r¿)rNr¼rÐs   rPÚ
_make_handlerzTCPGitServer._make_handleršs"€Ý# D¤MÐC°DÐCÐCÐC¸FÐCÐCÐCrQNr[có—tt¦«|_||j |¦«||_t
 d||¦«tj 	|||f|j
¦«dS)Nz&Listening for TCP connections on %s:%d)rvÚDEFAULT_HANDLERSr¿r¨rrrr©rÀÚ	TCPServerrprË)rNrÚlisten_addrÚportr¿s     rPrpzTCPGitServer.__init__su€ÝÕ-Ñ.Ô.ˆŒ
ØÐØŒM× Ò  Ñ*Ô*Ð*؈ŒݏŠÐ<¸kÈ4ÑPÔPÐPÝÔ×'Ò'¨¨{¸DÐ.AÀ4ÔCUÑVÔVÐVÐVÐVrQcó<—t d|¦«dS)NzHandling request from %sT)rrr©©rNÚrequestÚclient_addresss   rPÚverify_requestzTCPGitServer.verify_request¥s€ÝŠÐ.°Ñ?Ô?Ð?؈trQcó<—t d|¦«dS)Nz7Exception happened during processing of request from %s)rrÚ	exceptionrÒs   rPÚhandle_errorzTCPGitServer.handle_error©s*€Ý×ÒØHØñ	
ô	
ð	
ð	
ð	
rQrx)
rRrSrTÚallow_reuse_addressrÀrÎÚ
serve_foreverÚserverËr7rprÕrØrVrQrPrÉrÉ–sz€€€€€ØÐØÔ"Ô0€EðDðDðDð3?ÈðWðWðWðWðWðððð
ð
ð
ð
ð
rQrÉcó—ddl}| ¦«}| ddddd¬¦«| d	d
dttd¬
¦«| |¦«\}}t
j¦«t|¦«dkr	|d}nd}t|¦«}t||j|j¦«}| 
¦«dS)z*Entry point for starting a TCP git server.rNz-lz--listen_addressÚlisten_addressÚ	localhostzBinding IP address.)ÚdestÚdefaultÚhelpz-pz--portrÐzBinding TCP port.)rßÚtyperàrárú.)ÚoptparseÚOptionParserÚ
add_optionrär7Ú
parse_argsrÚdefault_logging_configr×r{rÉrÝrÐrÚ)ÚargvräÚparserÚoptionsr¼ÚgitdirrrÇs        rPÚmainrí°sû€à€O€O€Oà
×
"Ò
"Ñ
$Ô
$€FØ
×ÒØØØ
ØØ
"ðñôðð×ÒØØØ
Ý
ÝØ
 ð
ñôðð×%Ò% dÑ+Ô+M€GˆTå
Ô$Ñ&Ô&Ð&Ý
ˆ4y„y1‚}€}ؐa”ˆˆàˆå Ñ'Ô'€GÝ
˜' 7Ô#9¸7¼<Ñ
HÔ
H€FØ
×ÒÑÔÐÐÐrQc󮇗|€t¦«}ˆfd„}t|j|¦«}|||dd…|¦«}| ¦«dS)aöServe a single command.

    This is mostly useful for the implementation of commands used by e.g.
    git+ssh.

    Args:
      handler_cls: `Handler` class to use for the request
      argv: execv-style command-line arguments. Defaults to sys.argv.
      backend: `Backend` to use
      inf: File-like object to read from, defaults to standard input.
      outf: File-like object to write to, defaults to standard output.
    Returns: Exit code for use with sys.exit. 0 on success, 1 on failure.
    NcóZ•—‰ |¦«‰ ¦«dSri)rÅrš)ÚdataÚoutfs €rPÚsend_fnzserve_command.<locals>.send_fnäs&ø€Ø
Š
4ÑÔÐØ
Š
‰ŒˆˆˆrQrr)r{r
rŠr”)Úhandler_clsrérÚinfrñròr‘rs    `   rPÚ
serve_commandrõÑsqø€ð €Ý#Ñ%Ô%ˆðððððõ
S”X˜wÑ'Ô'€E؈k˜' 4¨¨¨¤8¨UÑ3Ô3€Gà‡N‚NÑÔÐØˆ1rQcóT—| ¦«}t||j¦«S)zGenerate an info refs file.)r_rFrY)r·rZs  rPÚgenerate_info_refsr÷ïs"€à=Š=‰?Œ?€Dݘ4 Ô!2Ñ3Ô3Ð3rQc#ótK—|jjD](}dtj|jj¦«zdzV—Œ)dS)z Generate an index for for packs.sP rßN)rYÚpacksrÚfsencoderðÚfilename)r·Úpacks  rPÚgenerate_objects_info_packsrýõsQèè€àÔ!Ô'ð@ð@ˆØ•r”{ 4¤9Ô#5Ñ6Ô6Ñ6¸Ñ>Ð?Ð?Ð?Ð?ð@ð@rQcóX—| tj dd¦«d t	|¦«¦«¦«| tj ddd¦«d t|¦«¦«¦«dS)zŽGenerate server info for dumb file access.

    This generates info/refs and objects/info/packs,
    similar to "git update-server-info".
    r©rZrQÚobjectsrùN)Ú_put_named_filerrOr†r÷rý)r·s rPÚupdate_server_inforûs—€ð	×ÒÝ
ŒŠV˜VÑ$Ô$ c§h¢hÕ/AÀ$Ñ/GÔ/GÑ&HÔ&Hñôðð	×ÒÝ
ŒŠY ¨Ñ0Ô0؏ŠÕ,¨TÑ2Ô2Ñ3Ô3ñôðððrQÚ__main__)}rUrrr†ÚsysrµÚ	functoolsrÚtypingrrrrrr	r
ÚTypingProtocolÚImportErrorÚtyping_extensionsrÀrˆÚdulwichrÚarchiver
ÚerrorsrrrrrrrrYrrÿrrrrürrrÚprotocolrrrrr r!r"r#r$r%r&r'r(r)r*r+r,r-r.r/r0r1r2r3r4r5r6r7r8r9r:r;r<r=r>r?r@rArBrCrZrDrErFr·rGrHÚ	getLoggerrRrrrJrXrmr{rŽr—r´rérrrrÔrdrXrVrWryrªrÍrÁr½rÎrÉréríÚstdinÚstdoutrõr÷rýrrVrQrPú<module>rsaðð,ðð.ÐÐÐØ	€	€	€	Ø
€
€
€
Ø
€
€
€
Ø€€€ØÐÐÐÐÐØ=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=ð=Ø1Ð1Ð1Ð1Ð1Ð1Ð1øØð=ð=ð=Ø<Ð<Ð<Ð<Ð<Ð<Ð<Ð<ð=øøøðÐÐÐØ€€€àÐÐÐÐÐàÐÐÐÐÐððððððððððððððððððð#Ð"Ð"Ð"Ð"Ð"Ø3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3ØSÐSÐSÐSÐSÐSÐSÐSÐSÐSð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ð*ðVDÐCÐCÐCÐCÐCÐCÐCÐCÐCØ Ð Ð Ð Ð Ð Ð Ð à	ˆÔ	˜XÑ	&Ô	&€ð8ð8ð8ð8ð8ñ8ô8ð8ð'"ð'"ð'"ð'"ð'".ñ'"ô'"ð'"ðT
ð
ð
ð
ð
'ñ
ô
ð
ð ðððð˜ñôðð"	/ð	/ð	/ð	/ð	/ñ	/ô	/ð	/ð6#ð6#ð6#ð6#ð6#'ñ6#ô6#ð6#ðrI(ðI(ðI(ðI(ðI(˜ñI(ôI(ðI(ðX(Kð(Kð(KðV& ˜ð& ð& ð& ð& ðR˜?ððððð. ððððð.U2ðU2ðU2ðU2ðU2ñU2ôU2ðU2ðp'¨°dÐ;Ðð)ð)ð)ð)ð)ñ)ô)ð)ðX8ð8ð8ð8ð8ñ8ô8ð8ðv>ð>ð>ð>ð>ñ>ô>ð>ðBe(ðe(ðe(ðe(ðe(˜ñe(ôe(ðe(ðP%(ð%(ð%(ð%(ð%(˜7ñ%(ô%(ð%(ðT*Ø+Ø/ððÐððððð˜<Ô<ñôðð"
ð
ð
ð
ð
<Ô)ñ
ô
ð
ð4ŒhðððððD”h¨°#´)À#Ä*ð
ð
ð
ð
ð<4ð4ð4ð@ð@ð@ð
ð
ð
ð ˆzÒÐØ€DF„F€F€F€FðÐs®5µAÁA