~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/trace.py

  • Committer: Martin
  • Date: 2010-05-16 15:18:43 UTC
  • mfrom: (5235 +trunk)
  • mto: This revision was merged to the branch mainline in revision 5239.
  • Revision ID: gzlist@googlemail.com-20100516151843-lu53u7caehm3ie3i
Merge bzr.dev to resolve conflicts in NEWS and _chk_map_pyx

Show diffs side-by-side

added added

removed removed

Lines of Context:
111
111
 
112
112
 
113
113
def note(*args, **kwargs):
 
114
    """Output a note to the user.
 
115
 
 
116
    Takes the same parameters as logging.info.
 
117
 
 
118
    :return: None
 
119
    """
114
120
    # FIXME note always emits utf-8, regardless of the terminal encoding
115
121
    #
116
122
    # FIXME: clearing the ui and then going through the abstract logging
238
244
    This sets the global _bzr_log_filename.
239
245
    """
240
246
    global _bzr_log_filename
 
247
 
 
248
    def _open_or_create_log_file(filename):
 
249
        """Open existing log file, or create with ownership and permissions
 
250
 
 
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.
 
254
        """
 
255
        flags = os.O_WRONLY | os.O_APPEND | osutils.O_TEXT
 
256
        while True:
 
257
            try:
 
258
                fd = os.open(filename, flags)
 
259
                break
 
260
            except OSError, e:
 
261
                if e.errno != errno.ENOENT:
 
262
                    raise
 
263
            try:
 
264
                fd = os.open(filename, flags | os.O_CREAT | os.O_EXCL, 0666)
 
265
            except OSError, e:
 
266
                if e.errno != errno.EEXIST:
 
267
                    raise
 
268
            else:
 
269
                osutils.copy_ownership_from_path(filename)
 
270
                break
 
271
        return os.fdopen(fd, 'at', 0) # unbuffered
 
272
 
 
273
 
241
274
    _bzr_log_filename = _get_bzr_log_filename()
242
275
    _rollover_trace_maybe(_bzr_log_filename)
243
276
    try:
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")
252
283
 
253
284
        return bzr_log_file
254
285
 
255
 
    except IOError, e:
 
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