mercurial/util.py
changeset 3810 d6529582942a
parent 3809 e43b48f0f718
child 3811 4d93b37b5963
equal deleted inserted replaced
3809:e43b48f0f718 3810:d6529582942a
    70     except UnicodeDecodeError, inst:
    70     except UnicodeDecodeError, inst:
    71         sub = s[max(0, inst.start-10), inst.start+10]
    71         sub = s[max(0, inst.start-10), inst.start+10]
    72         raise Abort("decoding near '%s': %s!\n" % (sub, inst))
    72         raise Abort("decoding near '%s': %s!\n" % (sub, inst))
    73 
    73 
    74 # used by parsedate
    74 # used by parsedate
    75 defaultdateformats = ('%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M',
    75 defaultdateformats = (
    76                       '%a %b %d %H:%M:%S %Y')
    76     '%Y-%m-%d %H:%M:%S',
       
    77     '%Y-%m-%d %I:%M:%S%p',
       
    78     '%Y-%m-%d %H:%M',
       
    79     '%Y-%m-%d %I:%M%p',
       
    80     '%Y-%m-%d',
       
    81     '%m-%d',
       
    82     '%m/%d',
       
    83     '%m/%d/%y',
       
    84     '%m/%d/%Y',
       
    85     '%a %b %d %H:%M:%S %Y',
       
    86     '%a %b %d %I:%M:%S%p %Y',
       
    87     '%b %d %H:%M:%S %Y',
       
    88     '%b %d %I:%M:%S%p',
       
    89     '%b %d %H:%M',
       
    90     '%b %d %I:%M%p',
       
    91     '%b %d %Y',
       
    92     '%b %d',
       
    93     '%H:%M:%S',
       
    94     '%I:%M:%SP',
       
    95     '%H:%M',
       
    96     '%I:%M%p',
       
    97 )
    77 
    98 
    78 class SignalInterrupt(Exception):
    99 class SignalInterrupt(Exception):
    79     """Exception raised on SIGTERM and SIGHUP."""
   100     """Exception raised on SIGTERM and SIGHUP."""
    80 
   101 
    81 # like SafeConfigParser but with case-sensitive keys
   102 # like SafeConfigParser but with case-sensitive keys
  1050         date, tz = string[:-6], string[-5:]
  1071         date, tz = string[:-6], string[-5:]
  1051         tz = int(tz)
  1072         tz = int(tz)
  1052         offset = - 3600 * (tz / 100) - 60 * (tz % 100)
  1073         offset = - 3600 * (tz / 100) - 60 * (tz % 100)
  1053     else:
  1074     else:
  1054         date, offset = string, None
  1075         date, offset = string, None
       
  1076 
       
  1077     # add missing elements
       
  1078     if '%y' not in format.lower():
       
  1079         date += "@" + datestr(makedate(), "%Y", False)
       
  1080         format += "@%Y"
       
  1081     if '%m' not in format and '%b' not in format:
       
  1082         date += "@" + datestr(makedate(), "%m", False)
       
  1083         format += "@%m"
       
  1084     if '%d' not in format:
       
  1085         date += "@" + datestr(makedate(), "%d", False)
       
  1086         format += "@%d"
       
  1087 
  1055     timetuple = time.strptime(date, format)
  1088     timetuple = time.strptime(date, format)
  1056     localunixtime = int(calendar.timegm(timetuple))
  1089     localunixtime = int(calendar.timegm(timetuple))
  1057     if offset is None:
  1090     if offset is None:
  1058         # local timezone
  1091         # local timezone
  1059         unixtime = int(time.mktime(timetuple))
  1092         unixtime = int(time.mktime(timetuple))
  1068     formats."""
  1101     formats."""
  1069     if not string:
  1102     if not string:
  1070         return 0, 0
  1103         return 0, 0
  1071     if not formats:
  1104     if not formats:
  1072         formats = defaultdateformats
  1105         formats = defaultdateformats
       
  1106     string = string.strip()
  1073     try:
  1107     try:
  1074         when, offset = map(int, string.split(' '))
  1108         when, offset = map(int, string.split(' '))
  1075     except ValueError:
  1109     except ValueError:
  1076         for format in formats:
  1110         for format in formats:
  1077             try:
  1111             try: