comparison src/com/tmate/hgkit/ll/Changeset.java @ 49:26e3eeaa3962

branch and user filtering for log operation
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Sat, 15 Jan 2011 01:15:38 +0100
parents b01500fe2604
children fd4f2c98995b
comparison
equal deleted inserted replaced
48:e34f90b9ded1 49:26e3eeaa3962
6 import java.io.UnsupportedEncodingException; 6 import java.io.UnsupportedEncodingException;
7 import java.util.ArrayList; 7 import java.util.ArrayList;
8 import java.util.Collections; 8 import java.util.Collections;
9 import java.util.Date; 9 import java.util.Date;
10 import java.util.Formatter; 10 import java.util.Formatter;
11 import java.util.HashMap;
11 import java.util.List; 12 import java.util.List;
12 import java.util.Locale; 13 import java.util.Locale;
13 import java.util.Map; 14 import java.util.Map;
14 15
15 /** 16 /**
34 private String user; 35 private String user;
35 private String comment; 36 private String comment;
36 private List<String> files; // unmodifiable collection (otherwise #files() and implicit #clone() shall be revised) 37 private List<String> files; // unmodifiable collection (otherwise #files() and implicit #clone() shall be revised)
37 private Date time; 38 private Date time;
38 private int timezone; // not sure it's of any use 39 private int timezone; // not sure it's of any use
39 private String extras; // TODO branch, etc. 40 private Map<String,String> extras;
40 41
41 private Changeset() { 42 private Changeset() {
42 } 43 }
43 44
44 public Nodeid manifest() { 45 public Nodeid manifest() {
67 f.format("%ta %<tb %<td %<tH:%<tM:%<tS %<tY %<tz", time); 68 f.format("%ta %<tb %<td %<tH:%<tM:%<tS %<tY %<tz", time);
68 return sb.toString(); 69 return sb.toString();
69 } 70 }
70 71
71 public Map<String, String> extras() { 72 public Map<String, String> extras() {
72 return null; // TODO 73 return extras;
74 }
75
76 public String branch() {
77 return extras.get("branch");
73 } 78 }
74 79
75 @Override 80 @Override
76 public String toString() { 81 public String toString() {
77 StringBuilder sb = new StringBuilder(); 82 StringBuilder sb = new StringBuilder();
127 int _timezone = Integer.parseInt(_timeString.substring(space1+1, space2)); 132 int _timezone = Integer.parseInt(_timeString.substring(space1+1, space2));
128 // 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 133 // 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
129 // on commit and timezone is recorded to adjust it to UTC. 134 // on commit and timezone is recorded to adjust it to UTC.
130 Date _time = new Date(unixTime * 1000); 135 Date _time = new Date(unixTime * 1000);
131 String _extras = space2 < _timeString.length() ? _timeString.substring(space2+1) : null; 136 String _extras = space2 < _timeString.length() ? _timeString.substring(space2+1) : null;
137 Map<String, String> _extrasMap;
138 if (_extras == null) {
139 _extrasMap = Collections.singletonMap("branch", "default");
140 } else {
141 _extrasMap = new HashMap<String, String>();
142 for (String pair : _extras.split("\00")) {
143 int eq = pair.indexOf('=');
144 // FIXME need to decode key/value, @see changelog.py:decodeextra
145 _extrasMap.put(pair.substring(0, eq), pair.substring(eq+1));
146 }
147 if (!_extrasMap.containsKey("branch")) {
148 _extrasMap.put("branch", "default");
149 }
150 _extrasMap = Collections.unmodifiableMap(_extrasMap);
151 }
132 152
133 // 153 //
134 int lastStart = breakIndex3 + 1; 154 int lastStart = breakIndex3 + 1;
135 int breakIndex4 = indexOf(data, lineBreak, lastStart, bufferEndIndex); 155 int breakIndex4 = indexOf(data, lineBreak, lastStart, bufferEndIndex);
136 ArrayList<String> _files = new ArrayList<String>(5); 156 ArrayList<String> _files = new ArrayList<String>(5);
159 this.user = _user; 179 this.user = _user;
160 this.time = _time; 180 this.time = _time;
161 this.timezone = _timezone; 181 this.timezone = _timezone;
162 this.files = Collections.unmodifiableList(_files); 182 this.files = Collections.unmodifiableList(_files);
163 this.comment = _comment; 183 this.comment = _comment;
164 this.extras = _extras; 184 this.extras = _extrasMap;
165 } 185 }
166 186
167 private static int indexOf(byte[] src, byte what, int startOffset, int endIndex) { 187 private static int indexOf(byte[] src, byte what, int startOffset, int endIndex) {
168 for (int i = startOffset; i < endIndex; i++) { 188 for (int i = startOffset; i < endIndex; i++) {
169 if (src[i] == what) { 189 if (src[i] == what) {