-=[ Mr. Bumblebee ]=-
_Indonesia_

Path : /usr/lib/python2.7/dist-packages/bzrlib/transport/
File Upload :
Current File : //usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pyc


X`Oc@@sdZddlmZddlmZddlZddlZddlZddlZddl	Z	ddl
mZmZm
Z
mZmZmZddlmZmZmZmZddlmZddlmZmZmZdd	lmZyddlZWn%ek
r%Z ej!d
e nXyddl"Z"Wn%ek
r]Z ej!de nXdefd
YZ#defdYZ$de%fdYZ&defdYZ'dZ(dS(sImplementation of Transport over gio.

Written by Mattias Eriksson <snaggen@acc.umu.se> based on the ftp transport.

It provides the gio+XXX:// protocols where XXX is any of the protocols
supported by gio.
i(tabsolute_import(tStringION(tconfigterrorstosutilsturlutilstdebugtui(tDEPRECATED_PARAMETERt
deprecated_intdeprecated_passedtwarn(tmutter(t
FileStreamtConnectedTransportt
_file_streams(t
TestServertglibtgiotGioLocalURLServercB@s eZdZdZdZRS(sA pretend server for local transports, using file:// urls.

    Of course no actual server is required to access the local filesystem, so
    this just exists to tell the test code how to get to it.
    cC@sdS(N((tself((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pytstart_serverLscC@sdtjdS(sSee Transport.Server.get_url.sgio+t(Rtlocal_path_to_url(R((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pytget_urlOs(t__name__t
__module__t__doc__RR(((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pyREs	t
GioFileStreamcB@s)eZdZdZdZdZRS(sfA file stream object returned by open_write_stream.

    This version uses GIO to perform writes.
    cC@s;tj||||j||_|jj|_dS(N(R
t__init__t_get_GIOtgio_filetcreatetstream(Rt	transporttrelpath((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pyRZscC@s|jjdS(N(R!tclose(R((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pyt_close_scC@sOytjt||jWn+tjk
rJ}tjt|nXdS(N(	RtpumpfileRR!RtErrorRtBzrErrortstr(Rtbyteste((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pytwritebs(RRRRR%R,(((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pyRTs		t
GioStatResultcB@seZdZRS(cC@sj|jd}|j|_|j}|tjkrHtj|_n|tj	krftj
|_ndS(Nsstandard::size,standard::type(t
query_infotget_sizetst_sizet
get_file_typeRtFILE_TYPE_REGULARtstattS_IFREGtst_modetFILE_TYPE_DIRECTORYtS_IFDIR(Rtftinfottype((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pyRms(RRR(((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pyR-kstGioTransportcB@s+eZdZddZdZdZdZdZddZ	dZ
dZd	Zd
Z
ddZdd
ZddZddZdZdZddZdZdZdZdZdZdZdZdZdZdZdZddZ RS( s2This is the transport agent for gio+XXX:// access.cC@s|jdst|ntj|tddt\}}}}}}d|krv|jdd\}	}nddddd	d
dg}
||
krtj|dd
dj|
n|||dddf}tj	||_
tt|j
|d|dS(s>Initialize the GIO transport and make sure the url is correct.sgio+tallow_fragmentst@itdavtfiletftptobextsftptsshtsmbtextras"GIO support is only available for s, Rt_from_transportN(t
startswitht
ValueErrorturlparsetlentFalsetrsplitRt
InvalidURLtjoint
urlunparseturltsuperR;R(RtbaseRFtschemetnetloctpathtparamstquerytfragmenttusertgio_backendstu((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pyRzs1cC@s:tj|j|}t|tr6tj|n|S(N(RRNRPt
isinstancetunicodeRRM(RR#tfull_url((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pyt_relpath_to_urlscC@s_|j}|dkr=|j\}}|j||n|j|}tj|}|S(s/Return the ftplib.GIO instance for this object.N(t_get_connectiontNonet_create_connectiont_set_connectionR_RtFile(RR#t
connectiontcredentialstfileurlR?((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pyRsc
	C@stj}tjj|j}d}|tj@r|tj	@rd|j
jfd}	|j|j
|j
d|jdtd|	}
|
jdd\}}|j||j|n|tj@r|j|j
|j
d|jdt}|j|nL|tj	@rMd|j
jfd}	tjjd|	}|j|n|tj@r|dkru|j}n|j|j
|j
|d|j}|j|n|jtjdS(	Nu%su %(host)s DOMAIN\usernametporttasktprompts\iu %(host)s DOMAIN(RtAuthenticationConfigRtURLtfrom_stringRPRaRtASK_PASSWORD_NEED_USERNAMEtASK_PASSWORD_NEED_DOMAINRStuppertget_userthostRhtTruetsplittset_usernamet
set_domainRt
ui_factorytget_usernametASK_PASSWORD_NEED_PASSWORDtget_passwordtset_passwordtreplytMOUNT_OPERATION_HANDLED(
Rtoptmessagetdefault_usertdefault_domaintflagstautht
parsed_urlRYRjtuser_and_domaintdomaintpassword((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pyt_auth_cbs:

	



cC@say|j||jjWn<tjk
r\}|jjtjdt|nXdS(Ns$Failed to mount the given location: (tmount_enclosing_volume_finishtlooptquitRR'RR(R)(RtobjtresR+((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pyt_mount_done_cbs

c	C@sl|dkr(|jj|jj}}n|\}}ytj|j}d}y|j}Wntjk
r}|j	tj
kr tj|_
tjjd|jtj}|r|j|n|r|j|n|jd|j|j||j}|j
jq nXWn8tjk
r[}tjddt|d|nX|||ffS(NsMounting %s using GIOsask-passwordtmsgsError setting up connection: %st
orig_error(Rat_parsed_urlRYRRRdRPtfind_enclosing_mountR'tcodetERROR_NOT_MOUNTEDRtMainLoopRRRwtshow_messagetMountOperationRuR{tconnectRtmount_enclosing_volumeRtrunRtTransportErrorR)(	RRfRYRRetmountR+R~tm((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pyRbs4	cC@sdS(N((R((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pyt
disconnectscC@s5|j}|j|\}}|j||dS(s<Create a new connection with the previously used credentialsN(t_get_credentialsRbRc(RRfRe((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pyt
_reconnectscC@s|jj|jS(N(RtcloneRU(RR#((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pyt_remote_pathscC@sykdtjkr#td|n|j|}t|}tj|jsbtj|jrft	St
SWn<tjk
r}|j
tjkrt
S|j||nXdS(sDoes the target location exist?RsGIO has check: %sN(Rtdebug_flagsRRR-R3tS_ISREGR5tS_ISDIRRsRKRR'RtERROR_NOT_FOUNDt_translate_gio_error(RR#R8tstR+((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pythass$icC@syedtjkr#td|n|j|}|j}|j}|jt|}|SWnZtjk
r}|j	tj
krtj|ddt
|q|j||nXdS(sdGet the file at the given relative path.

        :param relpath: The relative path to the file
        :param retries: Number of retries after temporary failures so far
                        for this operation.

        We're meant to return a file-like object which bzr will
        then read from. For now we do this via the magic of StringIO
        RsGIO get: %sREs3Failed to get file, make sure the path is correct. N(RRRRtreadR$RRR'RRRt	PathErrorR)R(RR#tretriesR8tfintbuftretR+((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pytgets

cC@s|dtjkr td|nd|tjtjtjddf}d}d}zt	}y|j
|}|j}t}|j
||}|jt	}|j||j
|}	|j|	dtjd}|dk	r|j||n|SWn&tjk
r-}
|j|
|nXWd|rR|dk	rR|jn|dk	rw|jrw|jnXdS(sCopy the file-like object into the location.

        :param relpath: Location to put the contents, relative to base.
        :param fp:       File-like or string object.
        RsGIO put_file %ss%s.tmp.%.9f.%d.%diiRN(RRRttimetostgetpidtrandomtrandintRaRsRR RKt_pumpR$R3tmoveRtFILE_COPY_OVERWRITEt_setmodeR'Rtquery_existstdelete(RR#tfptmodettmppathR8tfouttclosedtlengthtdestR+((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pytput_file/s8


cC@szyMdtjkr#td|n|j|}|j|j||Wn&tjk
ru}|j||nXdS(s%Create a directory at the given path.Rs
GIO mkdir: %sN(	RRRRtmake_directoryRRR'R(RR#RR8R+((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pytmkdirSs
cC@sedtjkr td|n|dk	r?|j||nt||}|t|j|<|S(s See Transport.open_write_stream.RsGIO open_write_stream %sN(RRRRaRRRtabspath(RR#Rtresult((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pytopen_write_stream^scC@s dtjkrtdndS(sSee Transport.recommended_page_size().

        For FTP we suggest a large page size to reduce the overhead
        introduced by latency.
        RsGIO recommended_pagei@ii(RRR(R((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pytrecommended_page_sizehs
cC@sypdtjkr#td|n|j|}tj|jr`|j|}|jntj	|Wnvt
jk
r}|j||nQtj	k
r}|n6t
k
r}td||ftj|nXdS(s Delete the directory at rel_pathRsGIO rmdir %ssfailed to rmdir %s: %sN(RRRR3RR5RRRt
NotADirectoryRR'Rt	ExceptionR(RR#RR8R+((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pytrmdirrs
	c
C@sdtjkr td|nd|tjtjtjddf}y/d}|j|}|j|}|j	}y?t
|}	|	j}|j}
|j
|
||
jWn;tjk
r}|jtjkr|j||qnX|j
||}|jt
|}	|	j||krbtjd|	j||||fn|j|dtj|SWn&tjk
r}|j||nXdS(	sQAppend the text in the file-like object into the final
        location.
        RsGIO append_file: %ss%s.tmp.%.9f.%d.%diisOFailed to append size after (%d) is not original (%d) + written (%d) total (%d)RN(RRRRRRRRRR R-R0RRR$RR'RRRRR(RR(
RR#R?RRRtfotfiRR9RR+R((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pytappend_files8	
	 cC@sdtjkr td|n|ry&|j|}|jtj|Wqtjk
r}|jtj	krtdt
||j|t|q|j
||qXndS(sQSet permissions on a path.

        Only set permissions on Unix systems
        RsGIO _setmode %ss-GIO Could not set permissions to %s on %s. %sN(RRRRtset_attribute_uint32RtFILE_ATTRIBUTE_UNIX_MODER'RtERROR_NOT_SUPPORTEDtoctRR)R(RR#RR8R+((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pyRs%cC@s~yQdtjkr%td||n|j|}|j|}|j|Wn&tjk
ry}|j||nXdS(s"Rename without special overwritingRsGIO move (rename): %s => %sN(RRRRRRR'R(Rtrel_fromtrel_toR8ttR+((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pytrenamescC@syZdtjkr%td||n|j|}|j|}|j|dtjWn&tjk
r}|j|t	nXdS(s3Move the item at rel_from to the location at rel_toRsGIO move: %s => %sRN(
RRRRRRRR'Rtrelfrom(RRRR8RR+((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pyRscC@siy<dtjkr"td|n|j|}|jWn&tjk
rd}|j||nXdS(sDelete the item at relpathRsGIO delete: %sN(RRRRRRR'R(RR#R8R+((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pyRscC@s)dtjkr"td|jn|jS(s,See bzrlib.transport.Transport.external_url.RsGIO external_url(RRRRR(R((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pytexternal_urlscC@s dtjkrtdntS(sSee Transport.listable.RsGIO listable(RRRRs(R((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pytlistables
cC@sdtjkrtdny\g}|j|}|jtj}x*|D]"}|jtj	|j
qMW|SWn&tjk
r}|j||nXdS(sSee Transport.list_dir.RsGIO list_dirN(
RRRRtenumerate_childrenRtFILE_ATTRIBUTE_STANDARD_NAMEtappendRtescapetget_nameR'R(RR#tentriesR8tchildrentchildR+((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pytlist_dirs

 cc@sdtjkrtdnt|jd}x|r|jd}|j|}tj|jrxCt	|j|D]$\}}|j
||d|qWq4|Vq4WdS(sYSee Transport.iter_files_recursive.

        This is cargo-culted from the SFTP transportRsGIO iter_files_recursivet.it/N(RRRtlistRtpopR3RR5t	enumeratetinsert(RtqueueR#Rtitbasename((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pytiter_files_recursives
	"cC@soy<dtjkr"td|n|j|}t|SWn,tjk
rj}|j||ddnXdS(s'Return the stat information for a file.RsGIO stat: %sREs
error w/ statN(RRRRR-RR'R(RR#R8R+((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pyR3scC@s?dtjkrtd|ndtfdY}||S(sLock the given file for shared (read) access.
        :return: A lock object, which should be passed to Transport.unlock()
        Rs
GIO lock_readt	BogusLockcB@seZdZdZRS(cS@s
||_dS(N(RU(RRU((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pyR!scS@sdS(N((R((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pytunlock$s(RRRR(((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pyRs	(RRRtobject(RR#R((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pyt	lock_reads
cC@s,dtjkrtd|n|j|S(sLock the given file for exclusive (write) access.
        WARNING: many transports do not support this, so trying avoid using it

        :return: A lock object, whichshould be passed to Transport.unlock()
        RsGIO lock_write(RRRR(RR#((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pyt
lock_write)scC@sdtjkr,tdt||fn|dkrGt|}n|jtjkrqtj	|d|nU|jtj
krtj|d|n+|jtjkrtj
|d|n|jtjkrtj|d|n|jtjkrtj|d|n|jtjkrCtj|d|n|jtjkrmtj|d|nY|jtjkrtj|d|n/td||tj|ddt|dS(NRsGIO Error: %s %sREs+unable to understand error for path: %s: %ssUnhandled gio error: (RRRR)RaRRRRt
NoSuchFiletERROR_EXISTSt
FileExiststERROR_NOT_DIRECTORYRtERROR_NOT_EMPTYtDirectoryNotEmptyt
ERROR_BUSYtResourceBusytERROR_PERMISSION_DENIEDtPermissionDeniedtERROR_HOST_NOT_FOUNDRtERROR_IS_DIRECTORY(RterrRURE((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pyR3s.N(!RRRRaRR_RRRRbRRRRRRRRRRRRRRRRRRRR3RRR(((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pyR;ws<			&					$
	
	(				
					
		
cC@sddlm}ttfgS(s.Return the permutations to be used in testing.i(ttest_server(tbzrlib.testsRR;R(R((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pytget_test_permutationsNs()Rt
__future__Rt	cStringIORRRR3RRItbzrlibRRRRRRtbzrlib.symbol_versioningRR	R
Rtbzrlib.traceRtbzrlib.transportR
RRtbzrlib.tests.test_serverRRtImportErrorR+tDependencyNotPresentRRRRR-R;R(((sB/usr/lib/python2.7/dist-packages/bzrlib/transport/gio_transport.pyt<module>s4."

Copyright © 2017 || Recoded By Mr.Bumblebee