ó
æ0ÌRc           @   sâ   d  Z  d d l Z d d l Z d d l Z d d l Z d d l m Z m Z d d l m	 Z	 m
 Z
 d d l m Z d d l m Z d d l m Z d d l Z d „  Z d	 „  Z d
 „  Z e d k rÞ e j e e j ƒ ƒ n  d S(   s5   fast forward debian, upstream and pristine-tar branchiÿÿÿÿN(   t   Commandt   CommandExecFailed(   t   GbpOptionParsert   GbpOptionGroup(   t   GbpError(   t   GitRepositoryError(   t   DebianGitRepositoryc         C   s%  t  } | j |  ƒ } | s3 t j j d |  ƒ t  S| j |  | ƒ \ } } | ri t j j d |  ƒ t S| rx t } n: | j rž t j j d |  ƒ t } n t j j d |  ƒ | r!t j j d |  ƒ | j	 |  k rë | j
 | ƒ q!| j | ƒ } | j d |  | d d |  | f ƒn  | S(	   s°   
    update branch to its remote branch, fail on non fast forward updates
    unless --force is given
    @return: branch updated or already up to date
    @rtype: boolean
    s)   No branch tracking '%s' found - skipping.s"   Branch '%s' is already up to date.s'   Non-fast forwarding '%s' due to --forces/   Skipping non-fast forward of '%s' - use --forces   Updating '%s's   refs/heads/%st   msgs   gbp: forward %s to %s(   t   Falset   get_merge_brancht   gbpt   logt   warnt   is_fast_forwardt   infot   Truet   forcet   brancht   merget	   rev_parset
   update_ref(   R   t   repot   optionst   updatet   remotet   can_fast_forwardt
   up_to_datet   sha1(    (    s4   /usr/lib/python2.7/dist-packages/gbp/scripts/pull.pyt   fast_forward_branch    s.    			c         C   s¦  y/ t  d t j j |  d ƒ d d d d ƒ } Wn' t j k
 rX } t j j | ƒ d* SXt
 | d d ƒ } | j | ƒ | j d	 d
 d d ƒ | j d d d d d d t d d ƒ| j d d d d d d t d d ƒ| j d	 d d d ƒ | j d	 d d d ƒ | j d	 d d d ƒ | j d d d d d d d d d  ƒ| j d! d" d d d d# d t d d$ ƒ| j d	 d% d d% d& d' ƒ | j d	 d( d d) ƒ | j |  ƒ S(+   Nt   commandi    t   prefixt    t   usages8   %prog [options] - safely update a repository from remotes   branch optionss    branch update and layout optionst   option_names   ignore-brancht   destt   ignore_branchs   --forcet   actiont
   store_trueR   t   defaultt   helps8   force a branch update even if it can't be fast forwardeds	   --redo-pqt   redo_pqsX   redo the patch queue branch after a pull. Warning: this drops the old patch-queue branchs   upstream-brancht   upstream_branchs   debian-brancht   debian_branchs   pristine-tart   pristine_tars   --deptht   storet   depths0   git history depth (for deepening shallow clones)s   -vs	   --verboset   verboses   verbose command executiont   colort   typet   tristates   color-schemet   color_scheme(   NN(   R   t   ost   patht   basenamet   ConfigParsert   ParsingErrorR
   R   t   errt   NoneR   t   add_option_groupt   add_boolean_config_file_optiont
   add_optionR   t   add_config_file_optiont
   parse_args(   t   argvt   parserR8   t   branch_group(    (    s4   /usr/lib/python2.7/dist-packages/gbp/scripts/pull.pyR>   G   s0    "!c         C   s™  d } d  } t |  ƒ \ } } | s( d St j j | j | j | j ƒ y t t	 j
 j ƒ } Wn2 t k
 r‘ t j j d t	 j
 j d ƒ ƒ d SXy¦g  } y | j ƒ  } Wn= t k
 rê | j rä | j } t j j d | ƒ që ‚  n Xx9 | j | j g D]% } | j | ƒ rþ | | g 7} qþ qþ W| j ƒ  rO| j rO| | j g 7} n  | j ƒ  \ } }	 | st j j d ƒ t j j |	 ƒ t ‚ n  | j d | j ƒ | j d | j d t ƒ x) | D]! } t | | | ƒ sÃd	 } qÃqÃW| j r*| j  | j ƒ t! d
 ƒ d g ƒ t! d
 ƒ d g ƒ n  | j  | ƒ WnZ t" k
 rQd } nD t t f k
 r”}
 t# |
 j$ ƒ  ƒ r‹t j j |
 ƒ n  d } n X| S(   Ni    i   s   %s is not a git repositoryt   .s   Found detached head at '%s's1   You have uncommitted changes in your source tree:R-   t   tagsi   s   gbp-pqt   dropt   import(%   R9   R>   R
   R   t   setupR/   R.   R2   R   R3   R4   t   curdirR   R8   t   abspatht
   get_branchR#   t   headR   R*   R)   t
   has_brancht   has_pristine_tar_branchR+   t   pristine_tar_brancht   is_cleanR   t   fetchR-   R   R   R(   t
   set_branchR    R   t   lent   __str__(   R?   t   retvalt   currentR   t   argsR   t   branchesR   t   rett   outR8   (    (    s4   /usr/lib/python2.7/dist-packages/gbp/scripts/pull.pyt   mainc   s^     					
t   __main__(   t   __doc__R6   t   sysR3   t   os.patht   gbp.command_wrappersR    R   t
   gbp.configR   R   t
   gbp.errorsR   t   gbp.gitR   t   gbp.deb.gitR   t   gbp.logR
   R   R>   RY   t   __name__t   exitR?   (    (    (    s4   /usr/lib/python2.7/dist-packages/gbp/scripts/pull.pyt   <module>   s   	'		>