mercurial/util.py
changeset 13072 8c6b7a5f38c4
parent 13055 e2b8c7a6ff4d
parent 13068 adff480db558
child 13098 f7d6750dcd01
equal deleted inserted replaced
13059:f553024f1832 13072:8c6b7a5f38c4
   831             except: pass
   831             except: pass
   832             self._fp.close()
   832             self._fp.close()
   833 
   833 
   834 def makedirs(name, mode=None):
   834 def makedirs(name, mode=None):
   835     """recursive directory creation with parent mode inheritance"""
   835     """recursive directory creation with parent mode inheritance"""
       
   836     parent = os.path.abspath(os.path.dirname(name))
   836     try:
   837     try:
   837         os.mkdir(name)
   838         os.mkdir(name)
   838         if mode is not None:
   839         if mode is not None:
   839             os.chmod(name, mode)
   840             os.chmod(name, mode)
   840         return
   841         return
   841     except OSError, err:
   842     except OSError, err:
   842         if err.errno == errno.EEXIST:
   843         if err.errno == errno.EEXIST:
   843             return
   844             return
   844         if not name or err.errno != errno.ENOENT:
   845         if not name or parent == name or err.errno != errno.ENOENT:
   845             raise
   846             raise
   846     parent = os.path.abspath(os.path.dirname(name))
       
   847     makedirs(parent, mode)
   847     makedirs(parent, mode)
   848     makedirs(name, mode)
   848     makedirs(name, mode)
   849 
   849 
   850 class opener(object):
   850 class opener(object):
   851     """Open files relative to a base directory
   851     """Open files relative to a base directory
  1013     lt = time.localtime()
  1013     lt = time.localtime()
  1014     if lt[8] == 1 and time.daylight:
  1014     if lt[8] == 1 and time.daylight:
  1015         tz = time.altzone
  1015         tz = time.altzone
  1016     else:
  1016     else:
  1017         tz = time.timezone
  1017         tz = time.timezone
  1018     return time.mktime(lt), tz
  1018     t = time.mktime(lt)
       
  1019     if t < 0:
       
  1020         hint = _("check your clock")
       
  1021         raise Abort(_("negative timestamp: %d") % t, hint=hint)
       
  1022     return t, tz
  1019 
  1023 
  1020 def datestr(date=None, format='%a %b %d %H:%M:%S %Y %1%2'):
  1024 def datestr(date=None, format='%a %b %d %H:%M:%S %Y %1%2'):
  1021     """represent a (unixtime, offset) tuple as a localized time.
  1025     """represent a (unixtime, offset) tuple as a localized time.
  1022     unixtime is seconds since the epoch, and offset is the time zone's
  1026     unixtime is seconds since the epoch, and offset is the time zone's
  1023     number of seconds away from UTC. if timezone is false, do not
  1027     number of seconds away from UTC. if timezone is false, do not
  1114     # time zone offset. values must fit in signed 32 bits for
  1118     # time zone offset. values must fit in signed 32 bits for
  1115     # current 32-bit linux runtimes. timezones go from UTC-12
  1119     # current 32-bit linux runtimes. timezones go from UTC-12
  1116     # to UTC+14
  1120     # to UTC+14
  1117     if abs(when) > 0x7fffffff:
  1121     if abs(when) > 0x7fffffff:
  1118         raise Abort(_('date exceeds 32 bits: %d') % when)
  1122         raise Abort(_('date exceeds 32 bits: %d') % when)
       
  1123     if when < 0:
       
  1124         raise Abort(_('negative date value: %d') % when)
  1119     if offset < -50400 or offset > 43200:
  1125     if offset < -50400 or offset > 43200:
  1120         raise Abort(_('impossible time zone offset: %d') % offset)
  1126         raise Abort(_('impossible time zone offset: %d') % offset)
  1121     return when, offset
  1127     return when, offset
  1122 
  1128 
  1123 def matchdate(date):
  1129 def matchdate(date):