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':
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):
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...',
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(
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"
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):
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)
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)
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))
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():
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()
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()
bailoutonerror()
self.__rmolderfromsrc()
- self.__rmotherfromdst(dsttree)
+ self.__rmotherfromdst(dsttree, archivetree = archivetree)
for pkg in self.marked4moving:
pkg.move(dsttree)
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):