diff hg4j/src/test/java/org/tmatesoft/hg/test/LogOutputParser.java @ 213:6ec4af642ba8 gradle

Project uses Gradle for build - actual changes
author Alexander Kitaev <kitaev@gmail.com>
date Tue, 10 May 2011 10:52:53 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hg4j/src/test/java/org/tmatesoft/hg/test/LogOutputParser.java	Tue May 10 10:52:53 2011 +0200
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 2011 TMate Software Ltd
+ *  
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * For information on how to redistribute this software under
+ * the terms of a license other than GNU General Public License
+ * contact TMate Software at support@hg4j.com
+ */
+package org.tmatesoft.hg.test;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.tmatesoft.hg.repo.HgRepository;
+
+
+/**
+ *
+ * @author Artem Tikhomirov
+ * @author TMate Software Ltd.
+ */
+public class LogOutputParser implements OutputParser {
+	private final List<Record> result = new LinkedList<Record>();
+	private Pattern pattern1;
+	private Pattern pattern2;
+	private Pattern pattern3;
+	private Pattern pattern4;
+	private Pattern pattern5;
+	
+	public LogOutputParser(boolean outputWithDebug) {
+		if (outputWithDebug) {
+			pattern1 = Pattern.compile("^changeset:\\s+(\\d+):([a-f0-9]{40})\n(^tag:(.+)$)?", Pattern.MULTILINE);
+			pattern2 = Pattern.compile("^parent:\\s+(-?\\d+):([a-f0-9]{40})\n", Pattern.MULTILINE);
+			pattern3 = Pattern.compile("^manifest:\\s+(\\d+):([a-f0-9]{40})\nuser:\\s+(\\S.+)\ndate:\\s+(\\S.+)\n", Pattern.MULTILINE);
+			pattern4 = Pattern.compile("^description:\\n", Pattern.MULTILINE);
+			pattern5 = Pattern.compile("\\n\\n");
+			//p = "^manifest:\\s+(\\d+):([a-f0-9]{40})\nuser:(.+)$";
+		} else {
+			throw HgRepository.notImplemented();
+		}
+	}
+	
+	public void reset() {
+		result.clear();
+	}
+	
+	public List<Record> getResult() {
+		return result;
+	}
+
+	public void parse(CharSequence seq) {
+		Matcher m = pattern1.matcher(seq);
+		while (m.find()) {
+			Record r = new Record();
+			r.changesetIndex = Integer.parseInt(m.group(1));
+			r.changesetNodeid = m.group(2);
+			//tags = m.group(4);
+			m.usePattern(pattern2);
+			if (m.find()) {
+				r.parent1Index = Integer.parseInt(m.group(1));
+				r.parent1Nodeid = m.group(2);
+			}
+			if (m.find()) {
+				r.parent2Index = Integer.parseInt(m.group(1));
+				r.parent2Nodeid = m.group(2);
+			}
+			m.usePattern(pattern3);
+			if (m.find()) {
+				r.user = m.group(3);
+				r.date = m.group(4);
+			}
+			m.usePattern(pattern4);
+			if (m.find()) {
+				int commentStart = m.end();
+				m.usePattern(pattern5);
+				if (m.find()) {
+					r.description = seq.subSequence(commentStart, m.start()).toString();
+				}
+			}
+			result.add(r);
+			m.usePattern(pattern1);
+		}
+	}
+
+	public static class Record {
+		public int changesetIndex;
+		public String changesetNodeid;
+		public int parent1Index;
+		public int parent2Index;
+		public String parent1Nodeid;
+		public String parent2Nodeid;
+		public String user;
+		public String date;
+		public String description;
+	}
+}