
    q&fgq                     0   d dl mZ d dlmZmZmZmZmZmZ d dl	m
ZmZ  ej                  d      Z ej                  d      Zej"                  Zeej$                  Znej$                  ZdZdZd Zd	Zd
Z G d d      Z G d de      Ze G d de      Zyy)   )_)errorpathutilpolicytestingtxnutilutil)docketv2parsersdirstateNi          c                       e Zd ZdZdZdZd Zd Zd Zd Z	d Z
ddZd	 Zd
 Zd Zd Zd ZddZed        Zd Zd Zd ZddZy)_dirstatemapcommonz
    Methods that are identical for both implementations of the dirstatemap
    class, with and without Rust extensions enabled.
    Nc                 h   || _         || _        || _        || _        || _        d| _        d| _        d | _        d| _        d | _	        |j                  dd      }|dk(  rt        | _        d | _        y |dk(  rt        | _        d | _        y |dk(  rt        | _        d | _        y t        | _        d | _        y )	Ns   dirstate   Fs   devels   dirstate.v2.data_update_modes   autos   force-appends	   force-new)_use_dirstate_v2_nodeconstants_ui_opener_root	_filename_nodelen_parents_dirtyparents_docketconfigWRITE_MODE_AUTO_write_modeWRITE_MODE_FORCE_APPENDWRITE_MODE_FORCE_NEW_pendingmode)selfuiopenerrootnodeconstantsuse_dirstate_v2
write_modes          7/usr/lib/python3/dist-packages/mercurial/dirstatemap.py__init__z_dirstatemapcommon.__init__6   s     /+
$"YYx)HI
 .D ! ?*6D ! <'3D !  /D !    c                 .    | j                         | _        y N)_get_current_identityidentityr%   s    r,   _set_identityz _dirstatemapcommon._set_identityO   s    224r.   c                     	 t        j                  | j                  j                  | j                              S # t
        $ r Y y w xY wr0   )r	   	cachestatr   joinr   FileNotFoundErrorr3   s    r,   r1   z(_dirstatemapcommon._get_current_identityR   s;    	>>$,,"3"3DNN"CDD  		s   7: 	AAc                     dt        |       vry| j                  y| j                  j                         sy| j                         }|y|j                         sy|| j                  k7  S )Nr2   T)varsr2   	cacheabler1   )r%   current_identitys     r,   may_need_refreshz#_dirstatemapcommon.may_need_refreshX   sk    T$Z'== }}&&( 557#))+ 4==00r.   c                     | j                    y)z5Loads the underlying data, if it's not already loadedN_mapr3   s    r,   preloadz_dirstatemapcommon.preloadk   s	    		r.   c                 :    | j                   j                  ||      S r0   )r@   get)r%   keydefaults      r,   rC   z_dirstatemapcommon.geto   s    yy}}S'**r.   c                 ,    t        | j                        S r0   )lenr@   r3   s    r,   __len__z_dirstatemapcommon.__len__r   s    499~r.   c                 ,    t        | j                        S r0   iterr@   r3   s    r,   __iter__z_dirstatemapcommon.__iter__u   s    DIIr.   c                     || j                   v S r0   r?   )r%   rD   s     r,   __contains__z_dirstatemapcommon.__contains__x   s    diir.   c                      | j                   |   S r0   r?   )r%   items     r,   __getitem__z_dirstatemapcommon.__getitem__{   s    yyr.   c                    t        j                  | j                  | j                  | j                        \  }}| j
                  =| j
                  |k7  r.|j                          t        j                  t        d            || _        |S )Ns1   working directory state may be changed parallelly)
r   
trypendingr   r   r   r$   closer   Abortr   )r%   fpmodes      r,   _opendirstatefilez$_dirstatemapcommon._opendirstatefile   sq    %%djj$,,OD(T->->$-FHHJ++FG  !	r.   c                     	 | j                         5 }|j                  |      cd d d        S # 1 sw Y   y xY w# t        $ r Y yw xY w)Nr.   )rX   readr8   )r%   sizerV   s      r,   _readdirstatefilez$_dirstatemapcommon._readdirstatefile   sF    	'') %Rwwt}% % %  		s#   9 -	9 69 9 	AAc                    | j                   s| j                  st        j                  d      | j	                          | j                         }|dk(  s|j                  t        j                        r;t        j                  j                  || j                        | _         | j                   S t        j                  d      | j                   S )Ns'   dirstate only has a docket in v2 formatr.   s   dirstate is not in v2 format)r   r   r   ProgrammingErrorr4   r\   
startswith	docketmodV2_FORMAT_MARKERDirstateDocketparser   CorruptedDirstate)r%   datas     r,   r
   z_dirstatemapcommon.docket   s    ||((,,>   ))+Ds{dooi.H.HI(77==$-- 
 || --.MNN||r.   c                    d }d}|t         k  rC|dz  }	 | j                  j                  | j                  j	                               }|t         k  rC|'|t         k\  sJ d}||z  }t        j                  |      | j                  j                  | j                  j	                               S # t
        $ r
 d | _        Y xw xY w)Nr   r   s-   dirstate read race happened %d times in a row)	V2_MAX_READ_ATTEMPTSr   rZ   r
   data_filenamer8   r   r   rU   )r%   re   attemptsmsgs       r,   _read_v2_dataz _dirstatemapcommon._read_v2_data   s    --MH$||(()B)B)DE	 -- <3333BC8OC++c""||  !:!:!<== % $  $$s   3B- -C ?C c                    	 	  j                   }t        j                  j                   j                         t        |      |      }|.|j                  |j                  k(  rt        j                  d      |j                         	 j                  j                  	|       ||j                  	d       |j                  |j                                |j                          |j|j                  r^|j                         	||j                  	d       d	 fd	}|r)d|j                  z   }|j!                  ||       | _        y  |        | _        y # t        j                  $ r d }Y dw xY w)Ns   dirstate docket name collision   plainlocationc                 :    j                   j                        S r0   )r   unlink)_trrh   r%   s    r,   <lambda>z7_dirstatemapcommon.write_v2_no_append.<locals>.<lambda>   s    dll&9&9-&H r.   s   dirstate-v2-clean-r0   )r
   r   rd   r`   rb   with_new_uuidparentsrG   uuidr^   rh   r   write	addbackup	serializerT   addpostcloser   )
r%   trstmetapacked
old_docket
new_docketrq   categoryrh   s
   `        @r,   write_v2_no_appendz%_dirstatemapcommon.write_v2_no_append   sE   	J --;;LLNCK

 !joo&H(()JKK"002=&1>LLL: 	%%'(

 !joo&446M~]X>HF0:??B&1 " !M && 		 J		s   E E54E5c                 J   | j                   sP| j                  r4	 | j                   | j                  j                  | _         | j                   S | j                          | j                   S # t        j
                  $ r&}| j                  |       Y d }~| j                   S d }~ww xY wr0   )r   r   r
   ru   r   rd   _v1_parents)r%   es     r,   ru   z_dirstatemapcommon.parents   s    }}$$8KK
 %)KK$7$7DM }}   "}} .. ($$Q'' }}(s   A) )B"<BB"c                    | j                   dz  }| j                  |      }t        |      }||k(  r1|d | j                    || j                   d| j                   z   f| _        y |dk(  r2| j                  j
                  | j                  j
                  f| _        y d }|t        d      }t        j                  t        d      |      )Nr   r   s/   falling back to dirstate-v1 from v2 also faileds(   working directory state appears damaged!)	r   r\   rG   r   r   nullidr   r   rU   )r%   from_v2_exceptionread_lenr|   lhints         r,   r   z_dirstatemapcommon._v1_parents   s    ==1$##H-G=?T]]#4==1t}}#45DM !V##**##**DM
 D ,KL++=> r.   r0   ))__name__
__module____qualname____doc__r@   copymapr-   r4   r1   r=   rA   rC   rH   rL   rN   rQ   rX   r\   propertyr
   rk   r   ru   r    r.   r,   r   r   +   sx     DG!251&+ 
   >&)"Zr.   r   c                      e Zd ZdZed        Zed        Zd Zd ZeZ	d Z
d ZddZd	 Zd
 Zed        ZddZddZed        Zed        Zd Zd Zed        Zed        Z	 	 	 	 	 ddZd Zd Zd Zd Zd Zd Zy) dirstatemapa  Map encapsulating the dirstate's contents.

    The dirstate contains the following state:

    - `identity` is the identity of the dirstate file, which can be used to
      detect when changes have occurred to the dirstate file.

    - `parents` is a pair containing the parents of the working copy. The
      parents are updated by calling `setparents`.

    - the state map maps filenames to tuples of (state, mode, size, mtime),
      where state is a single character representing 'normal', 'added',
      'removed', or 'merged'. It is read by treating the dirstate as a
      dict.  File state is updated by calling various methods (see each
      documentation for details):

      - `reset_state`,
      - `set_tracked`
      - `set_untracked`
      - `set_clean`
      - `set_possibly_dirty`

    - `copymap` maps destination filenames to their source filename.

    The dirstate also provides the following views onto the state:

    - `filefoldmap` is a dict mapping normalized filenames to the denormalized
      form that they appear as in the dirstate.

    - `dirfoldmap` is a dict mapping normalized directory names to the
      denormalized form that they appear as in the dirstate.
    c                 H    i | _         | j                          | j                   S r0   )r@   rZ   r3   s    r,   r@   zdirstatemap._map-  s    			yyr.   c                 @    i | _         | j                   | j                   S r0   )r   r@   r3   s    r,   r   zdirstatemap.copymap3  s    		||r.   c                    | j                   j                          | j                  j                          | j                  | j                  j
                  | j                  j
                         t        j                  | d       t        j                  | d       t        j                  | d       t        j                  | d       y )N   _dirs   _alldirss   filefoldmap
   dirfoldmap)r@   clearr   
setparentsr   r   r	   clearcachedpropertyr3   s    r,   r   zdirstatemap.clear9  s    		++22D4G4G4N4NO  x0  {3  ~6  }5r.   c                 6    | j                   j                         S r0   r@   itemsr3   s    r,   r   zdirstatemap.itemsB  s    yy  r.   c              #      K   | j                         D ]6  \  }}||j                  |j                  |j                  |j                  f 8 yw)z
        Return an iterator of (filename, state, mode, size, mtime) tuples

        `all` is unused when Rust is not enabled
        N)r   staterW   r[   mtime)r%   allfilenamerP   s       r,   
debug_iterzdirstatemap.debug_iterH  sE      !%

 	KXtTZZDIItzzJJ	Ks   AAc                 6    | j                   j                         S r0   )r@   keysr3   s    r,   r   zdirstatemap.keysQ  s    yy~~r.   c                     ||f| _         d| _        i }|rb| j                  j                         D ]E  \  }}|j                  s| j
                  j                  |d       }|r|||<   |j                          G |S NT)r   r   r@   r   p2_infor   popdrop_merge_data)r%   p1p2fold_p2copiesfssources           r,   r   zdirstatemap.setparentsV  sw    R!		) (199!\\--a6F$*q	%%'( r.   c                 J   t        j                  | j                  d       | j                  rU	 | j                   | j                  j
                  sy t        j                  | j                  d       | j                         }n | j                          | j                         }|sy t        t        d      r&t        j                  t        |      dz        | _        | j                  r|	 | j                   | j                  j                   }| j                  j"                  }t%        j&                  t(        j*                        } || j                  | j,                  ||       nAt%        j&                  t        j*                        } || j                  | j,                  |      }| j.                  s | j0                  |  | j                  j2                  | _        | j                  j4                  | _        | j                  j6                  | _        y # t        j                  $ r$ | j                          | j                         }Y w xY w# t        j                  $ rD t%        j&                  t        j*                        } || j                  | j,                  |      }Y w xY w)N   dirstate.pre-read-file   dirstate.post-docket-read-filedict_new_presizedG   )r   wait_on_cfgr   r   r
   rv   rk   r   rd   r4   r\   hasattrr   r   rG   r@   ru   tree_metadatar	   nogcr   parse_dirstater   r   r   rN   rQ   rC   )r%   r|   pr}   r   s        r,   rZ   zdirstatemap.readf  s   DHH&?@  
* {{''##DHH.OP'') '')B 7/0  11#b'R-@DI   
B KK''{{00!%2+<+<!=tyy$,,DA!YYw'='=>Ntyy$,,;A!!DOOQ !II22990099==w ** .""$++-.R ** @!%7+A+A!B"499dllB?@s$   H (I 3IIAJ"!J"c                 p   | j                   rIt        j                  | j                  | j                        \  }}| j                  ||||       d| _
        y t        j                  | j                  | j                  | j                               }|j                  |       |j                          d| _
        y NF)r   r   pack_dirstater@   r   r   r   ru   rw   rT   r   )r%   r{   r|   r~   r}   s        r,   rw   zdirstatemap.write  s      ++DIIt||DLFD##BD&9 # **		4<<F HHVHHJ"r.   c                 2    | j                    | j                  S r0   r@   r2   r3   s    r,   r2   zdirstatemap.identity  s    		}}r.   Nc                     ||j                   r)d| j                  v r| j                  j                  |       |+d| j                  v r| j                  j                  |       yyy)z,increment the dirstate counter if applicableN_dirs_alldirs)removed__dict__r   addpathr   )r%   r   	old_entrys      r,   
_dirs_incrzdirstatemap._dirs_incr  s[     !2!2&JJx(t}}!<MM!!(+ "=r.   c                    |ad| j                   v r'|j                  s| j                  j                  |       d| j                   v rI|sG| j                  j                  |       n+|r)d| j                   v r| j                  j                  |       d| j                   v r2t        j                  |      }| j                  j                  |d       yy)z,decrement the dirstate counter if applicableNr   r   filefoldmap)
r   r   r   delpathr   r   r	   normcaser   r   )r%   r   r   remove_variantnormeds        r,   
_dirs_decrzdirstatemap._dirs_decr  s     $--'	0A0A

""8,T]]*>%%h/
dmm ;MM!!(+DMM)]]8,F  . *r.   c                 H   	 t         j                  } || j                  t        j                  t        j
                        S # t        $ r Y nw xY wi }t        j                  }| j                  j                         D ]  \  }}|j                  r|| ||      <    d|d<   |S )zeReturns a dictionary mapping normalized case paths to their
        non-normalized versions.
           .)
r   make_file_foldmapr@   r	   normcasespecnormcasefallbackAttributeErrorr   r   r   )r%   makefilefoldmapr   r   namer   s         r,   r   zdirstatemap.filefoldmap  s    
	%77O #		4,,d.C.C   		 ==yy( 	)GD!99$((4.!	) $s   A 	AAc                 b    i }t         j                  }| j                  D ]  }|| ||      <    |S r0   )r	   r   r   r%   r   r   r   s       r,   
dirfoldmapzdirstatemap.dirfoldmap  s6    ==JJ 	%D $Ahtn	%r.   c                     || j                   v S )zo
        Returns True if the dirstate contains a tracked (not removed) file
        in this directory.
        )r   r%   ds     r,   hastrackeddirzdirstatemap.hastrackeddir  s    
 DJJr.   c                     || j                   v S )zn
        Returns True if the dirstate contains a file (tracked or removed)
        in this directory.
        )r   r   s     r,   hasdirzdirstatemap.hasdir  s    
 DMM!!r.   c                 D    t        j                  | j                  d      S )NT)only_trackedr   dirsr@   r3   s    r,   r   zdirstatemap._dirs  s    }}TYYT::r.   c                 @    t        j                  | j                        S r0   r   r3   s    r,   r   zdirstatemap._alldirs  s    }}TYY''r.   c                 `   | j                   j                  |d       |sD|sB|s@| j                  j                  |      }| j	                  |       | j                  ||       y| j                  j                  |      }| j                  ||       t        |||||      }|| j                  |<   y)ah  Set a entry to a given state, diregarding all previous state

        This is to be used by the part of the dirstate API dedicated to
        adjusting the dirstate after a update/merge.

        note: calling this might result to no entry existing at all if the
        dirstate map does not see any point at having one for this file
        anymore.
        N)r   )
wc_tracked
p1_trackedr   has_meaningful_mtimeparentfiledata)r   r   r@   rC   _drop_entryr   r   DirstateItem)	r%   r   r   r   r   r   r   r   entrys	            r,   reset_statezdirstatemap.reset_state  s    ( 	4(g		h/IX&OOH	O:IIMM(+	),!!!5)
 $		(r.   c                 \   d}| j                  |      }|0| j                  |       t        d      }|| j                  |<   d}|S |j                  s8| j                  ||       |j                          | j                  ||       d}|S |j                          | j                  ||       |S )NFT)r   )rC   r   r   r@   trackedset_tracked_refresh_entryset_possibly_dirty)r%   r   newr   s       r,   r   zdirstatemap.set_tracked/  s    "=OOH% E #(DIIhC 
 OOHe,%0C 
 $$&%0
r.   c                     | j                  |      }|y| j                  |||j                          |j                  s| j                  j                  |d       |j                          | j                  ||       y)z4Mark a file as no longer tracked in the dirstate mapNF)r   r   T)rC   r   addedr   r   r   set_untrackedr   r%   r   r   s      r,   r   zdirstatemap.set_untrackedG  si    =OOA5;;OO==  D)!5)r.   c                     | |   }|t         z  }|j                  |||       | j                  ||       | j                  j	                  |d       y)z$mark a file as back to a clean stateN)	rangemask	set_cleanr   r   r   )r%   r   rW   r[   r   r   s         r,   r   zdirstatemap.set_cleanT  sI    XidE*He,4(r.   c                 R    | |   }|j                          | j                  ||       y)z<record that the current state of the file on disk is unknownN)r   r   )r%   r   r   s      r,   r   zdirstatemap.set_possibly_dirty\  s'    X  "He,r.   c                 V    |j                   s| j                  j                  |d       yy)z record updated state of an entryN)any_trackedr@   r   r   s      r,   r   zdirstatemap._refresh_entryb  s"      IIMM!T" !r.   c                 t    | j                   j                  |d       | j                  j                  |d       y)zremove any entry for file f

        This should also drop associated copy information

        The fact we actually need to drop it is the responsability of the callerN)r@   r   r   r%   r   s     r,   r   zdirstatemap._drop_entryg  s*     			aD!r.   Fr0   r   FFFTN)r   r   r   r   propertycacher@   r   r   r   	iteritemsr   r   r   rZ   rw   r2   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r.   r,   r   r   	  s
   F  
  
6! IK 
 @!D
#  ,/  *  " ; ; ( ( !%$N0)-#
"r.   r   c                       e Zd Zed        ZddZed        Zd Zd Z	d Z
e
Zd Zdd	Zed
        Zd Zed        Zd Zd Zed        Zd Zd Zd Zd Z	 	 	 	 	 ddZy)r   c                    | j                          t        j                  | j                  d       | j                  rN	 | j
                   | j
                  j                  }| j                  6| j                  j                   | j                  j                  j                  nd}t        j                  | j                  d       | j
                  j                  s&d}t        j                  j                         | _        nt| j                         }t        j                  j!                  || j
                  j"                  | j
                  j$                  | j
                  j                  |      | _        | j
                  j                  }n| j+                         }|r| j,                  s | j.                  |  | j                  j0                  | _        | j                  j2                  | _        | j                  j4                  | _        | j                  S # t&        j(                  $ r}| j+                  |      }Y d}~d}~ww xY w)z<
            Fills the Dirstatemap when called.
            r   Nr   r.   )r4   r   r   r   r   r
   ru   r2   statst_inorv   rustmodDirstateMap	new_emptyr@   rk   new_v2	data_sizer   r   rd   _v1_mapr   r   rN   rQ   rC   )r%   ru   inodere   r   s        r,   r@   zdirstatemap._mapw  s     *CD$$2KK
 #kk11G  ==4 MM..: **11 "	  ''"C  ;;++"$+$7$7$A$A$C	#113$+$7$7$>$>  KK11 KK55 KK,,!%	 #kk11G,,.t11) $		 6 6D#yy44Dyy}}DH99I .. ."ll1oG.s   H I)H??INc                 J   | j                          | j                  6| j                  j                   | j                  j                  j                  nd }	 t        j
                  j                  | j                         |      \  | _        }|S # t        $ r}||| d }~ww xY wr0   )
r4   r2   r  r  r  r  new_v1r\   r@   OSError)r%   r   r  ru   r   s        r,   r  zdirstatemap._v1_map  s      ==,1C1C1O "")) 
%,%8%8%?%?**,e&"	7 N	  $0!22s   6B 	B"BB"c                 6    | j                   j                         S r0   )r@   r   r3   s    r,   r   zdirstatemap.copymap  s    99$$&&r.   c                 8    | j                   j                  |      S )z
            Return an iterator of (filename, state, mode, size, mtime) tuples

            `all`: also include with `state == b' '` dirstate tree nodes that
            don't have an associated `DirstateItem`.

            )r@   r   )r%   r   s     r,   r   zdirstatemap.debug_iter  s     99'',,r.   c                 0   | j                   j                          | j                  | j                  j                  | j                  j                         t        j                  | d       t        j                  | d       t        j                  | d       y )Nr   r   r   )r@   r   r   r   r   r	   r   r3   s    r,   r   zdirstatemap.clear  sk    IIOOOO##**D,?,?,F,F $$T84$$T;7$$T=9r.   c                 6    | j                   j                         S r0   r   r3   s    r,   r   zdirstatemap.items  s    99??$$r.   c                 ,    t        | j                        S r0   rJ   r3   s    r,   r   zdirstatemap.keys  s    		?"r.   c                 b    ||f| _         d| _        i }|r| j                  j                         }|S r   )r   r   r@   setparents_fixup)r%   r   r   r   r   s        r,   r   zdirstatemap.setparents  s4    HDM!%DF335Mr.   c                 2    | j                    | j                  S r0   r   r3   s    r,   r2   zdirstatemap.identity  s    II== r.   c                 b   | j                   sX| j                         \  }}| j                  j                  ||      }|j	                  |       |j                          d| _        y | j                  }	 | j                  }||j                  t        }| j                  j                  |      \  }}}	|	r#| j                  }|j                         }
||j                  |
d       | j!                  |
d      5 }|j#                  |j$                         |j'                         |j$                  k(  sJ |j	                  |      }| |t)        |      k(  sJ |t)        |      f       d d d        |xj$                  t)        |      z  c_        | j                         |_        ||_        |j	                  |j-                                |j                          n| j/                  ||||       t1        j2                  | d       d| _        y # t        j                  $ r d }Y w xY w# 1 sw Y   xY w)NFrm   rn   s   r+bs   _map)r   ru   r@   write_v1rw   rT   r   r!   r
   r   rd   rv   r#   write_v2rh   rx   r   seekr  tellrG   r   ry   r   r	   r   )r%   r{   r|   r   r   r~   r+   r
   r}   appendrh   rV   writtens                r,   rw   zdirstatemap.write  s   ((B++B3 
%*"))J ~!41
#'99#5#5j#A FD& & 4 4 6 >LLLB\\-8 NBGGF,,-779(8(8888 hhv.G*&#f+5MV7MM5N   CK/ !%'+$))+,
''Bf=$$T73!&DE ** &N Ns   2H	 7A.H%	H"!H"%H.c                 6    | j                   j                         S )zmReturns a dictionary mapping normalized case paths to their
            non-normalized versions.
            )r@   filefoldmapasdictr3   s    r,   r   zdirstatemap.filefoldmap  s    
 99..00r.   c                 8    | j                   j                  |      S r0   )r@   r   r   s     r,   r   zdirstatemap.hastrackeddir%      99**1--r.   c                 8    | j                   j                  |      S r0   )r@   r   r   s     r,   r   zdirstatemap.hasdir(  s    99##A&&r.   c                 ~    i }t         j                  }| j                  j                         D ]  }|| ||      <    |S r0   )r	   r   r@   tracked_dirsr   s       r,   r   zdirstatemap.dirfoldmap+  s?    A}}H		..0 )$((4.!)Hr.   c                 8    | j                   j                  |      S r0   )r@   r   r  s     r,   r   zdirstatemap.set_tracked5  s    99((++r.   c                 8    | j                   j                  |      S r0   )r@   r   r  s     r,   r   zdirstatemap.set_untracked8  r*  r.   c                 @    | j                   j                  ||||       y r0   )r@   r   )r%   r   rW   r[   r   s        r,   r   zdirstatemap.set_clean;  s    II$e<r.   c                 :    | j                   j                  |       y r0   )r@   r   r  s     r,   r   zdirstatemap.set_possibly_dirty>  s    II((+r.   c                 B    | j                   j                  ||||||      S r0   )r@   r   )r%   r   r   r   r   r   r   s          r,   r   zdirstatemap.reset_stateA  s-     99(($ r.   r0   r  r  )r   r   r   r  r@   r  r   r   r   r   r   r	  r   r   r2   rw   r   r   r   r   r   r   r   r   r   r   r.   r,   r   r   s  s     
/	 
/	b	" 
	' 
	'	-	:	% 		#
	 
	! 
	!.	'f 
	1 
	1	.	' 
	 
		,	.	=	, !%	r.   )i18nr    r   r   r   r   r   r	   dirstateutilsr
   r`   r   	importmodr   
importrustr  r  r   r   r    r#   r"   rg   r   r   r   r.   r,   <module>r8     s     
 &

9
%
&

J
'""
?''L''L	    [ [|e"$ e"P ^( ^ r.   