/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/trace.py

renamed copy_ownership to copy_ownership_from_path.
updated .bzr.log to have 0644 permissions.
improved docstring for create_log_file

Show diffs side-by-side

added added

removed removed

Lines of Context:
239
239
    """
240
240
    global _bzr_log_filename
241
241
 
242
 
    def _open_or_create_log_file(filename):
243
 
        """Open existing log file, or create with ownership and permissions
 
242
    def create_log_file(filename):
 
243
        """Create the .bzr.log file.
244
244
 
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.
248
248
        """
 
249
        buffering = 0 # unbuffered
249
250
        flags = os.O_WRONLY | os.O_APPEND | osutils.O_TEXT
250
251
        while True:
251
252
            try:
252
253
                fd = os.open(filename, flags)
253
 
                break
 
254
                logfile = os.fdopen(fd, 'at', buffering)
 
255
                return logfile
254
256
            except OSError, e:
255
257
                if e.errno != errno.ENOENT:
256
258
                    raise
257
259
            try:
258
 
                fd = os.open(filename, flags | os.O_CREAT | os.O_EXCL, 0666)
 
260
                flags = flags | os.O_CREAT | os.O_EXCL
 
261
                permissions = 0644
 
262
                fd = os.open(filename, flags, permissions)
 
263
                logfile = os.fdopen(fd, 'at', buffering)
259
264
            except OSError, e:
260
265
                if e.errno != errno.EEXIST:
261
266
                    raise
262
267
            else:
263
268
                osutils.copy_ownership_from_path(filename)
264
 
                break
265
 
        return os.fdopen(fd, 'at', 0) # unbuffered
 
269
                return logfile
266
270
 
267
271
 
268
272
    _bzr_log_filename = _get_bzr_log_filename()
269
273
    _rollover_trace_maybe(_bzr_log_filename)
270
274
    try:
271
 
        bzr_log_file = _open_or_create_log_file(_bzr_log_filename)
 
275
        bzr_log_file = create_log_file(_bzr_log_filename)
272
276
        bzr_log_file.write('\n')
273
277
        if bzr_log_file.tell() <= 2:
274
278
            bzr_log_file.write("this is a debug log for diagnosing/reporting problems in bzr\n")
277
281
 
278
282
        return bzr_log_file
279
283
 
280
 
    except EnvironmentError, e:
 
284
    except IOError, e:
281
285
        # If we are failing to open the log, then most likely logging has not
282
286
        # been set up yet. So we just write to stderr rather than using
283
287
        # 'warning()'. If we using warning(), users get the unhelpful 'no
492
496
    elif not getattr(exc_object, 'internal_error', True):
493
497
        report_user_error(exc_info, err_file)
494
498
        return errors.EXIT_ERROR
495
 
    elif isinstance(exc_object, (OSError, IOError)) or (
496
 
        # GZ 2010-05-20: Like (exc_type is pywintypes.error) but avoid import
497
 
        exc_type.__name__ == "error" and exc_type.__module__ == "pywintypes"):
 
499
    elif isinstance(exc_object, (OSError, IOError)):
498
500
        # Might be nice to catch all of these and show them as something more
499
501
        # specific, but there are too many cases at the moment.
500
502
        report_user_error(exc_info, err_file)