# Part of the A-A-P recipe executive: printing messages # Copyright (C) 2002 Stichting NLnet Labs # Permission to copy and use this file is specified in the file COPYING. # If this file is missing you can find it here: http://www.a-a-p.org/COPYING # All messages are written into a log file. # Only selected messages are printed. # It's OK to import * from this file. import string import os import os.path import Global from Error import * msgt_warning = "warning" # warning message msgt_error = "error" # error message msgt_system = "system" # executed system command msgt_result = "result" # result of :sys command msgt_info = "info" # informational message msgt_extra = "extra" # extra informational message msgt_changedir = "changedir" # changing directories msgt_depend = "depend" # message about dependencies msgt_all = "all" # all messages msgt_print = "print" # :print message # File for logging message. Is opened only after the main recipe is located. logfile = None # Full path of the file used for logging. logname = None def msg_startlog(): """Open the logfile. Can only be done after locating the main recipe file and changing to it's directory.""" # First need the "aap" directory. from Util import assert_aap_dir if not assert_aap_dir(): return # Rename the old files if aap/log already exists. log8 -> log9, log7 -> # log8, ..., log1 -> log2, log -> log1 if os.path.exists("aap/log"): i = 8 while i >= 0: if i == 0: src = "aap/log" else: src = "aap/log%d" % i if os.path.exists(src): dst = "aap/log%d" % (i + 1) # May have to delete the destination file log9. if i == 8: try: os.remove(dst) except: pass try: os.rename(src, dst) except StandardError, e: print _('Warning: Could not rename "%s" to "%s"') % (src, dst) break i = i - 1 # Open aap/log global logfile try: logfile = open("aap/log", "w") except StandardError, e: print _("Warning: Cannot open log file for writing: "), str(e) else: # Turn into an absolute name, we may use chdir. global logname logname = os.path.abspath("aap/log") def msg_logname(): """Return the name of the log file.""" return logname def msg_msg(msg, type): """Generic function to print a message "msg" of type "type". All messages are written in the log file (if it exists). A message is displayed if its type is in the MESSAGE variable.""" if (not Global.work or string.find(Global.work.globals["MESSAGE"], type) >= 0 or string.find(Global.work.globals["MESSAGE"], msgt_all) >= 0): print "Aap: " + msg msg_log(msg, type) def msg_log(msg, type): if logfile: try: logfile.write("%s:\t%s\n" % (type, msg)) except IOError, e: raise UserError, _('Error while writing to log file: ') + str(e) def msg_warning(msg): """Print a warning message.""" msg_msg(msg, msgt_warning) def msg_error(msg): """Print an error message.""" msg_msg(msg, msgt_error) def msg_system(msg): """Print an executed system command.""" if msg[-1] == '\n': msg = msg[:-1] # remove trailing newline msg_msg(msg, msgt_system) def msg_result(msg): """Print an executed system command.""" if msg[-1] == '\n': msg = msg[:-1] # remove trailing newline msg_msg(msg, msgt_result) def msg_info(msg): """Print an informational message.""" msg_msg(msg, msgt_info) def msg_extra(msg): """Print an extra informational message.""" msg_msg(msg, msgt_extra) def msg_changedir(msg): """Print a message about changing directories.""" msg_msg(msg, msgt_changedir) def msg_depend(msg): """Print a message about dependencies.""" msg_msg(msg, msgt_depend) def msg_print(msg): """Print a message always, and log it.""" print msg msg_log(msg, msgt_print) def msg_init(globals): """Set the MESSAGE variable according to the command line arguments. Skip this when it's already set from the command line.""" if not globals.has_key("MESSAGE"): if Global.cmd_args.has_option("silent"): globals["MESSAGE"] = msgt_error elif Global.cmd_args.has_option("verbose"): globals["MESSAGE"] = msgt_all else: globals["MESSAGE"] = (msgt_changedir + "," + msgt_error + "," + msgt_system + "," + msgt_info) # vim: set sw=4 sts=4 tw=79 fo+=l: .