[Momonga-devel.ja:01353] noarch に/から移ったパッケージのOmoiKondaraでの更新


ずんだあんです

ここ数日、OmoiKondaraでビルドしたパッケージをmph-get upgradeする際に、何
度もインストールされるパッケージがあるのに気づきました。手元では、
  U alien : 8.21-1m -> 8.21-2m
  U ghostscript-fonts : 7.05-1m -> 6.0-1m
  U octave-matcompat : 2001.02.25-8m -> 2001.02.25-9m
  U perl-Chart : 1.3-1m -> 1.3-2m
  U perl-File-Find-Rule : 0.07-1m -> 0.08-1m
  U perl-Number-Compare : 0.01-1m -> 0.01-2m
  U perl-Test-Manifest : 0.9-1m -> 0.91-1m
  U perl-Text-Glob : 0.05-1m -> 0.05-2m
  U perl-Time-modules : 2002.1001-2m -> 2002.1001-3m
  U perl-XML-SAX-Base : 1.04-1m -> 1.04-2m
  U ruby-racc : 1.4.2-3m -> 1.4.2-4m
というアップグレードが何度も行われました。

これらのパッケージは最近アーキテクチャがnoarchとi586やppcの間で変更になっ
たもので、OmoiKondaraの作成するパッケージ置き場には古いアーキテクチャの
ディレクトリと新しいアーキテクチャの両方にバイナリパッケージが置かれてい
ました。通常は、新しいバイナリパッケージができあがった場合には、
OmoiKondaraによって古いバイナリパッケージが消されます。

OmoiKondaraを下記のように変更することで、アーキテクチャの変更になった古
いパッケージの古いバイナリパッケージが消されるようになりました。しばらく
様子をみて不具合がないようならcommitします。ご意見などありましたらお知ら
せください。

それでは、また。

Index: OmoiKondara
===================================================================
RCS file: /home/cvs/tools/OmoiKondara,v
retrieving revision 1.97
diff -u -r1.97 OmoiKondara
--- OmoiKondara	28 Jan 2003 16:23:21 -0000	1.97
+++ OmoiKondara	5 Feb 2003 13:32:16 -0000
@@ -600,7 +600,13 @@
       end
     end
   end
-  
+
+=begin
+--- backup_rpms(install, specname)
+ビルドされたRPMファイルの古いバージョンのものをtopdir以下の各ディレクト
+リから消去し、新しいものをtopdirの各ディレクトリにコピーする。引数で指定
+されている場合には、新しいパッケージのインストールもする。
+=end
   def backup_rpms(install, specname=nil)
     topdir = get_topdir ".."
 
@@ -610,6 +616,7 @@
     end # if specname and $DEPGRAPH then
 
     if $RPMOPT =~ /\-ba|\-bs/ then
+      # refresh the SRPM file
       Dir.glob("SRPMS/*.rpm").each do |srpm|
         pkg = srpm.split("/")[-1].split("-")[0..-3].join("-")
         Dir.glob("#{topdir}/SRPMS/#{pkg}-*src.rpm") do |s|
@@ -623,7 +630,7 @@
     end
     if $RPMOPT =~ /\-ba|\-bb/ then
       installs = ""
-      rpms = Dir.glob("RPMS/#{$ARCH}/*.rpm")
+      rpms = Dir.glob("RPMS/{#{$ARCH},noarch}/*.rpm")
       rpms.each do |rpm|
         if specname and $DEPGRAPH then
           spec = $DEPGRAPH.db.specs[specname]
@@ -649,14 +656,16 @@
             GC.start
           end # begin
         end # if specname and $DEPGRAPH then
+        # refresh the packages in #{topdir} with the newly built ones
         pkg = rpm.split("/")[-1].split("-")[0..-3].join("-")
-        Dir.glob("#{topdir}/#{$ARCH}/#{pkg}-*.#{$ARCH}.rpm") do |r|
+        Dir.glob("#{topdir}/{#{$ARCH},noarch}/#{pkg}-*.{#{$ARCH},noarch}.rpm") do |r|
           if pkg == r.split("/")[-1].split("-")[0..-3].join("-") then
             File.delete r
           end
         end
-        exec_command "cp -pfv #{rpm} #{topdir}/#{$ARCH}"
-        File.chmod 0664, "#{topdir}/#{$ARCH}/#{rpm.split('/')[-1]}"
+        current_arch = rpm.split('/')[-2]
+        exec_command "cp -pfv #{rpm} #{topdir}/#{current_arch}"
+        File.chmod 0664, "#{topdir}/#{current_arch}/#{rpm.split('/')[-1]}"
         if install then
           installs += "#{rpm} "
         elsif $DEPEND_PACKAGE != "" && pkg =~ /#{$DEPEND_PACKAGE}/
@@ -664,46 +673,6 @@
         end
         if $SCANPACKAGES && rpms.last == rpm then
           exec_command "/usr/sbin/mph-scanpackages #{topdir}/#{$ARCH}"
-        end
-      end
-      rpms = Dir.glob("RPMS/noarch/*.rpm")
-      rpms.each do |rpm|
-        if specname and $DEPGRAPH then
-          spec = $DEPGRAPH.db.specs[specname]
-          begin
-            rpmpkg = RPM::Package.open(File.expand_path(rpm))
-            spec.packages.each do |pkg|
-              next if pkg.name != rpmpkg.name
-              pkg.provides = rpmpkg.provides.collect{|rpmprov| rpmprov.to_struct}
-              pkg.provides.each do |prov|
-                names = if $DEPGRAPH.db.packages[prov.name] then
-                          $DEPGRAPH.db.packages[prov.name].collect{|a| a.name}
-                        else
-                          []
-                        end
-                if not names.include?(pkg.name) then
-                  $DEPGRAPH.db.packages[prov.name] = pkg
-                end
-              end # pkg.provides.each do |prov|
-              pkg.requires = rpmpkg.requires.collect{|rpmreq| rpmreq.to_struct}
-            end # spec.packages.each do |pkg|
-          ensure
-            rpmpkg = nil
-            GC.start
-          end # begin
-        end # if specname and $DEPGRAPH then
-        pkg = rpm.split("/")[-1].split("-")[0..-3].join("-")
-        Dir.glob("#{topdir}/noarch/#{pkg}-*.noarch.rpm") do |r|
-          if pkg == r.split("/")[-1].split("-")[0..-3].join("-") then
-            File.delete r
-          end
-        end
-        exec_command "cp -pfv #{rpm} #{topdir}/noarch"
-        File.chmod 0664, "#{topdir}/noarch/#{rpm.split('/')[-1]}"
-        if $DEPEND_PACKAGE != "" && pkg =~ /#{$DEPEND_PACKAGE}/ then
-          installs += "#{rpm} "
-        end
-        if $SCANPACKAGES && rpms.last == rpm then
           exec_command "/usr/sbin/mph-scanpackages #{topdir}/noarch"
         end
       end