a |Uf@sddlZddlZddlZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ dddZddZddZddZdS) NcCstjjdtj|SN/)libconfig path_cacheospathbasenameprojectr S/home/osmocom-build/jenkins/workspace/gerrit-binpkgs/osmo-ci/scripts/obs/lib/git.py get_repo_path srcCs*|tjjvrtjj|Stjjd|Sr)rr git_url_othergit_url_defaultr r r r get_repo_url s  rcCs |tjjvrtjj|StjjSN)rrgit_latest_tag_pattern_othergit_latest_tag_pattern_defaultr r r r get_latest_tag_patterns  rcCstjj}t|}t|}tj|rb|rJt|dtj ddg|dnt|d|ddSt|d|tj tj j dd t dd ||gtj gd |dtj gd |ddS) Nz : 'git fetch'gitfetchcwdz: using cached z (not cloning, not fetching)z : cloning T)exist_okclone)rrz user.namezOsmocom OBS scripts)rrz user.emailzinfo@osmocom.org) rargs git_fetchrrrrexistsprintrun_cmdmakedirsrr)r r repo_pathZurlr r r rs$   rcCs,t|}t|dtjgd|ddS)Nz: 'git clean -ffxd')rcleanz-ffxdr)rrrr )r r"r r r r#0sr#cCst|}tjjs>tjgd|dj}t|d|dSt|d|dtjddd|g|dt|d |dtjdd d |g|dt|d tjgd |ddS)N)rlogz--pretty=onelinez--abbrev-commitz-1rz): skipping git checkout, current commit: z: 'git checkout -f 'rcheckoutz-fz: 'git reset --hard resetz--hardz: 'git submodule update --init')rZ submoduleupdatez--init)rrr git_checkoutr outputrstripr)r branchr"refr r r r&6s  r&cCs8t|}tjgd|dtjdddt|g|ddS)z checkout a given gerrit ID )rreviewz-srrr.z-dN)rrr str)r gerrit_idr"r r r checkout_from_reviewEsr1cCs |tjjvrtjj|StjjSr)rrgit_branch_othergit_branch_defaultr r r r get_default_branchLs  r4cCst|}t|d|dS)Nzorigin/)r4r&)r r,r r r checkout_default_branchRsr5cCs$t|}tjgd|d}|jS)N)rz rev-parseZHEADr)rrr r*r+)r r"retr r r get_headWsr7TcCs|s t|}t|}t|d|tdd|d|g}|jdd}|s|rlt|d|dSt|d|d |S) Nz#: getting head from git remote for r ls-remotezheads/ rz: branch not found: zfailed to find head commit for z in output)r4rrrr r*splitexit_error_cmd)r r,Zbranch_missing_okZrepo_url ls_remoter6r r r get_head_remote]s r=cCsvt|}t|}t|}tjgd|d}|jdD] }|d}| |r8|Sq8t |d|d|dS)N)rtagz-l--sort=-v:refnamer  zcouldn't find latest tag for z, regex used on output: ) rrecompilerrr r*r:stripmatchr;)r pattern_strpatternr"Z git_tag_retliner r r get_latest_tagss     rIcCst|}t|}t|dtddddt|g}|jdD]<}d|vrRqDd|vr\qD| dd }| |rD|SqDdS) Nz$: getting latest tag from git remoterr8z--tagsr?r@z^{}z refs/tags/) rrBrCrrr rr*r:r+rE)r rFrGr<rHr r r get_latest_tag_remotes    rKcCst|t|dSr)r&rIr r r r checkout_latest_tagsrL)T)rrB lib.configrrrrrr#r&r1r4r5r7r=rIrKrLr r r r s