How to determine package that has depencency when ts.check callback function is called?
Jeff Johnson <[email protected]> Fri, 18 Aug 2006 07:41:48 -0400
| Newsgroups | gmane.linux.redhat.rpm.python |
|---|---|
| Message-ID | <[email protected]> |
--===============3432168417798756281== Content-Type: multipart/alternative; boundary=Apple-Mail-1--647034463 --Apple-Mail-1--647034463 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; delsp=yes; format=flowed > I'm using ts.check to determine if a subset of packages from a CentOS > distribution has any unsatisfied dependencies. In the ts.check callback > function I do a allts.dbMatch call to find out what package provides the > dependency handed to the callback. allts is a transaction set that uses the rpm > database from the rpmbd-CentOS package, which contains all the packages in the > distribution. This approach works great for catching any missing packages in my > subset of packages. > Good. Yes the ts.check() callback makes depsolving rather trivial. > My question though, is how can I determine which package is the source of the > dependency that was handed to the ts.check callback? Am I missing something or > is this just an omission on the part of the python binding? > You can't with older rpm. I chickened out and did not pass a rpmds object on the callback when I first implemented. I forget when I changed rpmts_SolveCallback() to pass the rpmds object, more than a year ago for sure, which would be rpm-4.4.2 or something. Hmm, no methods to extract original package NEVRA with a rpmds object either. In general, rpmds objects are not necessarily associated with a package. It wouldn't be hard to save the original package NEVRA if the dependency set originated with a package. Lemme noodle a bit whether adding originating pkg NEVRA is worth the effort. Data which is sometimes missing is perhaps less than useful. Another approach would be to find which transaction element contains the rpmds object passed to the callback, but one would have to be careful about preserving the iterator index through the callback. > def checkCallback(ts, depType, depName, depEVR, senseFlags): > if depType == rpm.RPMTAG_REQUIRENAME: > prevHdrName = "" > newPkg = None > if depName[0] == "/": > dbIndex = "basenames" > else: > dbIndex = "providename" > > for hdr in allts.dbMatch(dbIndex, depName): > hdrName = hdr[rpm.RPMTAG_NAME] > # If this package has a shorter name use it so that shortest name wins > if prevHdrName == "" or len(hdrName) < len(prevHdrName): > prevHdrName = hdrName > newPkg = hdr > if newPkg: > ts.addInstall(newPkg, newPkg, "i") This should be "u", or you may end up with non-Obsolete:'d packages when renaming. > return -1 > return 1 hth 73 de Jeff --Apple-Mail-1--647034463 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=ISO-8859-1 <HTML><BODY style=3D"word-wrap: break-word; -khtml-nbsp-mode: space; = -khtml-line-break: after-white-space; "><DIV style=3D"margin-top: 0px; = margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: 13px;">> I'm using = ts.check to determine if a subset of packages from a = CentOS</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; margin-right: = 0px; margin-bottom: 0px; margin-left: 0px; "><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: 13px;">> distribution = has any unsatisfied dependencies.</SPAN></FONT><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: 13px;">=A0 = </SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Courier" = size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: = 13px;">In the ts.check callback</SPAN></FONT></DIV><DIV = style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; = margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Courier" = size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: = 13px;">>=A0</SPAN></FONT><FONT class=3D"Apple-style-span" = face=3D"Courier" size=3D"3"><SPAN class=3D"Apple-style-span" = style=3D"font-size: 13px;">function I do a allts.dbMatch call to find = out what package provides the</SPAN></FONT></DIV><DIV style=3D"margin-top:= 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: = 13px;">>=A0</SPAN></FONT><FONT class=3D"Apple-style-span" = face=3D"Courier" size=3D"3"><SPAN class=3D"Apple-style-span" = style=3D"font-size: 13px;">dependency handed to the = callback.</SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Courier" = size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: 13px;">=A0= </SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Courier" = size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: = 13px;">allts is a transaction set that uses the = rpm</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; margin-right: 0px; = margin-bottom: 0px; margin-left: 0px; "><FONT class=3D"Apple-style-span" = face=3D"Courier" size=3D"3"><SPAN class=3D"Apple-style-span" = style=3D"font-size: 13px;">>=A0</SPAN></FONT><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: 13px;">database from the = rpmbd-CentOS package, which contains all the packages in = the</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; margin-right: 0px; = margin-bottom: 0px; margin-left: 0px; "><FONT class=3D"Apple-style-span" = face=3D"Courier" size=3D"3"><SPAN class=3D"Apple-style-span" = style=3D"font-size: 13px;">>=A0</SPAN></FONT><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: = 13px;">distribution.</SPAN></FONT><FONT class=3D"Apple-style-span" = face=3D"Courier" size=3D"3"><SPAN class=3D"Apple-style-span" = style=3D"font-size: 13px;">=A0 </SPAN></FONT><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: 13px;">This approach = works great for catching any missing packages in = my</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; margin-right: 0px; = margin-bottom: 0px; margin-left: 0px; "><FONT class=3D"Apple-style-span" = face=3D"Courier" size=3D"3"><SPAN class=3D"Apple-style-span" = style=3D"font-size: 13px;">>=A0</SPAN></FONT><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: 13px;">subset of = packages.</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; = margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal = normal normal 13px/normal Courier; min-height: 16px; = ">>=A0<BR></DIV><DIV style=3D"margin-top: 0px; margin-right: 0px; = margin-bottom: 0px; margin-left: 0px; font: normal normal normal = 13px/normal Courier; min-height: 16px; "><BR = class=3D"khtml-block-placeholder"></DIV><DIV style=3D"margin-top: 0px; = margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal = normal normal 13px/normal Courier; min-height: 16px; ">Good. Yes the = ts.check() callback makes depsolving rather trivial.</DIV><DIV = style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; = margin-left: 0px; font: normal normal normal 13px/normal Courier; = min-height: 16px; "><BR class=3D"khtml-block-placeholder"></DIV><DIV = style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; = margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Courier" = size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: = 13px;">>=A0</SPAN></FONT><FONT class=3D"Apple-style-span" = face=3D"Courier" size=3D"3"><SPAN class=3D"Apple-style-span" = style=3D"font-size: 13px;">My question though, is how can I determine = which package is the source of the</SPAN></FONT></DIV><DIV = style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; = margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Courier" = size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: = 13px;">>=A0</SPAN></FONT><FONT class=3D"Apple-style-span" = face=3D"Courier" size=3D"3"><SPAN class=3D"Apple-style-span" = style=3D"font-size: 13px;">dependency that was handed to the ts.check = callback?</SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Courier" = size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: 13px;">=A0= </SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Courier" = size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: = 13px;">Am I missing something or</SPAN></FONT></DIV><DIV = style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; = margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Courier" = size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: = 13px;">>=A0</SPAN></FONT><FONT class=3D"Apple-style-span" = face=3D"Courier" size=3D"3"><SPAN class=3D"Apple-style-span" = style=3D"font-size: 13px;">is this just an omission on the part of the = python binding?</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; = margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal = normal normal 13px/normal Courier; min-height: 16px; = ">>=A0<BR></DIV><DIV style=3D"margin-top: 0px; margin-right: 0px; = margin-bottom: 0px; margin-left: 0px; font: normal normal normal = 13px/normal Courier; min-height: 16px; "><BR = class=3D"khtml-block-placeholder"></DIV><DIV style=3D"margin-top: 0px; = margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal = normal normal 13px/normal Courier; min-height: 16px; ">You can't with = older rpm. I chickened out and did not pass a rpmds object</DIV><DIV = style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; = margin-left: 0px; font: normal normal normal 13px/normal Courier; = min-height: 16px; ">on the callback when I first implemented.</DIV><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: 13px;"><DIV><BR = class=3D"khtml-block-placeholder"></DIV><DIV>I forget when I changed = rpmts_SolveCallback() to pass the rpmds object, more than</DIV><DIV>a = year ago for sure, which would be rpm-4.4.2 or something.</DIV><DIV><BR = class=3D"khtml-block-placeholder"></DIV><DIV>Hmm, no methods to extract = original package NEVRA with a rpmds object either.</DIV><DIV><BR = class=3D"khtml-block-placeholder"></DIV><DIV>In general, rpmds objects = are not necessarily associated with a package. It wouldn't</DIV><DIV>be = hard to save the original package NEVRA if the dependency set originated = with a</DIV><DIV>package.</DIV><DIV><BR = class=3D"khtml-block-placeholder"></DIV><DIV>Lemme noodle a bit whether = adding originating pkg NEVRA is worth the effort. Data</DIV><DIV>which = is sometimes missing=A0is perhaps less than useful.</DIV><DIV><BR = class=3D"khtml-block-placeholder"></DIV><DIV>Another approach would be = to find which transaction element contains the rpmds</DIV><DIV>object = passed to the callback, but one would have to be careful about = preserving</DIV><DIV>the iterator index through the = callback.</DIV><DIV><BR = class=3D"khtml-block-placeholder"></DIV></SPAN></FONT><DIV = style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; = margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Courier" = size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: = 13px;">>=A0</SPAN></FONT><FONT class=3D"Apple-style-span" = face=3D"Courier" size=3D"3"><SPAN class=3D"Apple-style-span" = style=3D"font-size: 13px;">def checkCallback(ts, depType, depName, = depEVR, senseFlags):</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; = margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: = 13px;">>=A0</SPAN></FONT><FONT class=3D"Apple-style-span" = face=3D"Courier" size=3D"3"><SPAN class=3D"Apple-style-span" = style=3D"font-size: 13px;">=A0 =A0 </SPAN></FONT><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: 13px;">if depType =3D=3D = rpm.RPMTAG_REQUIRENAME:</SPAN></FONT></DIV><DIV style=3D"margin-top: = 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: = 13px;">>=A0</SPAN></FONT><FONT class=3D"Apple-style-span" = face=3D"Courier" size=3D"3"><SPAN class=3D"Apple-style-span" = style=3D"font-size: 13px;">=A0 =A0 =A0 =A0 </SPAN></FONT><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: 13px;">prevHdrName =3D = ""</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; margin-right: 0px; = margin-bottom: 0px; margin-left: 0px; "><FONT class=3D"Apple-style-span" = face=3D"Courier" size=3D"3"><SPAN class=3D"Apple-style-span" = style=3D"font-size: 13px;">>=A0</SPAN></FONT><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: 13px;">=A0 =A0 =A0 =A0 = </SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Courier" = size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: = 13px;">newPkg =3D None</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; = margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: = 13px;">>=A0</SPAN></FONT><FONT class=3D"Apple-style-span" = face=3D"Courier" size=3D"3"><SPAN class=3D"Apple-style-span" = style=3D"font-size: 13px;">=A0 =A0 =A0 =A0 </SPAN></FONT><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: 13px;">if depName[0] =3D=3D= "/":</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; margin-right: = 0px; margin-bottom: 0px; margin-left: 0px; "><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: = 13px;">>=A0</SPAN></FONT><FONT class=3D"Apple-style-span" = face=3D"Courier" size=3D"3"><SPAN class=3D"Apple-style-span" = style=3D"font-size: 13px;">=A0 =A0 =A0 =A0 =A0 =A0 </SPAN></FONT><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: 13px;">dbIndex =3D = "basenames"</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; = margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: = 13px;">>=A0</SPAN></FONT><FONT class=3D"Apple-style-span" = face=3D"Courier" size=3D"3"><SPAN class=3D"Apple-style-span" = style=3D"font-size: 13px;">=A0 =A0 =A0 =A0 </SPAN></FONT><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: = 13px;">else:</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; = margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: = 13px;">>=A0</SPAN></FONT><FONT class=3D"Apple-style-span" = face=3D"Courier" size=3D"3"><SPAN class=3D"Apple-style-span" = style=3D"font-size: 13px;">=A0 =A0 =A0 =A0 =A0 =A0 </SPAN></FONT><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: 13px;">dbIndex =3D = "providename"</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; = margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal = normal normal 13px/normal Courier; min-height: 16px; = ">>=A0<BR></DIV><DIV style=3D"margin-top: 0px; margin-right: 0px; = margin-bottom: 0px; margin-left: 0px; "><FONT class=3D"Apple-style-span" = face=3D"Courier" size=3D"3"><SPAN class=3D"Apple-style-span" = style=3D"font-size: 13px;">>=A0</SPAN></FONT><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: 13px;">=A0 =A0 =A0 =A0 = </SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Courier" = size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: = 13px;">for hdr in allts.dbMatch(dbIndex, = depName):</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; = margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: = 13px;">>=A0</SPAN></FONT><FONT class=3D"Apple-style-span" = face=3D"Courier" size=3D"3"><SPAN class=3D"Apple-style-span" = style=3D"font-size: 13px;">=A0 =A0 =A0 =A0 =A0 =A0 </SPAN></FONT><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: 13px;">hdrName =3D = hdr[rpm.RPMTAG_NAME]</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; = margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: = 13px;">>=A0</SPAN></FONT><FONT class=3D"Apple-style-span" = face=3D"Courier" size=3D"3"><SPAN class=3D"Apple-style-span" = style=3D"font-size: 13px;">=A0 =A0 =A0 =A0 =A0 =A0 </SPAN></FONT><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: 13px;"># If this package = has a shorter name use it so that shortest name = wins</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; margin-right: = 0px; margin-bottom: 0px; margin-left: 0px; "><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: = 13px;">>=A0</SPAN></FONT><FONT class=3D"Apple-style-span" = face=3D"Courier" size=3D"3"><SPAN class=3D"Apple-style-span" = style=3D"font-size: 13px;">=A0 =A0 =A0 =A0 =A0 =A0 </SPAN></FONT><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: 13px;">if prevHdrName =3D=3D= "" or len(hdrName) < len(prevHdrName):</SPAN></FONT></DIV><DIV = style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; = margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Courier" = size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: = 13px;">>=A0</SPAN></FONT><FONT class=3D"Apple-style-span" = face=3D"Courier" size=3D"3"><SPAN class=3D"Apple-style-span" = style=3D"font-size: 13px;">=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = </SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Courier" = size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: = 13px;">prevHdrName =3D hdrName</SPAN></FONT></DIV><DIV = style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; = margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Courier" = size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: = 13px;">>=A0</SPAN></FONT><FONT class=3D"Apple-style-span" = face=3D"Courier" size=3D"3"><SPAN class=3D"Apple-style-span" = style=3D"font-size: 13px;">=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = </SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Courier" = size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: = 13px;">newPkg =3D hdr</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; = margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: = 13px;">>=A0</SPAN></FONT><FONT class=3D"Apple-style-span" = face=3D"Courier" size=3D"3"><SPAN class=3D"Apple-style-span" = style=3D"font-size: 13px;">=A0 =A0 =A0 =A0 </SPAN></FONT><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: 13px;">if = newPkg:</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; margin-right: = 0px; margin-bottom: 0px; margin-left: 0px; "><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: = 13px;">>=A0</SPAN></FONT><FONT class=3D"Apple-style-span" = face=3D"Courier" size=3D"3"><SPAN class=3D"Apple-style-span" = style=3D"font-size: 13px;">=A0 =A0 =A0 =A0 =A0 =A0 </SPAN></FONT><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: = 13px;">ts.addInstall(newPkg, newPkg, "i")</SPAN></FONT></DIV><DIV = style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; = margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Courier" = size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: = 13px;"><BR class=3D"khtml-block-placeholder"></SPAN></FONT></DIV><DIV = style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; = margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Courier" = size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: = 13px;">This should be "u", or you may end up with non-Obsolete:'d = packages when renaming.</SPAN></FONT></DIV><DIV style=3D"margin-top: = 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: 13px;"><BR = class=3D"khtml-block-placeholder"></SPAN></FONT></DIV><DIV = style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; = margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Courier" = size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: = 13px;">>=A0</SPAN></FONT><FONT class=3D"Apple-style-span" = face=3D"Courier" size=3D"3"><SPAN class=3D"Apple-style-span" = style=3D"font-size: 13px;">=A0 =A0 =A0 =A0 =A0 =A0 </SPAN></FONT><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: 13px;">return = -1</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; margin-right: 0px; = margin-bottom: 0px; margin-left: 0px; "><FONT class=3D"Apple-style-span" = face=3D"Courier" size=3D"3"><SPAN class=3D"Apple-style-span" = style=3D"font-size: 13px;">>=A0</SPAN></FONT><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: 13px;">=A0 =A0 = </SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Courier" = size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: = 13px;">return 1</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; = margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: 13px;"><BR = class=3D"khtml-block-placeholder"></SPAN></FONT></DIV><DIV = style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; = margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Courier" = size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: = 13px;">hth</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; = margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><FONT = class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><SPAN = class=3D"Apple-style-span" style=3D"font-size: 13px;"><BR = class=3D"khtml-block-placeholder"></SPAN></FONT></DIV><DIV = style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; = margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Courier" = size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: = 13px;">73 de Jeff</SPAN></FONT></DIV></BODY></HTML>= --Apple-Mail-1--647034463-- --===============3432168417798756281== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Rpm-python-list mailing list [email protected] https://lists.dulug.duke.edu/mailman/listinfo/rpm-python-list --===============3432168417798756281==--