113
113
def note(*args, **kwargs):
114
"""Output a note to the user.
116
Takes the same parameters as logging.info.
114
120
# FIXME note always emits utf-8, regardless of the terminal encoding
116
122
# FIXME: clearing the ui and then going through the abstract logging
238
244
This sets the global _bzr_log_filename.
240
246
global _bzr_log_filename
248
def _open_or_create_log_file(filename):
249
"""Open existing log file, or create with ownership and permissions
251
It inherits the ownership and permissions (masked by umask) from
252
the containing directory to cope better with being run under sudo
253
with $HOME still set to the user's homedir.
255
flags = os.O_WRONLY | os.O_APPEND | osutils.O_TEXT
258
fd = os.open(filename, flags)
261
if e.errno != errno.ENOENT:
264
fd = os.open(filename, flags | os.O_CREAT | os.O_EXCL, 0666)
266
if e.errno != errno.EEXIST:
269
osutils.copy_ownership_from_path(filename)
271
return os.fdopen(fd, 'at', 0) # unbuffered
241
274
_bzr_log_filename = _get_bzr_log_filename()
242
275
_rollover_trace_maybe(_bzr_log_filename)
244
buffering = 0 # unbuffered
245
bzr_log_file = osutils.open_with_ownership(_bzr_log_filename, 'at', buffering)
246
# bzr_log_file.tell() on windows always return 0 until some writing done
277
bzr_log_file = _open_or_create_log_file(_bzr_log_filename)
247
278
bzr_log_file.write('\n')
248
279
if bzr_log_file.tell() <= 2:
249
280
bzr_log_file.write("this is a debug log for diagnosing/reporting problems in bzr\n")
253
284
return bzr_log_file
286
except EnvironmentError, e:
256
287
# If we are failing to open the log, then most likely logging has not
257
288
# been set up yet. So we just write to stderr rather than using
258
289
# 'warning()'. If we using warning(), users get the unhelpful 'no