relpipe-data/examples/mercurial-hg-xmltable-sql.sh
author František Kučera <franta-hg@frantovo.cz>
Wed, 31 Jul 2019 16:01:34 +0200
branchv_0
changeset 264 d39cfc926f95
child 317 fce3d6290c40
permissions -rwxr-xr-x
XMLTable, SQL, v0.13

#!/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