~stub/pqm/single-script

« back to all changes in this revision

Viewing changes to bin/pqm

  • Committer: Tim Penhey
  • Date: 2008-07-17 02:03:01 UTC
  • mfrom: (180 public)
  • mto: This revision was merged to the branch mainline in revision 182.
  • Revision ID: tim.penhey@canonical.com-20080717020301-ksus5butizazp0dq
Merge trunk and resolve conflicts.

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
# along with this program; if not, write to the Free Software
23
23
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
24
24
 
25
 
# Some junk to try finding Python 2.3, if "python" on this system
26
 
# is too old.
27
25
import os,sys
28
 
if sys.hexversion >= 0x2030000:
29
 
    pass
30
 
else:
31
 
    if os.getenv('PYTHON'):
32
 
        try:
33
 
            os.execvp(os.getenv('PYTHON'), [os.getenv('PYTHON')] + sys.argv)
34
 
        except:
35
 
            1
36
 
    try:
37
 
        os.execvp('python2.3', ['python2.3'] + sys.argv)
38
 
    except:
39
 
        1
40
 
    sys.stderr.write("This program requires Python 2.3\n")
 
26
 
 
27
try:
 
28
    version_info = sys.version_info
 
29
except AttributeError:
 
30
    version_info = 1, 5 # 1.5 or older
 
31
 
 
32
REINVOKE = "__PQM_REINVOKE"
 
33
NEED_VERS = (2, 4)
 
34
KNOWN_PYTHONS = ('python2.4', 'python2.5')
 
35
 
 
36
if version_info < NEED_VERS:
 
37
    if not os.environ.has_key(REINVOKE):
 
38
        # mutating os.environ doesn't work in old Pythons
 
39
        os.putenv(REINVOKE, "1")
 
40
        for python in KNOWN_PYTHONS:
 
41
            try:
 
42
                os.execvp(python, [python] + sys.argv)
 
43
            except OSError:
 
44
                pass
 
45
    sys.stderr.write("error: cannot find a suitable python interpreter")
 
46
    sys.stderr.write("  (need %d.%d or later)" % NEED_VERS)
41
47
    sys.exit(1)
42
48
 
 
49
if hasattr(os, "unsetenv"):
 
50
    os.unsetenv(REINVOKE)
 
51
 
43
52
import string, stat, re, glob, getopt, time, traceback, gzip, getpass, popen2
44
53
import smtplib, email
45
54
import logging, logging.handlers
66
75
    return output
67
76
 
68
77
def do_run_mode(queuedir, logger, logdir, mail_reply, mail_server,
69
 
                from_address, fromaddr, options):
 
78
    from_address, fromaddr, configp, options):
70
79
    scripts = find_patches(
71
80
        queuedir, logger, rev_optionhandler, configp, options)
72
81
    (goodscripts, badscripts) = ([], [])
73
82
    for script in scripts:
74
83
        if not os.path.isfile("%s/stop.patch" % queuedir):
75
84
            run_one_script(logger, script, logdir, goodscripts, badscripts,
76
 
                           mail_reply, mail_server, from_address, fromaddr,
77
 
                           options)
 
85
                mail_reply, mail_server, from_address, fromaddr, options)
78
86
 
79
87
    if options.print_report:
80
88
        for (patchname, logname) in goodscripts:
180
188
        f.write(l)
181
189
    f.close()
182
190
 
183
 
def run(pqm_subdir, queuedir, logger, logdir, mail_reply,
184
 
        mail_server, from_address, fromaddr, options):
185
 
    lockfile=LockFile(
186
 
        os.path.join(pqm_subdir, 'pqm.lock'), logger,
 
191
def run(pqm_subdir, queuedir, logger, logdir, mail_reply, mail_server,
 
192
    from_address, fromaddr, options):
 
193
    lockfile=LockFile(os.path.join(pqm_subdir, 'pqm.lock'), logger,
187
194
        options.no_act, options.cron_mode)
188
195
    lockfile.acquire()
189
196
    try:
190
197
        if options.run_mode:
191
198
            do_run_mode(queuedir, logger, logdir, mail_reply, mail_server,
192
 
                        from_address, fromaddr, options)
 
199
                from_address, fromaddr, configp, options)
193
200
    finally:
194
201
        lockfile.release()
195
202
 
293
300
fromaddr = '%s <%s>' % (myname, from_address)
294
301
 
295
302
mail_reply=configp.get_boolean_option('DEFAULT', 'mail_reply',1)
296
 
# The command line paramter overrides the setting in the config file.
 
303
# The command line parameter overrides the setting in the config file.
297
304
if options.verify_sigs:
298
305
    options.verify_sigs = configp.get_boolean_option(
299
306
        'DEFAULT', 'verify_sigs', True)
342
349
if not options.no_log:
343
350
    if not os.path.isabs(logfile_name):
344
351
        logfile_name = os.path.join(pqm_subdir, logfile_name)
345
 
    logger.debug("Adding log file: %s" % logfile_name)
 
352
    logger.debug("Adding log file: %s" % (logfile_name,))
346
353
    filehandler = logging.FileHandler(logfile_name)
347
354
    if options.loglevel >= logging.WARN:
348
355
        filehandler.setLevel(logging.INFO)