diff -r 8bf13358a50a -r d39cfc926f95 relpipe-data/examples/mercurial-hg-xmltable-sql.sh --- /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 +