ó
#yRc        	   @   sq  d  d l  m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l m Z d  d l Z d  d l	 Z	 d  d l
 m Z m Z d  d l Z d  d l m Z m Z d  d l m Z m Z m Z m Z d  d l m Z m Z d d< d	 „  ƒ  YZ d
 e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d d d „ Z! d „  Z" d d „ Z# d d „ Z$ d d d „ Z% d „  Z& d „  Z' d „  Z( d „  Z) e* d k rmd Z+ e d  e+ ƒ Z, e, j- d! d" d# d$ d% d& ƒe, j- d' d( d# d$ d% d) ƒe, j- d* d+ d# d$ d% d, d- d ƒe, j- d. d/ d# d$ d% d0 d- d1 ƒe, j. d2 d ƒ e, j/ ƒ  \ Z0 Z1 e0 j2 Z3 e0 j4 Z5 e0 j6 Z6 e0 j7 Z7 e8 e1 ƒ d3 k  r´e, j9 d4 ƒ n  e1 d5 j: ƒ  Z; e1 d6 j: ƒ  Z< d Z= e8 e1 ƒ d7 k r¹e1 d3 j: ƒ  Z= d Z> d Z? d8 e< k rŽe< j@ d1 ƒ d  ZA e jB eA ƒ ZC eC jD d k rQd eC _D n  eC jE sje, j9 d9 ƒ n  e# eC e7 e= ƒ Z> e eC e> ƒ Z? n e$ e< e7 e= ƒ Z? e? rÈe) e= e? ƒ qÈn e$ e< e7 ƒ Z? e; GHe? rLe% e? e3 e6 ƒ ZF e' e; e? eF e5 ƒ e5 r'd: e? jG jE e5 f Z5 e" e5 e< e= ƒ qjd8 e< k r;e< GHn  e= rje= GHqjqme, j9 d; e< ƒ e jH d6 ƒ n  d S(=   iÿÿÿÿ(   t   OptionParserN(   t   StringIO(   t   basenamet   dirname(   t   gmtimet   strftime(   t
   SubElementt   Elementt   ElementTreet	   XMLParser(   t   POMt   Artifactt   Fragmentc           B   s    e  Z d  Z d „  Z d „  Z RS(   s-   simple structure to hold fragment informationc         C   s   | |  _  | |  _ d  S(   N(   t   upstream_artifactt   local_artifact(   t   selfR   R   (    (    s%   /usr/share/java-utils/maven_depmap.pyt   __init__:   s    	c         C   s   |  j  | S(   N(   t   __dict__(   R   t   index(    (    s%   /usr/share/java-utils/maven_depmap.pyt   __getitem__>   s    (   t   __name__t
   __module__t   __doc__R   R   (    (    (    s%   /usr/share/java-utils/maven_depmap.pyR   8   s   	t   PackagingTypeMissingFilec           B   s   e  Z d  „  Z RS(   c         C   s   d | f |  _  d  S(   NsM   Packaging type is not 'pom' and no artifact path has been provided for POM %s(   t   args(   R   t   pom_path(    (    s%   /usr/share/java-utils/maven_depmap.pyR   C   s    (   R   R   R   (    (    (    s%   /usr/share/java-utils/maven_depmap.pyR   B   s   t   IncompatibleFilenamesc           B   s   e  Z d  „  Z RS(   c         C   s   d | | f f |  _  d  S(   Nsn   Filenames of POM %s and JAR %s does not match properly. Check that JAR subdirectories matches '.' in pom name.(   R   (   R   R   t   jar_path(    (    s%   /usr/share/java-utils/maven_depmap.pyR   G   s    (   R   R   R   (    (    (    s%   /usr/share/java-utils/maven_depmap.pyR   F   s   t   MissingJarFilec           B   s   e  Z d  „  Z RS(   c         C   s   d |  _  d  S(   NsP   JAR seems to be missing in standard directories. Make sure you have installed it(   sP   JAR seems to be missing in standard directories. Make sure you have installed it(   R   (   R   (    (    s%   /usr/share/java-utils/maven_depmap.pyR   K   s    (   R   R   R   (    (    (    s%   /usr/share/java-utils/maven_depmap.pyR   J   s   t   UnknownFileExtensionc           B   s   e  Z d  „  Z RS(   c         C   s   d | f |  _  d  S(   Ns   Unknown file extension: %s(   R   (   R   R   (    (    s%   /usr/share/java-utils/maven_depmap.pyR   O   s    (   R   R   R   (    (    (    s%   /usr/share/java-utils/maven_depmap.pyR   N   s   c         C   s˜   g  d d d d g D] } t  j j | | ƒ ^ q } d  } xE | D]= } | |  k rA t j d | ƒ } t j | d |  ƒ } qA qA W| s” t ƒ  ‚ n  | S(   Ns
   share/javas   share/java-jnis   lib/javas
   lib64/javas   .*%s/t    (   t   ost   patht   joint   Nonet   ret   compilet   subR   (   R   t   prefixt   partt   javadirst   jarpartt   jdirt
   javadir_re(    (    s%   /usr/share/java-utils/maven_depmap.pyt   _get_javadir_partR   s    (t   jarc   	      C   s¤  t  |  ƒ } | r.t j j | ƒ s3 t d ƒ ‚ n  t | | ƒ } | d d k rÊ d | k rp t |  | ƒ ‚ n  d t | ƒ } t  | t | ƒ d  ƒ } | d | d | f k s+t |  | ƒ ‚ q+qšd | k rè t |  | ƒ ‚ n  d	 } t  | t | ƒ d  ƒ } | d
 | k sšt |  | ƒ ‚ qšnl | d d k r‡t	 j
 d | ƒ } d | j d ƒ } t	 j
 d | ƒ } | j d ƒ } n d	 } | d d !} | | f S(   s.  Get resolved (groupId,artifactId) tuple from POM and JAR path.

    POM name and JAR name have to be compatible.
    JPP.xbean-xbean-main.pom means groupId is "JPP/xbean" and artifactId
    is "xbean-main". Therefore for JAR name to be compatible it has be
    in %{_javadir}/xbean/xbean-main.jar.
    s   JAR path doesn't existi   t   .t   /s   JPP/%si   s   JPP.%s-%s.pomi   t   JPPs
   JPP-%s.poms   JPP\.([^-]*?)-.*s   JPP\.[^-]*?-(.*)\.pomiüÿÿÿ(   R   R   R    t   isfilet   IOErrorR,   R   R   t   lenR#   t   matcht   group(	   R   R&   R   t	   extensiont   pomnameR)   t   jpp_gidt   jpp_aidR4   (    (    s%   /usr/share/java-utils/maven_depmap.pyt   _get_jpp_from_filenameb   s4    c   
      C   s…  t  t |  j d ƒ ƒ ƒ }  | } | } d | k r× t j j | ƒ \ } } t } xs t |  ƒ D]e } d | | | f }	 | s¨ t j	 t j j
 | ƒ |	 ƒ t } |	 } n t j t | ƒ |	 ƒ |	 GHq^ Wt j | ƒ n  | rt j j | ƒ \ } } t } xs t |  ƒ D]e } d | | | f }	 | sRt j	 t j j
 | ƒ |	 ƒ t } |	 } n t j t | ƒ |	 ƒ |	 GHqWt j | ƒ n  d S(   s   Make pom and jar file versionedt   ,t   :s   %s-%s%sN(   t   listt   sett   splitR   R    t   splitextt   Falset   sortedt   shutilt   copyt   realpatht   Truet   symlinkR   t   remove(
   t   versionsR   R   t	   vpom_patht	   vjar_patht   roott   extRG   t   vert   dest(    (    s%   /usr/share/java-utils/maven_depmap.pyt   _make_files_versioned‹   s6    				c         C   sO  | s( t  d |  j |  j |  j |  j ƒ St | | ƒ } d } d | k rd d j d t | ƒ ƒ } n  |  j } | s| d } n  | j d j d | ƒ ƒ s¯ t	 t
 |  ƒ | ƒ ‚ n  t | ƒ j d j d | ƒ d ƒ } | } |  j r0| | j d	 ƒ  } | | j d	 ƒ d
 |  j k r0t	 t
 |  ƒ | ƒ ‚ q0n  t  | | |  j |  j |  j ƒ S(   NR0   R/   s	   JPP/{gid}t   gidR-   s   .{ext}RM   R   t   -i   (   R   t
   artifactIdR6   t
   classifiert   versionR,   t   formatR   t   endswithR   t   strR   t   replacet   rfind(   R   R&   R   R)   t	   local_gidRM   t   fnamet	   local_aid(    (    s%   /usr/share/java-utils/maven_depmap.pyt   get_local_artifact´   s.    
				 c         C   sÞ   t  |  ƒ } d } | sI | j s1 | j d k r@ t t ƒ ‚ n  d } n" t j j t ƒ \ } } | d } t |  | | | ƒ \ } } | d k r› d } n  t	 | j
 | j d | d | j ƒ}	 t	 | | | ƒ }
 t |	 |
 ƒ S(   s5   Returns Fragment class or None if POM file is invalidR   t   pomi   R-   R6   RU   (   R
   t	   packagingR   R   R   R    R@   R   R:   R   t   groupIdRS   RU   R   (   t   pom_fileR&   t   jar_fileR_   R6   R\   RM   R8   R9   R   R   (    (    s%   /usr/share/java-utils/maven_depmap.pyt	   parse_pomÔ   s    	
	$R   c         C   s‹   | |  j  _ | |  j _ |  g } | r‡ | j d ƒ } xN | D]C } t j | ƒ } t j | |  j  ƒ } | j t | |  j ƒ ƒ q= Wn  | S(   NR;   (	   R   t	   namespaceR   R?   R   t   from_mvn_strt   merge_artifactst   appendR   (   t   fragmentt	   additionsRe   t   mapst   addst   addt   mpartt   full(    (    s%   /usr/share/java-utils/maven_depmap.pyt   create_mappingsî   s    	 c         C   s]   t  ƒ  } t ƒ  } | j |  ƒ | j | d t d d d d ƒt j j j | j	 ƒ  ƒ j
 ƒ  S(   Nt   xml_declarationt   encodings   utf-8t   methodt   xml(   R   R   t   _setroott   writeRF   Rt   t   domt   minidomt   parseStringt   getvaluet   toprettyxml(   t   elemt   xmlbuft   et(    (    s%   /usr/share/java-utils/maven_depmap.pyt   prettify_elementú   s    		c         C   s¢  d } y1 t ƒ  } t d t ƒ } | j |  d | ƒ} Wn t k
 rV t d ƒ } n X| si t ƒ  } n t | j d ƒ ƒ } | s | d k r  t	 | d ƒ n  | j
 | j j ƒ t | ƒ } x¥ t | ƒ D]— } xŽ | D]† } t	 | d ƒ }	 | s | d k r| | j _ n d | j _ | j j d d	 ƒ }
 | j j d d
 ƒ } |	 j |
 ƒ |	 j | ƒ qÙ WqÌ Wt | ƒ } t j |  d d ƒ  } | j | ƒ Wd QXd S(   sP   Writes fragment into fragment_path in specialised format
    compatible with jppt   remove_blank_textt   parsert   dependencyMapR;   R   t   skipProvidest
   dependencyRL   t   mavent   jppt   ws   utf-8N(   R"   R   R	   RF   t   parseR2   R   R>   R?   R   Rm   R   RU   R=   RB   R   t   get_xml_elementRh   R   t   codecst   openRv   (   t   fragment_pathRi   t   mappingst   add_versionsRL   R~   R   RI   RN   t   dept   mvn_xmlt	   local_xmlt   xmlstrt   fout(    (    s%   /usr/share/java-utils/maven_depmap.pyt   output_fragment  s6    	c         C   sÃ   t  j |  d ƒ } zŸ | | j ƒ  k r° t j j | ƒ } xa t rœ | sL Pn  | t j j } | | j ƒ  k r | j | d ƒ n  t j j	 | ƒ \ } } q< W| j | | ƒ n  Wd  | j
 ƒ  Xd  S(   Nt   aR   (   t   zipfilet   ZipFilet   namelistR   R    R   RF   t   sept   writestrR?   t   close(   t   archive_namet	   file_namet   file_contentst   archiveR    t   subdirt   tail(    (    s%   /usr/share/java-utils/maven_depmap.pyt   append_if_missing.  s    	c         C   s¦   d j  d | j ƒ } t d t ƒ  ƒ } d j  d | d | ƒ } | j } | j rm | d j  d | j ƒ } n  | j r’ | d j  d	 | j ƒ } n  t |  | | ƒ d  S(
   Ns8   META-INF/maven/{f.groupId}/{f.artifactId}/pom.propertiest   fs   %a %b %d %H:%M:%S UTC %Ys§   #Generated by Java Packages Tools
#{timestamp}
version={f.upstream_artifact.version}
groupId={f.upstream_artifact.groupId}
artifactId={f.upstream_artifact.artifactId}
t	   timestamps   extension={ext}
RM   s   classifier={clas}
t   clas(   RV   R   R   R   R6   RT   R¢   (   R   Ri   t
   props_pathR¤   t
   propertiest   artifact(    (    s%   /usr/share/java-utils/maven_depmap.pyt   inject_pom_properties@  s    				t   __main__sC   usage: %prog [options] fragment_path pom_path|<MVN spec> [jar_path]t   usages   -as   --appendt   typeRX   t   helps8   Additional depmaps to add (gid:aid)  [default: %default]s   -rs
   --versionss*   Additional versions to add for each depmaps   -ns   --namespaces(   Namespace to use for generated fragmentst   defaults   -ps   --prefixs3   Prefix where artifacts are expected to be installedR/   Rh   i   s   Incorrect number of argumentsi    i   i   R<   s*   Artifact definition has to include versions   %s,%ss™   Problem parsing POM file. Is it valid maven POM? Send bugreport         to https://fedorahosted.org/javapackages/ and attach %s to         this bugreport(    (I   t   optparseR    t   sysR   R#   RC   R   t   xml.dom.minidomRt   RŠ   t   os.pathR   R   R–   t   timeR   R   t
   lxml.etreeR   R   R   R	   t   javapackagesR
   R   R   t	   ExceptionR   R   R   R   R,   R"   R:   RP   R^   Rd   Rp   R   R”   R¢   R©   R   R«   R   t
   add_optiont   set_defaultst
   parse_argst   optionsR   Rh   t   append_depsRI   RŽ   Re   R&   R3   t   errort   stripRŒ   R   R   t   localRi   t   rsplitt   pom_strRf   t   upstreamR6   RU   R   R   t   exit(    (    (    s%   /usr/share/java-utils/maven_depmap.pyt   <module>&   s    "
	)	) 	
	*							