3
_Af                 @   sR   d dl mZ d dlZd dlZd dlmZ d dlmZ ejdZ	G dd deZ
dS )    )print_functionN)Command)
GitCommandz"^\s*Change-Id: I([0-9a-f]{40})\s*$c               @   sT   e Zd ZdZdZdZdZdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd ZdS )
CherryPickTzCherry-pick a change.z
%prog <sha1>
z
'%prog' cherry-picks a change from one branch to another.
The change id will be updated, and a reference to the old
change id will be added.
c             C   s   d S )N )selfpr   r   E/home/qytech/356xLinux510-101server/.repo/repo/subcmds/cherry_pick.py_Options&   s    zCherryPick._Optionsc             C   s   t |dkr| j  d S )N   )lenUsage)r   optargsr   r   r	   ValidateOptions)   s    zCherryPick.ValidateOptionsc       	      C   sh  |d }t d dd|gddd}|j dkrDt|jtjd tjd |jj }t d dd	|gdd
}|j dkrtdtjd tjd | j|j}t d d|gddd}|j }t|jtjd t|jtjd |dkr<| j	||}t d d	dddgdddd}|j
j| |j
j  |j dkrdtdtjd tjd n(td t| j|tjd ttjd d S )Nr   z	rev-parsez--verifyT)capture_stdoutcapture_stderr)filer   zcat-filecommit)r   z,error: Failed to retrieve old commit messagezcherry-pickz--amendz-F-)provide_stdinr   r   z&error: Failed to update commit messagezvNOTE: When committing (please see above) and editing the commit message, please remove the old Change-Id-line and add:)r   Waitprintstderrsysexitstdoutstrip_StripHeader	_Reformatstdinwriteclose_GetReference)	r   r   r   	referencer   sha1old_msgstatusnew_msgr   r   r	   Execute-   sF    




zCherryPick.Executec             C   s
   t j|S )N)CHANGE_ID_REmatch)r   liner   r   r	   _IsChangeId]   s    zCherryPick._IsChangeIdc             C   s   d| S )Nz(cherry picked from commit %s)r   )r   r%   r   r   r	   r#   `   s    zCherryPick._GetReferencec             C   s$   |j  }dj||jdd d  S )N
 r   )
splitlinesjoinindex)r   Z
commit_msglinesr   r   r	   r   c   s    zCherryPick._StripHeaderc             C   sx   g }x$|j  D ]}| j|s|j| qW y|d j dkrF|jd W n tk
r\   Y nX |j| j| dj|S )Nr   r/   r.   )r0   r-   appendr   
IndexErrorr#   r1   )r   r&   r%   r(   r,   r   r   r	   r   g   s    
zCherryPick._ReformatN)__name__
__module____qualname__commonhelpSummary	helpUsagehelpDescriptionr
   r   r)   r-   r#   r   r   r   r   r   r	   r      s   0r   )
__future__r   rer   commandr   git_commandr   compiler*   r   r   r   r   r	   <module>   s   
