
    $i                     t    S SK r S SKrS SKrS rS rS rS rS rS r	S r
S	 rS
 rS rSS jrS rS rS rg)    Nc                 z    [         R                  R                   S[        R                  R                  U 5       3$ N/)libconfig
path_cacheospathbasenameprojects    /obs/lib/git.pyget_repo_pathr   	   s.    jj##$Abgg&6&6w&?%@AA    c                     U [         R                  R                  ;   a  [         R                  R                  U    $ [         R                  R                   SU  3$ r   )r   r   git_url_othergit_url_defaultr   s    r   get_repo_urlr      sE    #*****zz''00jj(()7)44r   c                     U [         R                  R                  ;   a  [         R                  R                  U    $ [         R                  R                  $ N)r   r   git_latest_tag_pattern_othergit_latest_tag_pattern_defaultr   s    r   get_latest_tag_patternr      s9    #**999zz66w??::444r   c                 2   [         R                  R                  n[        U 5      n[	        U 5      n[
        R                  R                  U5      (       a?  U(       a&  [        U  S35        [         R                  " SS/US9  g [        U  SU S35        g [        U  SU 35        [
        R                  " [         R                  R                  SS	9  [         R                  " SS
X2/5        [         R                  " / SQUS9  [         R                  " / SQUS9  g )Nz: 'git fetch'gitfetchcwdz: using cached z (not cloning, not fetching)z
: cloning T)exist_okclone)r   r   z	user.namezOsmocom OBS scripts)r   r   z
user.emailzinfo@osmocom.org)r   args	git_fetchr   r   r	   r
   existsprintrun_cmdmakedirsr   r   )r   r   	repo_pathurls       r   r    r       s    HHEg&I
w
C	ww~~i  WI]+,KK(i8 	 WI_SE1MNO	WIZu
%&KK

%%5KK01KKEKKCr   c                 d    [        U 5      n[        U  S35        [        R                  " / SQUS9  g )Nz: 'git clean -ffxd')r   cleanz-ffxdr   )r   r$   r   r%   )r   r'   s     r   r*   r*   0   s+    g&I	WI(
)*KK)y9r   c                    [        U 5      n[        R                  R                  (       d@  [        R                  " / SQUS9R
                  R                  5       n[        U  SU 35        g [        U  SU S35        [        R                  " SSSU/US9  [        U  S	U S35        [        R                  " SS
SU/US9  [        U  S35        [        R                  " / SQUS9  g )N)r   logz--pretty=onelinez--abbrev-commitz-1r   z): skipping git checkout, current commit: z: 'git checkout -f 'r   checkoutz-fz: 'git reset --hard resetz--hardz: 'git submodule update --init')r   	submoduleupdatez--init)r   r   r!   git_checkoutr%   outputrstripr$   )r   branchr'   refs       r   r.   r.   6   s    g&I88  kk !&/117 		B3%HI	WI(
23KK
D&1yA	WI)&
34KK62	B	WI4
56KK8iHr   c                     [        U 5      n[        R                  " / SQUS9  [        R                  " SSS[        U5      /US9  g)zcheckout a given gerrit ID )r   reviewz-sr   r   r8   z-dN)r   r   r%   str)r   	gerrit_idr'   s      r   checkout_from_reviewr;   E   s6    g&IKK'Y7KK$I7YGr   c                     U [         R                  R                  ;   a  [         R                  R                  U    $ [         R                  R                  $ r   )r   r   git_branch_othergit_branch_defaultr   s    r   get_default_branchr?   L   s9    #**---jj))'22::(((r   c                 8    [        U 5      n[        U SU 35        g )Nzorigin/)r?   r.   )r   r5   s     r   checkout_default_branchrA   R   s    (FWx()r   c                 z    [        U 5      n[        R                  " / SQUS9nUR                  R	                  5       $ )N)r   z	rev-parseHEADr   )r   r   r%   r3   r4   )r   r'   rets      r   get_headrE   W   s0    g&I
++2	
BC::r   c                 J   U(       d  [        U 5      n[        U 5      n[        U  SU 35        [        R                  " SSUSU 3/5      nUR
                  R                  S5      S   nU(       d3  U(       a  [        U  SU 35        g [        R                  " USU  S	35        U$ )
Nz#: getting head from git remote for r   	ls-remotezheads/	r   z: branch not found: zfailed to find head commit for z
 in output)r?   r   r$   r   r%   r3   splitexit_error_cmd)r   r5   branch_missing_okrepo_url	ls_remoterD   s         r   get_head_remoterN   ]   s    #G,G$H	WI8
ABUKVF8;LMNI



 
 
&q
)C WI1&:;9 '&iz'3 	4 Jr   c                 ^   [        U 5      n[        R                  " U5      n[        U 5      n[        R
                  " / SQUS9nUR                  R                  S5       H.  nUR                  S5      nUR                  U5      (       d  M,  Us  $    [        R                  " USU  SU 35        g )N)r   tagz-l--sort=-v:refnamer   
zcouldn't find latest tag for z, regex used on output: )r   recompiler   r   r%   r3   rI   stripmatchrJ   )r   pattern_strpatternr'   git_tag_retlines         r   get_latest_tagr\   s   s    (1Kjj%Gg&I++G"+-K ""((.zz$==K /
 {&CG9 M11<%? @r   c           	         [        U 5      n[        R                  " U5      n[        U  S35        [        R
                  " SSSS[        U 5      /5      nUR                  R                  S5       HO  nSU;   a  M  SU;  a  M  UR                  5       R                  S5      S	   nUR                  U5      (       d  MM  Us  $    g )
Nz$: getting latest tag from git remoter   rG   z--tagsrQ   rR   z^{}z
refs/tags/   )r   rT   rU   r$   r   r%   r   r3   rI   r4   rW   )r   rX   rY   rM   r[   s        r   get_latest_tag_remoter_      s    (1Kjj%G	WI9
:;UK;N)'24 5I  &&t,D=t#{{}""<03==K - r   c                 .    [        U [        U 5      5        g r   )r.   r\   r   s    r   checkout_latest_tagra      s    WnW-.r   )T)r	   rT   
lib.configr   r   r   r   r    r*   r.   r;   r?   rA   rE   rN   r\   r_   ra    r   r   <module>rd      sZ    
 	 B55.:IH)*
,@"0/r   