~launchpad-pqm/launchpad/devel

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/python
# Copyright 2004 Canonical Ltd, all rights reserved (for now?).
# Author: Rob Weir <rob.weir@canonical.com>
#         David Allouche <david@allouche.net>

import os
import sys
import pickle
import logging

import Job
from canonical.database.sqlbase import quote
from canonical.database.sqlbase import SQLBase
from canonical.launchpad.database import Product
from importd.Job import Job
import canonical

import pybaz
import pybaz.backends.forkexec
pybaz.backend.spawning_strategy = pybaz.backends.forkexec.PyArchSpawningStrategy
import gnarly.process
import gnarly.process.unix_process
gnarly.process.Popen = gnarly.process.unix_process.Popen


class Doer(object):

    def __init__(self, log_level=2):
        #how portable is this conversion?
        self.logger=logging.Logger("importd", 50 - log_level*10)
        handler=logging.StreamHandler()
        handler.setFormatter(logging.Formatter("%(levelname)s: %(message)s"))
        self.logger.addHandler(handler)

    def makeJob(self, productName, seriesName):
        """Create the Job object from the source source name (packagename)."""
        product = Product.byName(productName)
        series = product.getSeries(seriesName)
        self._job = Job()
        self._job.from_series(series)
        self._job.slave_home = os.environ['IMPORTD_SLAVE_HOME']
        self._job.archive_mirror_dir = os.environ['IMPORTD_MIRRORS']
        print "Job = %s" % self._job

    def importPackage(self):
        """start a synchronous import"""
        self._job.TYPE = 'import'
        self._job.nukeTargets(logger=self.logger)
        self._job.runJob(logger=self.logger, dir='.')

    def syncPackage(self):
        """start a synchronous sync"""
        self._job.TYPE = 'sync'
        self._job.runJob(logger=self.logger, dir='.')
        self._job.mirrorTarget(logger=self.logger, dir='.')

    def loadJob(self, jobfile_name):
        """Load the Job object from a pickle file."""
        jobfile = open(jobfile_name, 'r')
        self._job = pickle.load(jobfile)
        jobfile.close()

    def runMethod(self, method, dirname):
        getattr(self._job, method)(logger=self.logger, dir=dirname)


def main():
    jobfile_name, method, dirname = sys.argv[1:]
    doer = Doer()
    doer.loadJob(jobfile_name)
    doer.runMethod(method, dirname)

if __name__ == '__main__':
    main()