???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................ó
fc           @   s  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z e j	 j
 d d d ƒ e j	 j
 d d d ƒ e j	 j
 d d d ƒ e j	 j
 d d ƒ e j	 j
 d d ƒ g Z e j d	 ƒ Z d
 „  Z e d d „ Z d „  Z d „  Z e d d d „  ƒd „  ƒ Z e d d d „  ƒd d „ ƒ Z d „  Z e d d e ƒd „  ƒ Z e d d e ƒd „  ƒ Z e  j d ƒ Z e d d e ƒd „  ƒ Z e d d e ƒd „  ƒ Z e d  d e ƒd! „  ƒ Z e d" d e ƒd# „  ƒ Z d$ „  Z  e! d% k re  ƒ  n  d S(&   iÿÿÿÿNt   Modulest   _ctypest   libffit
   libffi_osxt   libffi_msvct   expatt   zlibt   srcdirc         C   s"   d j  |  |  d k r d n d ƒ S(   s7   Return 'N file(s)' with the proper plurality on 'file'.s	   {} file{}i   t   st    (   t   format(   t   count(    (    s0   /usr/lib64/python2.7/Tools/scripts/patchcheck.pyt   n_files_str   s    c            s   ‡  ‡ ‡ f d †  } | S(   s*   Decorator to output status info to stdout.c            s   ‡  ‡ ‡ ‡ f d †  } | S(   Nc             so   t  j j ˆ d ƒ t  j j ƒ  ˆ  |  | Ž  } ˆ rF ˆ rF d GHn% ˆ rZ ˆ | ƒ GHn | rf d n d GH| S(   Ns    ... t   donet   yest   NO(   t   syst   stdoutt   writet   flush(   t   argst   kwargst   result(   t   fxnt   infot   messaget   modal(    s0   /usr/lib64/python2.7/Tools/scripts/patchcheck.pyt   call_fxn   s    (    (   R   R   (   R   R   R   (   R   s0   /usr/lib64/python2.7/Tools/scripts/patchcheck.pyt   decorated_fxn   s    (    (   R   R   R   R   (    (   R   R   R   s0   /usr/lib64/python2.7/Tools/scripts/patchcheck.pyt   status   s    c          C   sB   d j  ƒ  }  y t j |  d t j ƒSWn t j k
 r= d SXd S(   s0   Get the symbolic name for the current git branchs   git rev-parse --abbrev-ref HEADt   stderrN(   t   splitt
   subprocesst   check_outputt   PIPEt   CalledProcessErrort   None(   t   cmd(    (    s0   /usr/lib64/python2.7/Tools/scripts/patchcheck.pyt   get_git_branch.   s
    c          C   sB   d j  ƒ  }  y t j |  d t j ƒWn t j k
 r= d SXd S(   sk   Get the remote name to use for upstream branches

    Uses "upstream" if it exists, "origin" otherwise
    s   git remote get-url upstreamR   t   origint   upstream(   R   R    R!   R"   R#   (   R%   (    (    s0   /usr/lib64/python2.7/Tools/scripts/patchcheck.pyt   get_git_upstream_remote7   s    s   Getting base branch for PRR   c         C   s   |  d  k	 r |  Sd S(   Ns   not a PR branch(   R$   (   t   x(    (    s0   /usr/lib64/python2.7/Tools/scripts/patchcheck.pyt   <lambda>E   R	   c          C   s   t  j j t  j j t d ƒ ƒ s% d  St j }  |  j d k rF d } n d j	 |  ƒ } t
 ƒ  } | d  k sv | | k rz d  St ƒ  } | d | S(   Ns   .gitt   alphat   masters   {0.major}.{0.minor}t   /(   t   ost   patht   existst   joint   SRCDIRR$   R   t   version_infot   releaselevelR
   R&   R)   (   t   versiont   base_brancht   this_brancht   upstream_remote(    (    s0   /usr/lib64/python2.7/Tools/scripts/patchcheck.pyt   get_base_branchD   s    !				s6   Getting the list of files that have been added/changedc         C   s   t  t |  ƒ ƒ S(   N(   R   t   len(   R*   (    (    s0   /usr/lib64/python2.7/Tools/scripts/patchcheck.pyR+   X   R	   c            sv  t  j j t  j j t d ƒ ƒ r|  r4 d |  } n d } g  } t j | j ƒ  d t j ƒ} z› x” | j	 D]‰ } | j
 ƒ  j ƒ  } | j d	 d ƒ \ } ‰  t | ƒ } | j d ƒ s¼ qk n  d ˆ  k rç ˆ  j d d ƒ d j ƒ  ‰  n  | j ˆ  ƒ qk WWd	 | j	 j ƒ  Xn t j d
 ƒ g  } xO | D]G ‰  t  j j ˆ  ƒ ‰  t ‡  f d †  t Dƒ ƒ raq'n  | j ˆ  ƒ q'W| S(   s0   Get the list of changed or added files from git.s   .gits   git diff --name-status s   git status --porcelainR   i   t   MAUs    -> i   Ns)   need a git checkout to get modified filesc         3   s   |  ] } ˆ  j  | ƒ Vq d  S(   N(   t
   startswith(   t   .0R0   (   t   filename(    s0   /usr/lib64/python2.7/Tools/scripts/patchcheck.pys	   <genexpr>z   s    (   R/   R0   R1   R2   R3   R    t   PopenR   R"   R   t   decodet   rstripR$   t   sett   intersectiont   stript   appendt   closeR   t   exitt   normpatht   anyt   EXCLUDE_DIRS(   R7   R%   t	   filenamest   stt   linet   status_textR   t
   filenames2(    (   R?   s0   /usr/lib64/python2.7/Tools/scripts/patchcheck.pyt   changed_filesW   s2    !c         C   sr   t  |  ƒ } | d k r" t | ƒ Sd j t | ƒ ƒ g } x$ |  D] } | j d j | ƒ ƒ qA Wd j | ƒ Sd  S(   Ni    s   {}:s     {}s   
(   R;   R   R
   RF   R2   (   t
   file_pathsR   t   linesR0   (    (    s0   /usr/lib64/python2.7/Tools/scripts/patchcheck.pyt   report_modified_files‚   s    
s   Fixing whitespacec         C   s\   t  t _ g  } xF d „  |  Dƒ D]4 } t j t j j t | ƒ ƒ r  | j | ƒ q  q  W| S(   sA   Make sure that the whitespace for .py files have been normalized.c         s   s$   |  ] } | j  d  ƒ r | Vq d S(   s   .pyN(   t   endswith(   R>   R*   (    (    s0   /usr/lib64/python2.7/Tools/scripts/patchcheck.pys	   <genexpr>’   s    (	   t   Falset   reindentt
   makebackupt   checkR/   R0   R2   R3   RF   (   RR   t   fixedR0   (    (    s0   /usr/lib64/python2.7/Tools/scripts/patchcheck.pyt   normalize_whitespace   s    	s   Fixing C file whitespacec         C   sƒ   g  } xv |  D]n } t  j j t | ƒ } t | d ƒ  } d | j ƒ  k rR w n  Wd QXt j | d d t ƒ| j	 | ƒ q W| S(   s   Report if any C files t   rs   	Ni   t   verbose(
   R/   R0   R2   R3   t   opent   readt   untabifyt   processRV   RF   (   RR   RZ   R0   t   abspatht   f(    (    s0   /usr/lib64/python2.7/Tools/scripts/patchcheck.pyt   normalize_c_whitespace˜   s    s   \s+(\r?\n)$s   Fixing docs whitespacec   	      C   s÷   g  } xê |  D]â } t  j j t | ƒ } y¢ t | d ƒ  } | j ƒ  } Wd  QXg  | D] } t j d | ƒ ^ qV } | | k rÉ t j	 | | d ƒ t | d ƒ  } | j
 | ƒ Wd  QX| j | ƒ n  Wq t k
 rî } d | | f GHq Xq W| S(   Nt   rbs   \1s   .bakt   wbs   Cannot fix %s: %s(   R/   R0   R2   R3   R^   t	   readlinest   ws_ret   subt   shutilt   copyfilet
   writelinesRF   t	   Exception(	   RR   RZ   R0   Rb   Rc   RS   RN   t	   new_linest   err(    (    s0   /usr/lib64/python2.7/Tools/scripts/patchcheck.pyt   normalize_docs_whitespace¨   s    %s   Docs modifiedR   c         C   s
   t  |  ƒ S(   s9   Report if any file in the Doc directory has been changed.(   t   bool(   RR   (    (    s0   /usr/lib64/python2.7/Tools/scripts/patchcheck.pyt   docs_modified»   s    s   Misc/ACKS updatedc         C   s   t  j j d d ƒ |  k S(   s$   Check if Misc/ACKS has been changed.t   Misct   ACKS(   R/   R0   R2   (   RR   (    (    s0   /usr/lib64/python2.7/Tools/scripts/patchcheck.pyt   credit_givenÁ   s    s    Misc/NEWS.d updated with `blurb`c         C   s   t  d „  |  Dƒ ƒ S(   s&   Check if Misc/NEWS.d has been changed.c         s   s0   |  ]& } | j  t j j d  d d ƒ ƒ Vq d S(   Rs   s   NEWS.dt   nextN(   R=   R/   R0   R2   (   R>   t   p(    (    s0   /usr/lib64/python2.7/Tools/scripts/patchcheck.pys	   <genexpr>Ê   s   (   RJ   (   RR   (    (    s0   /usr/lib64/python2.7/Tools/scripts/patchcheck.pyt   reported_newsÇ   s    	c          C   s  t  ƒ  }  t |  ƒ } g  | D] } | j d ƒ r | ^ q } g  | D] } | j d ƒ rD | ^ qD } g  | D]* } | j d ƒ rl | j d ƒ rl | ^ ql } d „  | Dƒ } t | ƒ t | ƒ t | ƒ t | ƒ t | ƒ t	 | ƒ | sô | r| r d n d	 } Hd
 | GHn  d  S(   Ns   .pys   .cs   .ht   Docs   .rsts   .incc         S   s%   h  |  ] } | j  d  ƒ r | ’ q S(   Rs   (   R=   (   R>   Rw   (    (    s0   /usr/lib64/python2.7/Tools/scripts/patchcheck.pys	   <setcomp>Õ   s   	 s    and check for refleaks?t   ?s   Did you run the test suite(   s   .cs   .h(   s   .rsts   .inc(
   R:   RQ   RU   R=   R[   Rd   Rp   Rr   Ru   Rx   (   R7   RR   t   fnt   python_filest   c_filest	   doc_filest
   misc_filest   end(    (    s0   /usr/lib64/python2.7/Tools/scripts/patchcheck.pyt   mainÎ   s"    	((





t   __main__("   t   reR   Rj   t   os.pathR/   R    t	   sysconfigRW   R`   R0   R2   RK   t   get_config_varR3   R   RV   R$   R   R&   R)   R:   RQ   RT   R[   Rd   t   compileRh   Rp   t   TrueRr   Ru   Rx   R   t   __name__(    (    (    s0   /usr/lib64/python2.7/Tools/scripts/patchcheck.pyt   <module>   sB   							)		