]> git.pld-linux.org Git - projects/pld-ftp-admin.git/commitdiff
- package removal works (and I'm starting to like python's flexibility)
authorMariusz Mazur <mmazur@pld-linux.org>
Tue, 23 Nov 2004 15:25:38 +0000 (15:25 +0000)
committerMariusz Mazur <mmazur@pld-linux.org>
Tue, 23 Nov 2004 15:25:38 +0000 (15:25 +0000)
Changed files:
    bin/pfa-mvpkg -> 1.3
    bin/pfa-rmpkg -> 1.1
    modules/ftptree.py -> 1.3

bin/pfa-mvpkg
bin/pfa-rmpkg [new file with mode: 0755]
modules/ftptree.py

index 3ea725a4e35f4bc84f58e538710828ba5f5842ce..0665cda9769cde68c993bd8bf161a0c5514c9889 100644 (file)
@@ -30,7 +30,7 @@ if not direxists(sys.argv[2]):
 
 srctree=FtpTree(sys.argv[1], loadall=True)
 dsttree=FtpTree(sys.argv[2])
-srctree.markpkgs(sys.argv[3:])
+srctree.mark4moving(sys.argv[3:])
 
 srctree.movepkgs(dsttree)
 
diff --git a/bin/pfa-rmpkg b/bin/pfa-rmpkg
new file mode 100755 (executable)
index 0000000..76c8511
--- /dev/null
@@ -0,0 +1,31 @@
+#!/usr/bin/env python
+# vi: encoding=utf-8 ts=8 sts=4 sw=4 et
+
+import sys, os, string, urllib, re
+
+sys.path.insert(0, os.environ['HOME']+'/pld-ftp-admin/modules')
+import config
+from ftptree import Pkg, FtpTree
+
+def direxists(path):
+    try:
+        os.stat(config.value['ftp_dir']+'/'+path)
+    except OSError, (errno, errmsg):
+        return False
+    else:
+        return True
+
+if len(sys.argv) < 3:
+    print "Not enough parameters given"
+    print "remove.py tree package1 [package2...]"
+    sys.exit(1)
+
+if not direxists(sys.argv[1]):
+    print config.value['ftp_dir']+'/'+sys.argv[1] + " does not exist" 
+    sys.exit(1)
+
+tree=FtpTree(sys.argv[1])
+
+tree.mark4removal(sys.argv[2:])
+tree.removepkgs()
+
index fce9268cfc7ca4d71a039c3bcdd02a26868fbe52..cc4f9fd9d74d86c9aec76f98d1fc2e4a41008c36 100644 (file)
@@ -33,15 +33,22 @@ class Pkg:
         self.tree=tree
         self.name=name
         self.loaded=False
-        self.marked=False
+        self.marked4removal=False
+        self.marked4moving=True
         self.load()
 
     def __repr__(self):
         return self.name
 
-    def mark(self):
-        if not self.marked:
-            self.tree.markedpkgs.append(self)
+    def mark4moving(self):
+        if not self.marked4moving:
+            self.tree.marked4moving.append(self)
+            self.marked4moving=True
+
+    def mark4removal(self):
+        if not self.marked4removal:
+            self.tree.marked4removal.append(self)
+            self.marked4removal=True
 
     def load(self):
         f=open(self.tree.basedir+'/SRPMS/.metadata/'+self.name+'.src.rpm.info', 'r')
@@ -66,7 +73,7 @@ class Pkg:
         f.close()
         self.loaded=True
         if self.info.has_key('move'):
-            self.mark()
+            self.mark4moving()
 
     def writeinfo(self):
         f=open(self.tree.basedir+'/SRPMS/.metadata/'+name+'.src.rpm.info', 'w')
@@ -112,7 +119,8 @@ class FtpTree:
     def __init__(self, tree, loadall=False):
         self.basedir=config.value['ftp_dir']+'/'+tree
         self.loadedpkgs={}
-        self.markedpkgs=[]
+        self.marked4removal=[]
+        self.marked4moving=[]
         def filter_pkgs(pkg):
             if not pkg[-13:]=='.src.rpm.info':
                 return None
@@ -147,10 +155,23 @@ class FtpTree:
         self.__rmolderfromsrc()
         self.__rmotherfromdst(dsttree)
 
-        for pkg in self.markedpkgs:
+        for pkg in self.marked4moving:
             pkg.move(dsttree)
 
-    def markpkgs(self, wannabepkgs):
+    def removepkgs(self):
+        for pkg in self.marked4removal:
+            pkg.remove()
+
+    def mark4removal(self, wannabepkgs):
+        self.__mark4something(wannabepkgs, Pkg.mark4removal)
+
+    def mark4moving(self, wannabepkgs):
+        self.__mark4something(wannabepkgs, Pkg.mark4moving)
+        
+
+    # Internal functions below
+
+    def __mark4something(self, wannabepkgs, markfunction):
         def chopoffextension(pkg):
             found=pkg.find('.src.rpm')
             if found==-1:
@@ -162,10 +183,11 @@ class FtpTree:
             if pkgname in self.pkgnames:
                 if not pkgname in self.loadedpkgs.keys():
                     self.loadedpkgs[pkgname]=Pkg(pkgname, self)
-                self.loadedpkgs[pkgname].mark()
+                markfunction(self.loadedpkgs[pkgname])
             else:
                 perror(pkgname+" was not found in source tree")
         bailoutonerror()
+
     def __checkbuild(self):
         #f=urllib.urlopen('http://ep09.pld-linux.org/~builderth/queue.txt')
         f=open('queue.txt')
@@ -179,7 +201,7 @@ class FtpTree:
             elif i[0]=='b':
                 requests[id]=requests[id]+i
         f.close()
-        for pkg in self.markedpkgs:
+        for pkg in self.marked4moving:
             for bid in pkg.build.keys():
                 if requests.has_key(bid) and not requests[bid].find('?') == -1:
                     perror("Building of package %s (buildid %s) not finished" % (pkg,bid))
@@ -194,7 +216,7 @@ class FtpTree:
                     return None
             return filter(filter_other_pkgs, tree.pkgnames)
         self.find_other_pkgs=find_other_pkgs
-        for pkg in self.markedpkgs:
+        for pkg in self.marked4moving:
             otherpkgnames=find_other_pkgs(pkg, dsttree)
             curarchs=[]
             missingarchs=[]
@@ -222,13 +244,13 @@ class FtpTree:
                     return None
             return filter(filter_older_pkgs, self.find_other_pkgs(pkg, self))
 
-        for pkg in self.markedpkgs:
+        for pkg in self.marked4moving:
             olderpkgnames=find_older_pkgs(pkg)
             for i in olderpkgnames:
                 Pkg(i, self).remove()
 
     def __rmotherfromdst(self, dsttree):
-        for pkg in self.markedpkgs:
+        for pkg in self.marked4moving:
             pkgnames=self.find_other_pkgs(pkg, dsttree)
             for i in pkgnames:
                 Pkg(i, dsttree).remove()
This page took 0.061303 seconds and 4 git commands to generate.