-=[ Mr. Bumblebee ]=-
_Indonesia_

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


Y#Oc@@sdZddlmZddlmZddlmZddlZddlmZee	dddl
mZmZdd	l
mZmZmZmZmZmZdd
lmZmZmZmZddlZ
ddlmZddlTdd
lmZddlm Z m!Z!m"Z"m#Z#m$Z$ddl%m&Z&m'Z'de"fdYZ(de$fdYZ)de)fdYZ*e+e+dZ,dZ-dS(s-Weave - storage of related text file versionsi(tabsolute_import(tcopy(tStringION(tlazy_imports
from bzrlib import tsort
(terrorstosutils(t
WeaveErrortWeaveFormatErrortWeaveParentMismatchtRevisionAlreadyPresenttRevisionNotPresenttUnavailableRepresentation(tdirnametshatsha_stringstsplit_lines(t
NULL_REVISION(t*(tmutter(tAbsentContentFactorytadapter_registrytContentFactorytsort_groupcompresst
VersionedFile(t_read_weave_v5twrite_weave_v5tWeaveContentFactorycB@s eZdZdZdZRS(sMContent factory for streaming from weaves.

    :seealso ContentFactory:
    cC@swtj||j|g||_|f|_|j|g|}td|D|_d|_||_	dS(s4Create a WeaveContentFactory for version from weave.cs@s|]}|fVqdS(N((t.0tparent((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pys	<genexpr>qstfulltextN(
Rt__init__t	get_sha1stsha1tkeytget_parent_mapttupletparentststorage_kindt_weave(tselftversiontweaveR$((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyRks
	cC@s_|dkr#|jj|jdS|dkrF|jj|jdSt|j|ddS(NRitchunked(R&tget_textR!t	get_linesR(R'R%((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pytget_bytes_asus
(t__name__t
__module__t__doc__RR-(((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyRes	
tWeavecB@seZdZddddddddgZd.d	d.d.ed
ZdZdZd
Z	dZ
dZdZdZ
dZdZeZdZdZdZdZdZdZd.d.dZdZedZdZdZdZd Zd.d.d!Zd.d"Z d#Z!d$Z"d%Z#d&Z$d'Z%d(Z&e&Z'd.d)Z(d*Z)d+Z*d,Z+d-Z,RS(/sweave - versioned text file storage.

    A Weave manages versions of line-based text files, keeping track
    of the originating version for each line.

    To clients the "lines" of the file are represented as a list of strings.
    These strings  will typically have terminal newline characters, but
    this is not required.  In particular files commonly do not have a newline
    at the end of the file.

    Texts can be identified in either of two ways:

    * a nonnegative index number.

    * a version-id string.

    Typically the index number will be valid only inside this weave and
    the version-id is used to reference it in the larger world.

    The weave is represented as a list mixing edit instructions and
    literal text.  Each entry in _weave can be either a string (or
    unicode), or a tuple.  If a string, it means that the given line
    should be output in the currently active revisions.

    If a tuple, it gives a processing instruction saying in which
    revisions the enclosed lines are active.  The tuple has the form
    (instruction, version).

    The instruction can be '{' or '}' for an insertion block, and '['
    and ']' for a deletion block respectively.  The version is the
    integer version index.  There is no replace operator, only deletes
    and inserts.  For '}', the end of an insertion, there is no
    version parameter because it always closes the most recently
    opened insertion.

    Constraints/notes:

    * A later version can delete lines that were introduced by any
      number of ancestor versions; this implies that deletion
      instructions can span insertion blocks without regard to the
      insertion block's nesting.

    * Similarly, deletions need not be properly nested with regard to
      each other, because they might have been generated by
      independent revisions.

    * Insertions are always made by inserting a new bracketed block
      into a single point in the previous weave.  This implies they
      can nest but not overlap, and the nesting must always have later
      insertions on the inside.

    * It doesn't seem very useful to have an active insertion
      inside an inactive insertion, but it might happen.

    * Therefore, all instructions are always"considered"; that
      is passed onto and off the stack.  An outer inactive block
      doesn't disable an inner block.

    * Lines are enabled if the most recent enclosing insertion is
      active and none of the enclosing deletions are active.

    * There is no point having a deletion directly inside its own
      insertion; you might as well just not write it.  And there
      should be no way to get an earlier version deleting a later
      version.

    _weave
        Text of the weave; list of control instruction tuples and strings.

    _parents
        List of parents, indexed by version number.
        It is only necessary to store the minimal set of parents for
        each version; the parent's parents are implied.

    _sha1s
        List of hex SHA-1 of each version.

    _names
        List of symbolic names for each version.  Each should be unique.

    _name_map
        For each name, the version number.

    _weave_name
        Descriptive name of this weave; typically the filename if known.
        Set by read_weave.
    R&t_parentst_sha1st_namest	_name_mapt_weave_namet_matchert_allow_reservedtwcC@stt|jg|_g|_g|_g|_i|_||_|dkrgt
jj|_
n	||_
|dkrd}n||_||_||_||_dS(sCreate a weave.

        :param get_scope: A callable that returns an opaque object to be used
            for detecting when this weave goes out of scope (should stop
            answering requests or allowing mutation).
        cS@sdS(N(tNone(((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyt<lambda>sN(tsuperR1RR&R2R3R4R5R6R:tbzrlibtpatiencedifftPatienceSequenceMatcherR7t
_get_scopet_scopet_access_modeR8(R't
weave_nametaccess_modetmatchert	get_scopetallow_reserved((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyRs 									cC@sd|jS(Ns	Weave(%r)(R6(R'((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyt__repr__scC@sI|j|jkr$tjn|jdkrEtj|ndS(s<Is the versioned file marked as 'finished' ? Raise if it is.R9N(R@RARtOutSideTransactionRBtReadOnlyObjectDirtiedError(R'((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyt_check_write_okscC@s_t}|j|_|j|_|j|_|j|_|jj|_|j|_|S(scReturn a deep copy of self.

        The copy can be modified without affecting the original weave.(R1R&R2R3R4R5RR6(R'tother((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyRs	



cC@sGt|tstS|j|jkoF|j|jkoF|j|jkS(N(t
isinstanceR1tFalseR2R&R3(R'RL((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyt__eq__s
cC@s|j|S(N(RO(R'RL((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyt__ne__scC@s|j|S(N(R4(R'R(((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyt_idx_to_namescC@sR|js|j|ny|j|SWn#tk
rMt||jnXdS(s'Convert symbolic version name to index.N(R8tcheck_not_reserved_idR5tKeyErrorR
R6(R'tname((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyt_lookups	
cC@s|jS(sSee VersionedFile.versions.(R4(R'((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pytversions!scC@s
||jkS(sSee VersionedFile.has_version.(R5(R't
version_id((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pythas_version%scc@sg|D]}|d^q}|dkrr|j|}tj|}|jt|jt||}nR|dkr|j|}t|}|jt|jt||}nx9|D]1}||krt||Vqt|fVqWdS(sNGet a stream of records for versions.

        :param versions: The versions to include. Each version is a tuple
            (version,).
        :param ordering: Either 'unordered' or 'topological'. A topologically
            sorted stream has compression parents strictly before their
            children.
        :param include_delta_closure: If True then the closure across any
            compression parents will be included (in the opaque data).
        :return: An iterator of ContentFactory objects, each of which is only
            valid until the iterator is advanced.
        ittopologicalt
groupcompressN(	R"ttsortt	topo_sorttextendtsett
differenceRRR(R'RVtorderingtinclude_delta_closureR(R$tnew_versions((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pytget_record_stream+s
"	"	
cC@s}i}xp|D]h}|tkr(d}nCy,tt|j|j|j|}Wntk
rjq
nX|||<q
W|S(s!See VersionedFile.get_parent_map.((RR#tmapRQR2RUR
(R'tversion_idstresultRWR$((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyR"Is
		 
cC@st|jdS(N(tNotImplementedErrortget_parents_with_ghosts(R'RW((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyRhYsc
C@sPi}xC|D];}|jdkr>t|jdg|ng|jD]}|d^qH}|jdks||jdkr|j|jd|tj|jdq
|jdf}y||}Wn6tk
rt	j
|}||}|||<nXt|j|}	y|j|jd||	Wq
t
k
rGq
Xq
WdS(sInsert a record stream into this versioned file.

        :param stream: A stream of records to insert.
        :return: None
        :seealso VersionedFile.get_record_stream:
        tabsentiRR*N(R%R
R!R$t	add_linesRtchunks_to_linesR-RSRtgetRt	get_bytesR	(
R'tstreamtadapterstrecordRR$tadapter_keytadaptertadapter_factorytlines((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pytinsert_record_stream\s*
 

cC@sZ|j|}t|j|t|ksA||j|krVt||jn|S(stCheck that a duplicated add is OK.

        If it is, return the (old) index; otherwise raise an exception.
        (RUtsortedR2R3R	R6(R'RTR$ttextR tidx((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyt_check_repeated_add|s
c	
C@sI|j||t|j|d|}	t|ttt||	fS(sSee VersionedFile.add_lines.tnostore_sha(t_addRdRURtsumtlen(
R'RWR$Rttparent_textstleft_matching_blocksRzt	random_idt
check_contentRx((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyt
_add_liness	cC@s|j||j||s/t|}n||krGtjn|d
kr`d|}n||jkr|j||||S|j|t	|j
}|j
j||jj||j
j|||j|<|s(|r$|jjd|f|jj||jjdn|St	|dkrdt|d}||j|krd|Sn|j|}|j}	g}
g}x:|j|D])\}}
}|
j|
|j|qW||kr|S|
jt	|j|jd
||}d}x|jD]\}}}}}|dkr:qn|
|}|
|}||kr|jj||d|f|jj||dd|f|d	7}n||kr||}d|fg|||!dg|j||+|d	||7}qqW|S(
sAdd a single text on top of the weave.

        Returns the index number of the newly added version.

        version_id
            Symbolic name for this version.
            (Typically the revision-id of the revision that added it.)
            If None, a name will be allocated based on the hash. (sha1:SHAHASH)

        parents
            List or set of direct parent version numbers.

        lines
            Sequence of lines to be added in the new version.

        :param nostore_sha: See VersionedFile.add_lines.
        ssha1:t{t}iitequalt[t]iN(RN(RN(t_check_lines_not_unicodet_check_lines_are_linesRRtExistingContentR:R5Ryt_check_versionsR}R2tappendR3R4R&R]tlistt_inclusionst_extractR7tget_opcodestinsert(R'RWRtR$R Rztnew_versiontpvt	ancestorstltbasis_linenotbasis_linestorigintlinenotlinetstoffsetttagti1ti2tj1tj2ti((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyR{sh




	
	"

!

+cC@sft|sgSt|}xCtt|ddD])}||kr5|j|j|q5q5W|S(s0Return set of all ancestors of given version(s).ii(R}R^txrangetmaxtupdateR2(R'RVRtv((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyRscC@sft|tr|g}n|jg|D]}|j|^q(}g|D]}|j|^qMS(sSee VersionedFile.get_ancestry.(RMt
basestringRRURQ(R'Rettopo_sortedRR((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pytget_ancestrys+cC@set|ts(tdt|nx6|D].}t|ts/tdt|q/q/WdS(Nstext should be a list, not %ss/text line should be a string or unicode, not %s(RMRt
ValueErrorttypeR(R'RwR((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyt_check_liness
cC@sHxA|D]9}y|j|Wqtk
r?td|qXqWdS(s4Check everything in the sequence of indexes is validsinvalid version number %rN(R2t
IndexError(R'tindexesR((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyR%s


cC@st|j|dkS(sDuring join check that other_parents are joinable with my_parents.

        Joinable is defined as 'is a subset of' - supersets may require
        regeneration of diffs, but subsets do not.
        i(R}R_(R't
my_parentst
other_parents((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyt_compatible_parents-scC@sJ|j|g}g|j|D]$\}}}|j||f^q"S(s~Return a list of (version-id, line) tuples for version_id.

        The index indicates when the line originated in the weave.(RURRQ(R'RWtinclsRRRw((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pytannotate5scc@s|dkr|j}nt|}xb|j|D]Q\}}}}||kr[q7n|ddkr}|d|fVq7||fVq7WdS(s<See VersionedFile.iter_lines_added_or_present_in_versions().is
N(R:RVR^t_walk_internal(R'RetpbRtinsertedtdeletesR((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyt'iter_lines_added_or_present_in_versions=s"c	c@s:g}t}d}x|jD]}|jtkr|\}}d}|dkri|j|j|q|dkr|jq|dkr|j|j|q|dkr|j	|j|qt
d|n||dt||fV|d7}qW|rt
d	|n|r6t
d
|ndS(s Helper method for weave actions.iRRRRsunexpected instruction %riis-unclosed insertion blocks at end of weave: %ss,unclosed deletion blocks at end of weave: %sN(R^R&t	__class__R#R:RR4tpoptaddtremoveRt	frozenset(	R'RetistacktdsetRRtcRtisactive((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyRJs0	

cc@smt|j|g}t|j|g}||@}x,|j||gD]\}}}}	||@rzd|	fVqP||krt||@}
t||@}|
r|rd|	fVqe|
rd|	fVqe|rd|	fVqed|	fVqP||kr(||@rd|	fVqed|	fVqP||krZ||@rLd|	fVqed	|	fVqPd
|	fVqPWdS(sReturn pseudo-annotation indicating how the two versions merge.

        This is computed between versions a and b and their common
        base.

        Weave lines present in none of them are skipped entirely.
        skilled-baseskilled-bothskilled-askilled-bt	unchangedsghost-asnew-asghost-bsnew-bt
irrelevantN(R^RRtbool(R'tver_atver_btinc_atinc_btinc_cRRt	deletesetRtkilled_atkilled_b((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyt
plan_mergeks2
(


cC@sx,|D]$}t|tst|qqW|j|}g}t}t}d}d
}g}	t}
x8|jD]-}|jt	krL|\}}
d
}|dkr|j
|
|j|
q|dkr|j|j
q|dkr|
|krI|j|
qIq|dkr@|
|krI|j|
qIqtnO|d
krx|or|or|d|k}n|r|	j
|d||fn|d7}qxW|rtd|n|rtd	|n|	S(s+Yield annotation of lines in included set.

        Yields a sequence of tuples (origin, lineno, text), where
        origin is the origin version, lineno the index in the weave,
        and text the text of the line.

        The set typically but not necessarily corresponds to a version.
        iRRRRiis-unclosed insertion blocks at end of weave: %ss,unclosed deletion blocks at end of weave: %sN(RMtintRRR^R:RR&RR#RRRRtAssertionError(R'RVRtincludedRtisetRRRRftWFERRR((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyRsN	
		
 

cC@s*t|ttfr|S|j|SdS(sgConvert possible symbolic name to index, or pass through indexes.

        NOT FOR PUBLIC USE.
        N(RMRtlongRU(R't
name_or_index((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyt
_maybe_lookupsc	C@s|j|}g|j|gD]\}}}|^q"}|j|}t|}||krtjd|j|||fn|S(sSee VersionedFile.get_lines().s/file %s, revision %s, expected: %s, measured %s(RRR3RRtWeaveInvalidChecksumR6(	R'RWt	int_indexRRRRft
expected_sha1t
measured_sha1((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyR,s.
	cC@s5i}x(|D] }|j|j|||<q
W|S(sSee VersionedFile.get_sha1s().(R3RU(R'ReRfR((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyRs
cC@st|j}|S(s$How many versions are in this weave?(R}R2(R'R((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pytnum_versions
scC@sxmt|jD]Y}t|j|}|r|j|d|krltd|d|fqlqqW|j}i}i}i}xt|D]}|j|}t||<g||<t|g}	x/|j|D] }
|	j	||j|
qWt|	t|j
|krWtdt|	t|j
|fn|	||<qWt|j
}d}|jrtjj|j}
d|
f}|d }nx|jD]v\}}}}|r|j	|||nxE|jD]7\}}||kr||@r||j	|qqWqWxkt|D]]}|j|}||j}|j|}||krFtjd|||fqFqFWdS(Nis(invalid included version %d for index %dsfailed %s != %sschecking weaveschecking %sis3mismatched sha1 for version %s: got %s, expected %s(trangeRRR2tsortRRQR
R^RRRR}R&R6tostpathtbasenameRtitemst	hexdigestR3RR(R'tprogress_barR(t
inclusionstnvtsha1sttextsRRTtnew_inctptnlinestupdate_textt
short_nameRRRRtname_inclusionsthdtexpected((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pytchecksV


!(	


cC@sug}xh|j|D]Y}|j|}||jkrYtd||j||fn|j|j|qW|S(sAReturn list of parents in self corresponding to indexes in other.s!missing parent {%s} of {%s} in %r(R2R4R5RR(R'RLt	other_idxtnew_parentst
parent_idxtparent_name((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyt_imported_parentsSs
c
C@s|jj|d}|dkr|j||j|krStj|||n|j|}|j|}tg|D]}|j|^qw}tg|D]}|j|^q}	|j||	st	d|||	fqt
SntSdS(sMCheck if a version in consistent in this and other.

        To be consistent it must have:

         * the same text
         * the same direct parents (by name, not index, and disregarding
           order)

        If present & correct return True;
        if not present in self return False;
        if inconsistent raise error.is/inconsistent parents for version {%s}: %s vs %sN(R5RlR3RtWeaveTextDiffersR2R^R4RRtTrueRN(
R'RLRRTtthis_idxtself_parentsRRtn1tn2((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyt_check_version_consistent_s

&&cC@s,t||d|d|}|j|dS(sReweave self with other - internal helper for join().

        :param other: The other weave to merge
        :param pb: An optional progress bar, indicating how far done we are
        :param msg: An optional message for the progress
        RtmsgN(t_reweavet_copy_weave_content(R'RLRRt	new_weave((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyR{scC@sFx?|jD]4}|dkr
t||tt||q
q
WdS(s#adsorb the content from otherweave.R6N(t	__slots__tsetattrRtgetattr(R't
otherweavetattr((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyRsN(-R.R/R0RR:RNRRHRKRRORPRQRURVRXt__contains__RcR"RhRuRyRR{RRRRRRRRRRRRR,RRt__len__RRRRR(((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyR1~sVW				
											 		x	
				!	,	U	
	
		B			
t	WeaveFilecB@s\eZdZdZd	edd	dZdZdZdZ	e
dZdZRS(
s<A WeaveFile represents a Weave on disk and writes on change.s.weaveR9cC@stt|j||d|dt||_||_y6|jj|tj}tt	|j
|Wn*tjk
r|sn|j
nXdS(s]Create a WeaveFile.

        :param create: If not True, only open an existing knit.
        RFRGN(R<RRRNt
_transportt	_filemodeRltWEAVE_SUFFIXRRtreadRt
NoSuchFilet_save(R'RTt	transporttfilemodetcreateRDRFtf((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyRs		c	
	C@sH|j|tt|j||||||||}	|j|	S(s!Add a version and save the weave.(RRR<RRR
(
R'RWR$RtR~RRzRRRf((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyRs
	
cC@sDt}t|||jd|j|tj||jdS(sSee VersionedFile.copy_to().iN(RRtseektput_fileRR
R	(R'RTRtsio((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pytcopy_tos	

cC@s|jt}t|||jd|j}|jtj}y|jj	|||j
WnCtjk
r|jj
t||jj	|||j
nXdS(sSave the weave.iN(RKRRRtgetvalueR6RR
Rt	put_bytesR	RRtmkdirR(R'RtbytesR((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyR
s
	

cC@s
tjgS(s!See VersionedFile.get_suffixes().(RR
(((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pytget_suffixesscC@s$tt|j||jdS(N(R<RRuR
(R'Rn((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyRusN(
R.R/R0R
R:RNRRRR
tstaticmethodRRu(((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyRs	
		cC@st}d}}t|j}t|j}t||}	td|	tj|	j}
td|
|r|rd}nxMt|
D]?\}}|r|j	||t
|
n||jkr|j|}
||jkr|j|}|
|krtd|td|j
|j
ddl}t|j|
||j
|j
}
tdd	j|
tj|||qqn|j|}
|j||
g|	|D]}|j|^qqW|S(
sBCombine two weaves and return the result.

    This works even if a revision R has different parents in
    wa and wb.  In the resulting weave all the parents are given.

    This is done by just building up a new weave, maintaining ordering
    of the versions in the two inputs.  More efficient approaches
    might be possible but it should only be necessary to do
    this operation rarely, when a new previously ghost version is
    inserted.

    :param pb: An optional progress bar, indicating how far done we are
    :param msg: An optional message for the progress
    iscombined parents: %rsorder to reweave: %rtreweaves%Weaves differ on content. rev_id {%s}sweaves: %s, %sNs	lines:
%st(R1RRt_reweave_parent_graphsRR[R\t	iteritemst	enumerateRR}R5R,R6tdifflibRtunified_difftjoinRRR{RU(twatwbRRtwrtiatibtqueue_atqueue_btcombined_parentstorderRxRTRttlines_bR!R((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyRs8	



	
7cC@svi}xi||gD][}xRt|jD]A\}}|j|t}|jt|j|j|q)WqW|S(slReturn combined parent ancestry for two weaves.

    Returned as a list of (version_name, set(parent_names))(R R4t
setdefaultR^RRdRQR2(R$R%tcombinedR)RxRTR((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyRs((.R0t
__future__RRt	cStringIORRtbzrlib.lazy_importRtglobalsR=RRt
bzrlib.errorsRRRR	R
Rtbzrlib.osutilsRR
RRtbzrlib.patiencedifftbzrlib.revisionRtbzrlib.symbol_versioningtbzrlib.traceRtbzrlib.versionedfileRRRRRtbzrlib.weavefileRRRR1RR:RR(((s0/usr/lib/python2.7/dist-packages/bzrlib/weave.pyt<module>s00	."
(A2

Copyright © 2017 || Recoded By Mr.Bumblebee