--- /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
+