relpipe-data/examples/mercurial-hg-xmltable-sql.sh
branchv_0
changeset 264 d39cfc926f95
child 317 fce3d6290c40
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/relpipe-data/examples/mercurial-hg-xmltable-sql.sh	Wed Jul 31 16:01:34 2019 +0200
@@ -0,0 +1,68 @@
+#!/bin/bash
+
+relpipe-in-hglog() {
+	# on repositories with long history 
+	# it is good to process just a subset of the log using hg log parameters
+	hg log --template xml \
+		| relpipe-in-xmltable \
+			--relation hg_log \
+				--records "/log/logentry" \
+				--attribute "revision" integer "@revision" \
+				--attribute "date" string "date" \
+				--attribute "hash" string "@node" \
+				--attribute "hash_short" string "substring(@node,1,12)" \
+				--attribute "branch" string "branch" \
+				--attribute "author_name" string "author" \
+				--attribute "message" string "msg"
+				# --attribute "author_email" string "author/@email" \
+}
+
+relpipe-in-hgtags() {
+	hg tags \
+		| sed -E 's/([^ \s]+)\s+([0-9]+):(.*)/\1\n\2\n\3/g' \
+		| tr \\n \\0 \
+		| relpipe-in-cli \
+			generate-from-stdin hg_tags 3 \
+				tag string \
+				revision integer \
+				hash_short string
+}
+
+
+# just view everything:
+# (relpipe-in-hglog; relpipe-in-hgtags) | relpipe-out-tabular | less -RSi
+
+
+# filter and JOIN data, do some statistics:
+(relpipe-in-hglog; relpipe-in-hgtags) \
+	| relpipe-tr-sql \
+		--relation "tags" \
+			"SELECT
+				t.*,
+				l.date
+			FROM hg_tags AS t
+			JOIN hg_log AS l USING (hash_short)" \
+		--relation "filtered_log" \
+			"SELECT 
+				revision, 
+				date, 
+				hash_short,
+				branch, 
+				author_name
+			FROM hg_log
+			ORDER BY revision DESC
+			LIMIT ?" \
+			--parameter 10 \
+		--relation "author_statistics" \
+			"SELECT
+				author_name,
+				branch,
+				count(*) AS count,
+				min(date) AS first_commit,
+				max(date) AS last_commit
+				-- TODO: user proper data type for date
+			FROM hg_log
+			GROUP BY author_name, branch
+			ORDER BY count" \
+	| relpipe-out-tabular
+