Mercurial > hg4j
comparison src/com/tmate/hgkit/ll/Changeset.java @ 40:21e26da142fa
Time parsing in Changeset
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Fri, 14 Jan 2011 03:37:06 +0100 |
parents | 50dfc69c108e |
children | b01500fe2604 |
comparison
equal
deleted
inserted
replaced
39:4e9b66b07a28 | 40:21e26da142fa |
---|---|
3 */ | 3 */ |
4 package com.tmate.hgkit.ll; | 4 package com.tmate.hgkit.ll; |
5 | 5 |
6 import java.io.UnsupportedEncodingException; | 6 import java.io.UnsupportedEncodingException; |
7 import java.util.ArrayList; | 7 import java.util.ArrayList; |
8 import java.util.Date; | |
9 import java.util.Locale; | |
8 | 10 |
9 /** | 11 /** |
10 * @see mercurial/changelog.py:read() | 12 * @see mercurial/changelog.py:read() |
11 * <pre> | 13 * <pre> |
12 format used: | 14 format used: |
26 // TODO immutable | 28 // TODO immutable |
27 private /*final*/ Nodeid manifest; | 29 private /*final*/ Nodeid manifest; |
28 private String user; | 30 private String user; |
29 private String comment; | 31 private String comment; |
30 private ArrayList<String> files; | 32 private ArrayList<String> files; |
31 private String timezone; // FIXME | 33 private Date time; |
34 private String extras; // TODO branch, etc. | |
32 | 35 |
33 public void dump() { | 36 public void dump() { |
34 System.out.println("User:" + user); | 37 System.out.println("User: " + user); |
35 System.out.println("Comment:" + comment); | 38 System.out.println("Comment: " + comment); |
36 System.out.println("Manifest:" + manifest); | 39 System.out.println("Manifest: " + manifest); |
37 System.out.println("Date:" + timezone); | 40 System.out.printf(Locale.US, "Date: %ta %<tb %<td %<tH:%<tM:%<tS %<tY %<tz\n", time); |
38 System.out.println("Files: " + files.size()); | 41 System.out.println("Files: " + files.size()); |
42 if (extras != null) { | |
43 System.out.println("Extra: " + extras); | |
44 } | |
39 for (String s : files) { | 45 for (String s : files) { |
40 System.out.print('\t'); | 46 System.out.print('\t'); |
41 System.out.println(s); | 47 System.out.println(s); |
42 } | 48 } |
43 } | 49 } |
63 String _user = new String(data, breakIndex1+1, breakIndex2 - breakIndex1 - 1); | 69 String _user = new String(data, breakIndex1+1, breakIndex2 - breakIndex1 - 1); |
64 int breakIndex3 = indexOf(data, lineBreak, breakIndex2+1, bufferEndIndex); | 70 int breakIndex3 = indexOf(data, lineBreak, breakIndex2+1, bufferEndIndex); |
65 if (breakIndex3 == -1) { | 71 if (breakIndex3 == -1) { |
66 throw new IllegalArgumentException("Bad Changeset data"); | 72 throw new IllegalArgumentException("Bad Changeset data"); |
67 } | 73 } |
68 String _timezone = new String(data, breakIndex2+1, breakIndex3 - breakIndex2 - 1); | 74 String _timeString = new String(data, breakIndex2+1, breakIndex3 - breakIndex2 - 1); |
75 int space1 = _timeString.indexOf(' '); | |
76 if (space1 == -1) { | |
77 throw new IllegalArgumentException("Bad Changeset data"); | |
78 } | |
79 int space2 = _timeString.indexOf(' ', space1+1); | |
80 if (space2 == -1) { | |
81 space2 = _timeString.length(); | |
82 } | |
83 long unixTime = Long.parseLong(_timeString.substring(0, space1)); // XXX Float, perhaps | |
84 int timezone = Integer.parseInt(_timeString.substring(space1+1, space2)); | |
85 // XXX not sure need to add timezone here - I can't figure out whether Hg keeps GMT time, and records timezone just for info, or unixTime is taken local | |
86 // on commit and timezone is recorded to adjust it to UTC. | |
87 Date _time = new Date((unixTime + timezone) * 1000); | |
88 String _extras = space2 < _timeString.length() ? _timeString.substring(space2+1) : null; | |
69 | 89 |
70 // | 90 // |
71 int lastStart = breakIndex3 + 1; | 91 int lastStart = breakIndex3 + 1; |
72 int breakIndex4 = indexOf(data, lineBreak, lastStart, bufferEndIndex); | 92 int breakIndex4 = indexOf(data, lineBreak, lastStart, bufferEndIndex); |
73 ArrayList<String> _files = new ArrayList<String>(5); | 93 ArrayList<String> _files = new ArrayList<String>(5); |
92 throw new IllegalStateException("Could hardly happen"); | 112 throw new IllegalStateException("Could hardly happen"); |
93 } | 113 } |
94 // change this instance at once, don't leave it partially changes in case of error | 114 // change this instance at once, don't leave it partially changes in case of error |
95 this.manifest = _nodeid; | 115 this.manifest = _nodeid; |
96 this.user = _user; | 116 this.user = _user; |
97 this.timezone = _timezone; | 117 this.time = _time; |
98 this.files = _files; | 118 this.files = _files; |
99 this.comment = _comment; | 119 this.comment = _comment; |
120 this.extras = _extras; | |
100 } | 121 } |
101 | 122 |
102 private static int indexOf(byte[] src, byte what, int startOffset, int endIndex) { | 123 private static int indexOf(byte[] src, byte what, int startOffset, int endIndex) { |
103 for (int i = startOffset; i < endIndex; i++) { | 124 for (int i = startOffset; i < endIndex; i++) { |
104 if (src[i] == what) { | 125 if (src[i] == what) { |