# yRc @sqddlmZddlZddlZddlZddlZddlmZddlZddl Z ddl m Z m Z ddl Z ddlmZmZddlmZmZmZmZddlmZmZdd<d YZd efd YZd efd YZdefdYZdefdYZdZdddZ!dZ"ddZ#ddZ$dddZ%dZ&dZ'dZ(dZ)e*dkrmdZ+ed 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-de,j-d.d/d#d$d%d0d-d1e,j.d2de,j/\Z0Z1e0j2Z3e0j4Z5e0j6Z6e0j7Z7e8e1d3kre,j9d4ne1d5j:Z;e1d6j:Z<dZ=e8e1d7kre1d3j:Z=dZ>dZ?d8e<kre<j@d1dZAejBeAZCeCjDdkrQdeC_DneCjEsje,j9d9ne#eCe7e=Z>eeCe>Z?ne$e<e7e=Z?e?re)e=e?qne$e<e7Z?e;GHe?rLe%e?e3e6ZFe'e;e?eFe5e5r'd:e?jGjEe5fZ5e"e5e<e=qjd8e<kr;e<GHne=rje=GHqjqme,j9d;e<ejHd6ndS(=i(t OptionParserN(tStringIO(tbasenametdirname(tgmtimetstrftime(t SubElementtElementt ElementTreet XMLParser(tPOMtArtifacttFragmentcBs eZdZdZdZRS(s-simple structure to hold fragment informationcCs||_||_dS(N(tupstream_artifacttlocal_artifact(tselfR R((s%/usr/share/java-utils/maven_depmap.pyt__init__:s cCs |j|S(N(t__dict__(Rtindex((s%/usr/share/java-utils/maven_depmap.pyt __getitem__>s(t__name__t __module__t__doc__RR(((s%/usr/share/java-utils/maven_depmap.pyR 8s tPackagingTypeMissingFilecBseZdZRS(cCsd|f|_dS(NsMPackaging type is not 'pom' and no artifact path has been provided for POM %s(targs(Rtpom_path((s%/usr/share/java-utils/maven_depmap.pyRCs(RRR(((s%/usr/share/java-utils/maven_depmap.pyRBstIncompatibleFilenamescBseZdZRS(cCsd||ff|_dS(NsnFilenames of POM %s and JAR %s does not match properly. Check that JAR subdirectories matches '.' in pom name.(R(RRtjar_path((s%/usr/share/java-utils/maven_depmap.pyRGs(RRR(((s%/usr/share/java-utils/maven_depmap.pyRFstMissingJarFilecBseZdZRS(cCs d|_dS(NsPJAR seems to be missing in standard directories. Make sure you have installed it(sPJAR seems to be missing in standard directories. Make sure you have installed it(R(R((s%/usr/share/java-utils/maven_depmap.pyRKs(RRR(((s%/usr/share/java-utils/maven_depmap.pyRJstUnknownFileExtensioncBseZdZRS(cCsd|f|_dS(NsUnknown file extension: %s(R(RR((s%/usr/share/java-utils/maven_depmap.pyROs(RRR(((s%/usr/share/java-utils/maven_depmap.pyRNscCsgddddgD]}tjj||^q}d}xE|D]=}||krAtjd|}tj|d|}qAqAW|stn|S(Ns share/javasshare/java-jnislib/javas lib64/javas.*%s/t(tostpathtjointNonetretcompiletsubR(Rtprefixtparttjavadirstjarparttjdirt javadir_re((s%/usr/share/java-utils/maven_depmap.pyt_get_javadir_partRs(   tjarc Cst|}|r.tjj|s3tdnt||}|ddkrd|krpt||ndt|}t|t|d }|d|d|fks+t||q+qd|krt||nd }t|t|d }|d |kst||qnl|ddkrt j d |}d|j d}t j d |}|j d}nd }|dd !}||fS(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. sJAR path doesn't existit.t/sJPP/%sis JPP.%s-%s.pomitJPPs JPP-%s.pomsJPP\.([^-]*?)-.*sJPP\.[^-]*?-(.*)\.pomi( RRR tisfiletIOErrorR,RRtlenR#tmatchtgroup( RR&Rt extensiontpomnameR)tjpp_gidtjpp_aidR4((s%/usr/share/java-utils/maven_depmap.pyt_get_jpp_from_filenamebs4    c Cstt|jd}|}|}d|krtjj|\}}t}xst|D]e}d|||f} |stj tjj || t }| }ntj t || | GHq^Wtj|n|rtjj|\}}t}xst|D]e}d|||f} |sRtj tjj || t }| }ntj t || | GHqWtj|ndS(sMake pom and jar file versionedt,t:s%s-%s%sN(tlisttsettsplitRR tsplitexttFalsetsortedtshutiltcopytrealpathtTruetsymlinkRtremove( tversionsRRt vpom_patht vjar_pathtroottextRGtvertdest((s%/usr/share/java-utils/maven_depmap.pyt_make_files_versioneds6     cCsO|s(td|j|j|j|jSt||}d}d|krddjdt|}n|j}|s|d}n|jdjd|st t ||nt |j djd|d}|}|jr0||j d  }||j d d |jkr0t t ||q0nt|||j|j|jS( NR0R/s JPP/{gid}tgidR-s.{ext}RMRt-i(R t artifactIdR6t classifiertversionR,tformatRtendswithRtstrRtreplacetrfind(R R&RR)t local_gidRMtfnamet local_aid((s%/usr/share/java-utils/maven_depmap.pytget_local_artifacts.        c Cst|}d}|sI|j s1|jdkr@ttnd}n"tjjt\}}|d}t||||\}}|dkrd}nt |j |j d|d|j } t |||} t | | S(s5Returns Fragment class or None if POM file is invalidRtpomiR-R6RU(R t packagingRRRR R@RR:R tgroupIdRSRUR ( tpom_fileR&tjar_fileR_R6R\RMR8R9R R((s%/usr/share/java-utils/maven_depmap.pyt parse_poms     $RcCs||j_||j_|g}|r|jd}xN|D]C}tj|}tj||j}|jt||jq=Wn|S(NR;( R t namespaceRR?R t from_mvn_strtmerge_artifactstappendR (tfragmentt additionsRetmapstaddstaddtmparttfull((s%/usr/share/java-utils/maven_depmap.pytcreate_mappingss     cCs]t}t}|j||j|dtddddtjjj|j j S(Ntxml_declarationtencodingsutf-8tmethodtxml( RRt_setroottwriteRFRttdomtminidomt parseStringtgetvaluet toprettyxml(telemtxmlbuftet((s%/usr/share/java-utils/maven_depmap.pytprettify_elements    cCsd }y1t}tdt}|j|d|}Wntk rVtd}nX|sit}nt|jd}|s|dkrt |dn|j |j j t |}xt|D]}x|D]}t |d} |s|dkr||j_ n d|j_ |j jdd } |jjdd } | j| | j| qWqWt|} tj|d d } | j| Wd QXd S(sPWrites fragment into fragment_path in specialised format compatible with jpptremove_blank_texttparsert dependencyMapR;Rt skipProvidest dependencyRLtmaventjpptwsutf-8N(R"RR RFtparseR2RR>R?RRmR RUR=RBRtget_xml_elementRhRtcodecstopenRv(t fragment_pathRitmappingst add_versionsRLR~RRIRNtdeptmvn_xmlt local_xmltxmlstrtfout((s%/usr/share/java-utils/maven_depmap.pytoutput_fragments6        cCstj|d}z||jkrtjj|}xatr|sLPn|tjj}||jkr|j|dntjj |\}}q<W|j||nWd|j XdS(NtaR( tzipfiletZipFiletnamelistRR RRFtseptwritestrR?tclose(t archive_namet file_namet file_contentstarchiveR tsubdirttail((s%/usr/share/java-utils/maven_depmap.pytappend_if_missing.s cCsdjd|j}tdt}djd|d|}|j}|jrm|djd|j}n|jr|djd |j}nt|||dS( Ns8META-INF/maven/{f.groupId}/{f.artifactId}/pom.propertiestfs%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 timestampsextension={ext} RMsclassifier={clas} tclas(RVR RRR6RTR(RRit props_pathRt propertiestartifact((s%/usr/share/java-utils/maven_depmap.pytinject_pom_properties@s    t__main__sCusage: %prog [options] fragment_path pom_path| [jar_path]tusages-as--appendttypeRXthelps8Additional depmaps to add (gid:aid) [default: %default]s-rs --versionss*Additional versions to add for each depmaps-ns --namespaces(Namespace to use for generated fragmentstdefaults-ps--prefixs3Prefix where artifacts are expected to be installedR/RhisIncorrect number of argumentsiiiR<s*Artifact definition has to include versions%s,%ssProblem parsing POM file. Is it valid maven POM? Send bugreport to https://fedorahosted.org/javapackages/ and attach %s to this bugreport((ItoptparseRtsysRR#RCRtxml.dom.minidomRtRtos.pathRRRttimeRRt lxml.etreeRRRR t javapackagesR R R t ExceptionRRRRR,R"R:RPR^RdRpRRRRRRRt add_optiont set_defaultst parse_argstoptionsRRht append_depsRIRReR&R3terrortstripRRRtlocalRitrsplittpom_strRftupstreamR6RURR texit(((s%/usr/share/java-utils/maven_depmap.pyt&s       "  ) )  *