695
695
return offset.days * 86400 + offset.seconds
697
697
weekdays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
698
_default_format_by_weekday_num = [wd + " %Y-%m-%d %H:%M:%S" for wd in weekdays]
699
701
def format_date(t, offset=0, timezone='original', date_fmt=None,
700
702
show_offset=True):
714
716
date_str = time.strftime(date_fmt, tt)
715
717
return date_str + offset_str
720
# Cache of formatted offset strings
724
def format_date_with_offset_in_original_timezone(t, offset=0,
725
_cache=_offset_cache):
726
"""Return a formatted date string in the original timezone.
728
This routine may be faster then format_date.
730
:param t: Seconds since the epoch.
731
:param offset: Timezone offset in seconds east of utc.
735
tt = time.gmtime(t + offset)
736
date_fmt = _default_format_by_weekday_num[tt[6]]
737
date_str = time.strftime(date_fmt, tt)
738
offset_str = _cache.get(offset, None)
739
if offset_str is None:
740
offset_str = ' %+03d%02d' % (offset / 3600, (offset / 60) % 60)
741
_cache[offset] = offset_str
742
return date_str + offset_str
717
745
def format_local_date(t, offset=0, timezone='original', date_fmt=None,
718
746
show_offset=True):
719
747
"""Return an unicode date string formatted according to the current locale.
733
761
date_str = date_str.decode(get_user_encoding(), 'replace')
734
762
return date_str + offset_str
736
765
def _format_date(t, offset, timezone, date_fmt, show_offset):
737
766
if timezone == 'utc':
738
767
tt = time.gmtime(t)
1301
1330
normalized_filename = _inaccessible_normalized_filename
1333
default_terminal_width = 80
1334
"""The default terminal width for ttys.
1336
This is defined so that higher levels can share a common fallback value when
1337
terminal_width() returns None.
1304
1341
def terminal_width():
1305
"""Return estimated terminal width."""
1342
"""Return terminal width.
1344
None is returned if the width can't established precisely.
1347
# If BZR_COLUMNS is set, take it, user is always right
1349
return int(os.environ['BZR_COLUMNS'])
1350
except (KeyError, ValueError):
1353
isatty = getattr(sys.stdout, 'isatty', None)
1354
if isatty is None or not isatty():
1355
# Don't guess, setting BZR_COLUMNS is the recommended way to override.
1306
1358
if sys.platform == 'win32':
1307
return win32utils.get_console_size()[0]
1359
return win32utils.get_console_size(defaultx=None)[0]
1310
1362
import struct, fcntl, termios
1311
1363
s = struct.pack('HHHH', 0, 0, 0, 0)
1312
1364
x = fcntl.ioctl(1, termios.TIOCGWINSZ, s)
1313
1365
width = struct.unpack('HHHH', x)[1]
1366
except (IOError, AttributeError):
1367
# If COLUMNS is set, take it
1318
width = int(os.environ['COLUMNS'])
1369
return int(os.environ['COLUMNS'])
1370
except (KeyError, ValueError):
1374
# Consider invalid values as meaning no width
1952
2005
anything goes wrong.
1954
2007
global _cached_local_concurrency
1955
2009
if _cached_local_concurrency is not None and use_cache:
1956
2010
return _cached_local_concurrency
1959
concurrency = _local_concurrency()
1960
except (OSError, IOError):
2012
concurrency = os.environ.get('BZR_CONCURRENCY', None)
2013
if concurrency is None:
2015
concurrency = _local_concurrency()
2016
except (OSError, IOError):
1963
2019
concurrency = int(concurrency)
1964
2020
except (TypeError, ValueError):