File _service:obs_scm:olh-ibs-ocaml-pkg.sh of Package helpers

#!/bin/bash
# vim: ts=2 shiftwidth=2 noexpandtab nowrap
set -ex
unset LANG
unset ${!LC_*}
pkg=
obs=~/work/obs/clean/devel:languages:ocaml
ibs=~/work/ibs/home:olh:obs:devel:languages:ocaml
obs_path=
ibs_path=
spec=
service=
start_pwd=$PWD
#
if test "$#" -eq 1
then
  : $1
	case "${1}" in
	*://github.com/*/commit/*)
: github
	gitrev="${1##*/}"
	upstream="${1%/*}"
	upstream="${upstream%/commit}"
	upstream="${upstream##*/}"
	;;
	*://gitlab.com/*/commit/*)
: gitlab
	gitrev="${1##*/}"
	upstream="${1%/*}"
	upstream="${upstream%/commit}"
	upstream="${upstream%/-}"
	upstream="${upstream##*/}"
	;;
	*://gitlab.inria.fr/*/commit/*)
: gitlab
	gitrev="${1##*/}"
	upstream="${1%/*}"
	upstream="${upstream%/commit}"
	upstream="${upstream%/-}"
	upstream="${upstream##*/}"
	;;
	*) exit 1 ;;
	esac
elif test "$#" -eq 2
then
upstream=$1
gitrev=$2
test -n "$3" && ibs="${ibs}:$3"
elif test "$#" -eq 3
then
upstream=$1
gitrev=$2
ibs="${ibs}:$3"
else
	exit 1
fi
#
select_lablgtk() {
	while true
	do
		read -n 1 -p "[2] ocaml-lablgtk2, [3] ocaml-lablgtk3"
		case "${REPLY}" in
		2) pkg='ocaml-lablgtk2' ; break ;;
		3) pkg='ocaml-lablgtk3' ; break ;;
		esac
	done
}
select_lwt() {
	while true
	do
		read -n 1 -p "[1] ocaml-lwt, [2] ocaml-lwt_ppx, [3] ocaml-lwt_react"
		case "${REPLY}" in
		1) pkg='ocaml-lwt' ; break ;;
		2) pkg='ocaml-lwt_ppx' ; break ;;
		3) pkg='ocaml-lwt_react' ; break ;;
		esac
	done
}
test -n "${upstream}"
test -n "${gitrev}"
case "${upstream}" in
	Camomile) pkg='ocaml-camomile' ;;
	Zarith) pkg='ocaml-zarith' ;;
	alcotest) pkg='ocaml-alcotest' ;;
	astring) pkg='ocaml-astring' ;;
	base) pkg='ocaml-base' ;;
	base_bigstring) pkg='ocaml-base_bigstring' ;;
	base_quickcheck) pkg='ocaml-base_quickcheck' ;;
	bigarray-compat) pkg='ocaml-bigarray-compat' ;;
	bigstringaf) pkg='ocaml-bigstringaf' ;;
	bin_prot) pkg='ocaml-bin_prot' ;;
	biniou) pkg='ocaml-biniou' ;;
	bisect_ppx) pkg='ocaml-bisect_ppx' ;;
	bos) pkg='ocaml-bos' ;;
	calendar) pkg='ocaml-calendar' ;;
	camlidl) pkg='ocaml-camlidl' ;;
	camlp-streams) pkg='ocaml-camlp-streams' ;;
	camlp5) pkg='ocaml-camlp5' ;;
	charinfo_width) pkg='ocaml-charinfo_width' ;;
	cinaps) pkg='ocaml-cinaps' ;;
	cmdliner) pkg='ocaml-cmdliner' ;;
	coq) pkg='ocaml-coq' ;;
	core) pkg='ocaml-core' ;;
	core_bench) pkg='ocaml-core_bench' ;;
	core_kernel) pkg='ocaml-core_kernel' ;;
	core_unix) pkg='ocaml-core_unix' ;;
	cppo) pkg='ocaml-cppo' ;;
	cryptokit) pkg='ocaml-cryptokit' ;;
	csexp) pkg='ocaml-csexp' ;;
	curses) pkg='ocaml-curses' ;;
	domain-local-await) pkg='ocaml-domain-local-await' ;;
	dose3) pkg='ocaml-dose' ;;
	dune) pkg='ocaml-dune' ;;
	easy-format) pkg='ocaml-easy-format' ;;
	eio) pkg='ocaml-eio' ;;
	expect_test_helpers_core) pkg='ocaml-expect_test_helpers_core' ;;
	fieldslib) pkg='ocaml-fieldslib' ;;
	fix) pkg='ocaml-fix' ;;
	fmt) pkg='ocaml-fmt' ;;
	fpath) pkg='ocaml-fpath' ;;
	gapi-ocaml) pkg='ocaml-gapi' ;;
	gen) pkg='ocaml-gen' ;;
	google-drive-ocamlfuse) pkg='google-drive-ocamlfuse' ;;
	graphics) pkg='ocaml-graphics' ;;
	hmap) pkg='ocaml-hmap' ;;
	int_repr) pkg='ocaml-int_repr' ;;
	jane-street-headers) pkg='ocaml-jane-street-headers' ;;
	jane_rope) pkg='ocaml-jane_rope' ;;
	jsonm) pkg='ocaml-jsonm' ;;
	jst-config) pkg='ocaml-jst-config' ;;
	lablgtk) select_lablgtk ;;
	lambda-term) pkg='ocaml-lambda-term' ;;
	lib-ocamlnet3) pkg='ocaml-ocamlnet' ;;
	libvirt-ocaml) pkg='ocaml-libvirt' ;;
	logs) pkg='ocaml-logs' ;;
	luv) pkg='ocaml-luv' ;;
	lwt) select_lwt ;;
	lwt_log) pkg='ocaml-lwt_log' ;;
	markup.ml) pkg='ocaml-markup.ml' ;;
	mdx) pkg='ocaml-mdx' ;;
	menhir) pkg='ocaml-menhir' ;;
	merlin) pkg='ocaml-merlin' ;;
	mmap) pkg='ocaml-mmap' ;;
	mtime) pkg='ocaml-mtime' ;;
	num) pkg='ocaml-num' ;;
	ocaml-base64) pkg='ocaml-base64' ;;
	ocaml-cairo) pkg='ocaml-cairo' ;;
	ocaml-compiler-libs) pkg='ocaml-ocaml-compiler-libs' ;;
	ocaml-cstruct) pkg='ocaml-cstruct' ;;
	ocaml-ctypes) pkg='ocaml-ctypes' ;;
	ocaml-either) pkg='ocaml-either' ;;
	ocaml-extlib) pkg='ocaml-extlib' ;;
	ocaml-fileutils) pkg='ocaml-fileutils' ;;
	ocaml-integers) pkg='ocaml-integers' ;;
	ocaml-lsp) pkg='ocaml-lsp-server' ;;
	ocaml-lwt-dllist) pkg='ocaml-lwt-dllist' ;;
	ocaml-mccs) pkg='ocaml-mccs' ;;
	ocaml-migrate-parsetree) pkg='ocaml-migrate-parsetree' ;;
	ocaml-minisat) pkg='ocaml-minisat' ;;
	ocaml-re) pkg='ocaml-re' ;;
	ocaml-sha) pkg='ocaml-sha' ;;
	ocaml-ssl) pkg='ocaml-ssl' ;;
	ocaml-uring) pkg='ocaml-uring' ;;
	ocaml-version) pkg='ocaml-version' ;;
	ocaml-wayland) pkg='ocaml-wayland' ;;
	ocaml_intrinsics) pkg='ocaml-ocaml_intrinsics' ;;
	ocamlbuild) pkg='ocaml-ocamlbuild' ;;
	ocamlfind) pkg='ocaml-findlib' ; echo "download tar.gz" ; exit 1 ;;
	ocamlformat) pkg='ocaml-ocamlformat' ;;
	ocamlfuse) pkg='ocaml-fuse' ;;
	ocamlgraph) pkg='ocaml-ocamlgraph' ;;
	ocp-indent) pkg='ocaml-ocp-indent' ;;
	ocplib-endian) pkg='ocaml-ocplib-endian' ;;
	odoc) pkg='ocaml-odoc' ;;
	odoc-parser) pkg='ocaml-odoc-parser' ;;
	omd) pkg='ocaml-omd' ;;
	opam) pkg='opam' ;;
	opam-file-format) pkg='opam-file-format' ;;
	optint) pkg='ocaml-optint' ;;
	ounit) pkg='ocaml-ounit' ;;
	parmap) pkg='ocaml-parmap' ;;
	parsexp) pkg='ocaml-parsexp' ;;
	pcre-ocaml) pkg='ocaml-pcre' ;;
	pp) pkg='ocaml-pp' ;;
	ppx_assert) pkg='ocaml-ppx_assert' ;;
	ppx_base) pkg='ocaml-ppx_base' ;;
	ppx_bench) pkg='ocaml-ppx_bench' ;;
	ppx_bin_prot) pkg='ocaml-ppx_bin_prot' ;;
	ppx_cold) pkg='ocaml-ppx_cold' ;;
	ppx_compare) pkg='ocaml-ppx_compare' ;;
	ppx_custom_printf) pkg='ocaml-ppx_custom_printf' ;;
	ppx_deriving) pkg='ocaml-ppx_deriving' ;;
	ppx_deriving_yojson) pkg='ocaml-ppx_deriving_yojson' ;;
	ppx_disable_unused_warnings) pkg='ocaml-ppx_disable_unused_warnings' ;;
	ppx_enumerate) pkg='ocaml-ppx_enumerate' ;;
	ppx_expect) pkg='ocaml-ppx_expect' ;;
	ppx_fields_conv) pkg='ocaml-ppx_fields_conv' ;;
	ppx_fixed_literal) pkg='ocaml-ppx_fixed_literal' ;;
	ppx_globalize) pkg='ocaml-ppx_globalize' ;;
	ppx_hash) pkg='ocaml-ppx_hash' ;;
	ppx_here) pkg='ocaml-ppx_here' ;;
	ppx_ignore_instrumentation) pkg='ocaml-ppx_ignore_instrumentation' ;;
	ppx_inline_test) pkg='ocaml-ppx_inline_test' ;;
	ppx_jane) pkg='ocaml-ppx_jane' ;;
	ppx_js_style) pkg='ocaml-ppx_js_style' ;;
	ppx_let) pkg='ocaml-ppx_let' ;;
	ppx_log) pkg='ocaml-ppx_log' ;;
	ppx_module_timer) pkg='ocaml-ppx_module_timer' ;;
	ppx_optcomp) pkg='ocaml-ppx_optcomp' ;;
	ppx_optional) pkg='ocaml-ppx_optional' ;;
	ppx_pipebang) pkg='ocaml-ppx_pipebang' ;;
	ppx_sexp_conv) pkg='ocaml-ppx_sexp_conv' ;;
	ppx_sexp_message) pkg='ocaml-ppx_sexp_message' ;;
	ppx_sexp_value) pkg='ocaml-ppx_sexp_value' ;;
	ppx_stable) pkg='ocaml-ppx_stable' ;;
	ppx_stable_witness) pkg='ocaml-ppx_stable_witness' ;;
	ppx_string) pkg='ocaml-ppx_string' ;;
	ppx_tools) pkg='ocaml-ppx_tools' ;;
	ppx_tydi) pkg='ocaml-ppx_tydi' ;;
	ppx_typerep_conv) pkg='ocaml-ppx_typerep_conv' ;;
	ppx_variants_conv) pkg='ocaml-ppx_variants_conv' ;;
	ppx_yojson_conv_lib) pkg='ocaml-ppx_yojson_conv_lib' ;;
	ppxlib) pkg='ocaml-ppxlib' ;;
	psq) pkg='ocaml-psq' ;;
	pyml) pkg='ocaml-pyml' ;;
	qcheck) pkg='ocaml-qcheck' ;;
	qtest) pkg='ocaml-qtest' ;;
	re2) pkg='ocaml-re2' ;;
	react) pkg='ocaml-react' ;;
	regex_parser_intf) pkg='ocaml-regex_parser_intf' ;;
	result) pkg='ocaml-result' ;;
	rresult) pkg='ocaml-rresult' ;;
	sedlex) pkg='ocaml-sedlex' ;;
	sexp_pretty) pkg='ocaml-sexp_pretty' ;;
	sexplib) pkg='ocaml-sexplib' ;;
	sexplib0) pkg='ocaml-sexplib0' ;;
	spawn) pkg='ocaml-spawn' ;;
	splittable_random) pkg='ocaml-splittable_random' ;;
	sqlite3-ocaml) pkg='ocaml-sqlite' ;;
	stdcompat) pkg='ocaml-stdcompat' ;;
	stdio) pkg='ocaml-stdio' ;;
	stdlib-shims) pkg='ocaml-stdlib-shims' ;;
	textutils) pkg='ocaml-textutils' ;;
	textutils_kernel) pkg='ocaml-textutils_kernel' ;;
	thread-table) pkg='ocaml-thread-table' ;;
	time_now ) pkg='ocaml-time_now' ;;
	timezone ) pkg='ocaml-timezone' ;;
	tiny_httpd) pkg='ocaml-tiny_httpd' ;;
	typerep) pkg='ocaml-typerep' ;;
	tyxml) pkg='ocaml-tyxml' ;;
	unison) pkg='unison' ;;
	utop) pkg='ocaml-utop' ;;
	uucd) pkg='ocaml-uucd' ;;
	uucp) pkg='ocaml-uucp' ;;
	uuidm) pkg='ocaml-uuidm' ;;
	uuseg) pkg='ocaml-uuseg' ;;
	uutf) pkg='ocaml-uutf' ;;
	variantslib) pkg='ocaml-variantslib' ;;
	xml-light) pkg='ocaml-xml-light' ;;
	xmlm) pkg='ocaml-xmlm' ;;
	yojson) pkg='ocaml-yojson' ;;
	zed) pkg='ocaml-zed' ;;
	*) exit 1 ;;
esac
#
pushd "${obs}" > /dev/null
	pushd "${pkg}/.osc" > /dev/null
		cd ..
		obs_path="$PWD"
		ls -alt
		osc up -u
	popd > /dev/null
popd > /dev/null
#
pushd "${ibs}" > /dev/null
	pushd "${pkg}/.osc" > /dev/null
		cd ..
		ibs_path="$PWD"
		ls -alt
		osc up -u
	popd > /dev/null
popd > /dev/null
#
pushd "${ibs_path}"
spec="${pkg}.spec"
if test -f "${spec}"
then
	echo "$_ exists. Continue?"
	while true
	do
		read -n 1 -p "[d]iff [c]ontinue [e]xit ..."
		case "${REPLY}" in
		d) diff -u "${obs_path}/${spec}" "${spec}" 2>&1 | less -S ;;
		c) break ;;
		e) exit 0 ;;
		esac
	done
else
	cp -avit . "${obs_path}/${spec}"
	osc add "${spec}"
	osc commit --noservice -m 'upstream' 
fi
#
service='_service'
if test -f "${service}"
then
	echo "$_ exists. Continue?"
	while true
	do
		read -n 1 -p "[d]iff [c]ontinue [e]xit [l]og [p]atch ..."
		case "${REPLY}" in
		d) diff -u "${obs_path}/${service}" "${service}" 2>&1 | less -S ;;
		c) break ;;
		e) exit 0 ;;
		l)
		read current_gitrev < <(sed -n 's@^\(.*<param name=.revision.>\)\([^<]\+\)\(.*\)@\2@p' "${service}")
		new_gitrev="${gitrev}"
		if pushd "${start_pwd}/.git" > /dev/null
		then
			cd ..
			git log -p -M --stat --pretty=fuller -b -B -w "${current_gitrev}..${new_gitrev}" || : git-log $?
			popd > /dev/null
		fi
		;;
		p)
		read current_gitrev < <(sed -n 's@^\(.*<param name=.revision.>\)\([^<]\+\)\(.*\)@\2@p' "${service}")
		new_gitrev="${gitrev}"
		if pushd "${start_pwd}/.git" > /dev/null
		then
			cd ..
			git diff -p -b -B -w "${current_gitrev}..${new_gitrev}" || : git-diff $?
			popd > /dev/null
		fi
		;;
		esac
	done
else
	cp -avit . "${obs_path}/${service}"
	while true
	do
		read -n 1 -p "[c]ontinue [e]xit [l]og [p]atch ..."
		case "${REPLY}" in
		c) break ;;
		e) exit 0 ;;
		l)
		read current_gitrev < <(sed -n 's@^\(.*<param name=.revision.>\)\([^<]\+\)\(.*\)@\2@p' "${service}")
		new_gitrev="${gitrev}"
		if pushd "${start_pwd}/.git" > /dev/null
		then
			cd ..
			git log -p -M --stat --pretty=fuller -b -B -w "${current_gitrev}..${new_gitrev}" || : git-log $?
			popd > /dev/null
		fi
		;;
		p)
		read current_gitrev < <(sed -n 's@^\(.*<param name=.revision.>\)\([^<]\+\)\(.*\)@\2@p' "${service}")
		new_gitrev="${gitrev}"
		if pushd "${start_pwd}/.git" > /dev/null
		then
			cd ..
			git diff -p -b -B -w "${current_gitrev}..${new_gitrev}" || : git-diff $?
			popd > /dev/null
		fi
		;;
		esac
	done
fi
osc add "${service}"
sed -i~ "s@<param name=\"revision\">[^<]\\+</param>@<param name=\"revision\">${gitrev}</param>@" "${service}"
if diff -u "${obs_path}/${service}" "${service}"
then
	echo "No difference in $_?. Continue?"
fi
read
vi _service
if pushd */.git
then
	cd ..
	git --no-pager tag --list | xargs git --no-pager tag --delete
	git --no-pager fetch --all --prune --tags --prune-tags
	git --no-pager reset --hard "${gitrev}"
	popd
fi
for f in *.tar.xz
do
	test -f "${f}" && osc rm -f "${f}"
done
osc service dr
osc add *.tar.xz
osc diff | cat
vi _service *.spec */*opam
osc commit --noservice -m "${gitrev}" 
openSUSE Build Service is sponsored by