]> git.pld-linux.org Git - projects/pld-ftp-admin.git/commitdiff
- add archive tree support
authorElan Ruusamäe <glen@pld-linux.org>
Tue, 30 Jun 2009 04:22:35 +0000 (04:22 +0000)
committerElan Ruusamäe <glen@pld-linux.org>
Tue, 30 Jun 2009 04:22:35 +0000 (04:22 +0000)
Changed files:
    bin/pfa-mvpkg -> 1.17
    bin/pfa-testmvpkg -> 1.8
    modules/ftptree.py -> 1.41

bin/pfa-mvpkg
bin/pfa-testmvpkg
modules/ftptree.py

index 57b5983250aaa03cf90b95ea79e7e2c24dc1dd84..0dcac27de134102514fbbf3ce39fafb31005f6d4 100644 (file)
@@ -7,7 +7,7 @@ import ftptree
 from common import checkdir
 import ftpio
 from mailer import Message
-from config import value as config
+from config import archived_trees, logs_list
 
 nocheckbuild = False
 if len(sys.argv) > 4 and sys.argv[1] == '-nb':
@@ -24,6 +24,12 @@ if len(sys.argv) < 4:
 checkdir(sys.argv[1])
 checkdir(sys.argv[2])
 
+if sys.argv[2] in archived_trees:
+    archivetreename = ".archive/" + sys.argv[2]
+    checkdir(archivetreename)
+else:
+    archivetreename = None
+
 ftpio.connect('move')
 
 if not ftpio.lock(sys.argv[1], True):
@@ -35,24 +41,38 @@ if not ftpio.lock(sys.argv[2], True):
     print >>sys.stderr, "ERR: %s tree already locked" % sys.argv[2]
     sys.exit(1)
 
+if archivetreename != None and archivetreename != sys.argv[1] and not ftpio.lock(archivetreename, True):
+    ftpio.unlock(sys.argv[2])
+    ftpio.unlock(sys.argv[1])
+    print "ERR: %s tree already locked" % archivetreename
+    sys.exit(1)
+
 try:
     srctree = ftptree.FtpTree(sys.argv[1], loadall = True)
     dsttree = ftptree.FtpTree(sys.argv[2])
+    if archivetreename != None:
+        archivetree = ftptree.FtpTree(archivetreename)
+    else:
+        archivetree = None
     if nocheckbuild:
         srctree.do_checkbuild = False
     srctree.mark4moving(sys.argv[3:])
 
-    srctree.movepkgs(dsttree)
+    srctree.movepkgs(dsttree, archivetree = archivetree)
 except ftptree.SomeError:
     # In case of problems we need to unlock the trees before exiting
     ftpio.unlock(sys.argv[1])
     ftpio.unlock(sys.argv[2])
+    if archivetreename != None:
+        ftpio.unlock(archivetreename)
     sys.exit(1)
 
 ftpio.unlock(sys.argv[1])
 ftpio.unlock(sys.argv[2])
+if archivetreename != None and archivetreename != sys.argv[1]:
+    ftpio.unlock(archivetreename)
 
-if 'logs_list' not in config:
+if logs_list == None:
     sys.exit(0)
 
 print 'Sending mail notification...',
@@ -68,7 +88,7 @@ for pkg in srctree.marked4moving:
 
 m = Message()
 m.set_headers(
-        to = config['logs_list'],
+        to = logs_list,
         subject = 'MOVED: %s => %s... %d packages' % (sys.argv[1], sys.argv[2], len(pkgs))
 )
 m.write(
index 153175e5e9bdc798abecab6729f4ad727cfac9e2..12ee59b88b1b24e25f737a8f92916412f0312e12 100755 (executable)
@@ -6,6 +6,7 @@ sys.path.insert(0, os.environ['HOME']+'/pld-ftp-admin/modules')
 import ftptree
 from common import checkdir
 import ftpio
+from config import archived_trees, logs_list
 
 if len(sys.argv) < 4:
     print "ERR: not enough parameters given"
@@ -15,6 +16,12 @@ if len(sys.argv) < 4:
 checkdir(sys.argv[1])
 checkdir(sys.argv[2])
 
+if sys.argv[2] in archived_trees:
+    archivetreename = ".archive/" + sys.argv[2]
+    checkdir(archivetreename)
+else:
+    archivetreename = None
+
 ftpio.connect('test-move')
 
 if not ftpio.lock(sys.argv[1], True):
@@ -26,18 +33,32 @@ if not ftpio.lock(sys.argv[2], True):
     print "ERR: %s tree already locked" % sys.argv[2]
     sys.exit(1)
 
+if archivetreename != None and archivetreename != sys.argv[1] and not ftpio.lock(archivetreename, True):
+    ftpio.unlock(sys.argv[2])
+    ftpio.unlock(sys.argv[1])
+    print "ERR: %s tree already locked" % archivetreename
+    sys.exit(1)
+
 try:
     srctree = ftptree.FtpTree(sys.argv[1], loadall = True)
     dsttree = ftptree.FtpTree(sys.argv[2])
+    if archivetreename != None:
+        archivetree = ftptree.FtpTree(archivetreename)
+    else:
+        archivetree = None
     srctree.mark4moving(sys.argv[3:])
 except ftptree.SomeError:
     # In case of problems we need to unlock the trees before exiting
     ftpio.unlock(sys.argv[1])
     ftpio.unlock(sys.argv[2])
+    if archivetreename != None:
+        ftpio.unlock(archivetreename)
     sys.exit(1)
 
 # We don't 'try' as in move.py cause this function doesn't force exit
-srctree.testmove(dsttree)
+srctree.testmove(dsttree, archivetree = archivetree)
 
 ftpio.unlock(sys.argv[1])
 ftpio.unlock(sys.argv[2])
+if archivetreename != None and archivetreename != sys.argv[1]:
+    ftpio.unlock(archivetreename)
index 89fe1c0a379d3f858a3fae2a51815f207aace3ca..8167c50ef1062e7d27b6a6e7153e5f0fbc21507b 100644 (file)
@@ -25,13 +25,13 @@ def pinfo(msg):
 
 def perror(msg):
     global errnum
-    errnum=errnum+1
+    errnum = errnum + 1
     print 'ERR: ' + msg
 
 def pwarning(msg):
     print 'WARN: ' + msg
 
-def rm(file, test=False):
+def rm(file, test = False):
     if test:
         if not os.path.exists(file):
             pinfo("TEST os.remove(%s): file doesn't exists" % file)
@@ -42,9 +42,9 @@ def rm(file, test=False):
             pinfo("os.remove(%s): %s" % (file, e))
             #raise
 
-def mv(src, dst, test=False):
+def mv(src, dst, test = False):
     fsrc = src
-    fdst = dst+'/'+src.split('/')[-1]
+    fdst = dst + '/' + src.split('/')[-1]
     if test:
         if not os.path.exists(src):
             pinfo("TEST os.rename(%s, %s): source doesn't exists" % (fsrc, fdst))
@@ -163,7 +163,7 @@ class Pkg(BasePkg):
                     files.append(self.tree.basedir + '/' + arch + '/RPMS/' + nvr)
         return files
 
-    def move(self, dsttree, test=False):
+    def move(self, dsttree, test = False):
         if dsttree.has_key(self.nvr):
             movedany = False
             for arch in self.files.keys():
@@ -185,7 +185,7 @@ class Pkg(BasePkg):
                             mv(self.tree.basedir + '/' + arch + '/debuginfo/' + rpm, dsttree.basedir + '/' + arch + '/debuginfo/', test)
                         else:
                             mv(self.tree.basedir + '/' + arch + '/RPMS/' + rpm, dsttree.basedir + '/' + arch + '/RPMS/', test)
-            if not test and  movedany:
+            if not test and movedany:
                 for bid in self.build.keys():
                     dsttree[self.nvr].build[bid] = self.build[bid]
                 dsttree[self.nvr].writeinfo()
@@ -242,19 +242,19 @@ class FtpTree(BaseFtpTree):
         self.__checkbuild(self.loadedpkgs.values())
         self.__checkarchs(dsttree, self.loadedpkgs.values())
 
-    def testmove(self, dsttree):
+    def testmove(self, dsttree, archivetree = None):
         self.__checkbuild(self.marked4moving)
         self.__checkarchs(dsttree, self.marked4moving)
 
         self.__checksigns(dsttree, self.marked4moving, test = True)
         
         self.__rmolderfromsrc(test = True)
-        self.__rmotherfromdst(dsttree, test = True)
+        self.__rmotherfromdst(dsttree, test = True, archivetree = archivetree)
 
         for pkg in self.marked4moving:
             pkg.move(dsttree, test = True)
 
-    def movepkgs(self, dsttree):
+    def movepkgs(self, dsttree, archivetree = None):
         if self.do_checkbuild:
             self.__checkbuild(self.marked4moving)
         bailoutonerror()
@@ -266,7 +266,7 @@ class FtpTree(BaseFtpTree):
         bailoutonerror()
 
         self.__rmolderfromsrc()
-        self.__rmotherfromdst(dsttree)
+        self.__rmotherfromdst(dsttree, archivetree = archivetree)
 
         for pkg in self.marked4moving:
             pkg.move(dsttree)
@@ -377,17 +377,20 @@ class FtpTree(BaseFtpTree):
                             missingarchs.append(arch)
                     pkg.warning('not built for archs: %s' % missingarchs)
 
-    def __rmolderfromsrc(self, test=False):
+    def __rmolderfromsrc(self, test = False):
         for pkg in self.marked4moving:
             olderpkgnames = self.__find_older_pkgs(pkg)
             for i in olderpkgnames:
                 Pkg(i, self).remove(test)
 
-    def __rmotherfromdst(self, dsttree, test = False):
+    def __rmotherfromdst(self, dsttree, test = False, archivetree = None):
         for pkg in self.marked4moving:
             pkgnames = self.__find_other_pkgs(pkg, dsttree)
             for i in pkgnames:
-                Pkg(i, dsttree).remove(test)
+                if archivetree == None:
+                    Pkg(i, dsttree).remove(test)
+                else:
+                    Pkg(i, dsttree).move(archivetree, test = test)
 
     # Used more than once filter functions
     def __find_other_pkgs(self, pkg, tree):
This page took 0.070624 seconds and 4 git commands to generate.