240
240
global _bzr_log_filename
242
def create_log_file(filename):
243
"""Create the .bzr.log file.
242
def _open_or_create_log_file(filename):
243
"""Open existing log file, or create with ownership and permissions
245
245
It inherits the ownership and permissions (masked by umask) from
246
246
the containing directory to cope better with being run under sudo
247
247
with $HOME still set to the user's homedir.
249
buffering = 0 # unbuffered
250
249
flags = os.O_WRONLY | os.O_APPEND | osutils.O_TEXT
253
252
fd = os.open(filename, flags)
254
logfile = os.fdopen(fd, 'at', buffering)
256
254
except OSError, e:
257
255
if e.errno != errno.ENOENT:
260
flags = flags | os.O_CREAT | os.O_EXCL
262
fd = os.open(filename, flags, permissions)
263
logfile = os.fdopen(fd, 'at', buffering)
258
fd = os.open(filename, flags | os.O_CREAT | os.O_EXCL, 0666)
264
259
except OSError, e:
265
260
if e.errno != errno.EEXIST:
268
263
osutils.copy_ownership_from_path(filename)
265
return os.fdopen(fd, 'at', 0) # unbuffered
272
268
_bzr_log_filename = _get_bzr_log_filename()
273
269
_rollover_trace_maybe(_bzr_log_filename)
275
bzr_log_file = create_log_file(_bzr_log_filename)
271
bzr_log_file = _open_or_create_log_file(_bzr_log_filename)
276
272
bzr_log_file.write('\n')
277
273
if bzr_log_file.tell() <= 2:
278
274
bzr_log_file.write("this is a debug log for diagnosing/reporting problems in bzr\n")
282
278
return bzr_log_file
280
except EnvironmentError, e:
285
281
# If we are failing to open the log, then most likely logging has not
286
282
# been set up yet. So we just write to stderr rather than using
287
283
# 'warning()'. If we using warning(), users get the unhelpful 'no