1#! /bin/sh
2# $NetBSD: prepare-import.sh,v 1.5 2017/04/23 02:01:59 christos Exp $
3#
4# Use this script to recreate the 'dist' subdirectory from a newly released
5# distfile.  The script takes care of unpacking the distfile, removing any
6# files that are not relevant to NetBSD and checking if there are any new
7# files in the new release that need to be addressed.
8#
9# See the README file for general instructions.
10#
11
12set -e
13
14ProgName=${0##*/}
15
16err() {
17	echo "${ProgName}:" "${@}" 1>&2
18	exit 1
19}
20
21log() {
22	echo "${ProgName}:" "${@}"
23}
24
25backup_dist() {
26	if [ -d dist.old ]; then
27		log "Removing dist; dist.old exists"
28		rm -rf dist
29	else
30		log "Backing up dist as dist.old"
31		mv dist dist.old
32	fi
33}
34
35extract_distfile() {
36	local distfile="${1}"; shift
37	local distname="${1}"; shift
38
39	log "Extracting ${distfile}"
40	tar -xzf "${distfile}"
41	[ -d "${distname}" ] || err "Distfile did not create ${distname}"
42	log "Renaming ${distname} to dist"
43	mv "${distname}" dist
44}
45
46get_distname() {
47	local distfile="${1}"; shift
48	basename "${distfile}" | sed -e 's,\.tar.*,,'
49}
50
51cleanup_dist() {
52	log "Removing unnecessary files from dist"
53	find dist -name .deps -exec rm -fr {} +
54	find dist -name .dirstamp -exec rm -f {} +
55}
56
57diff_dirs() {
58	local old_dir="${1}"; shift
59	local new_dir="${1}"; shift
60
61	local old_list=$(mktemp -t tmux-import.XXXXXX)
62	local new_list=$(mktemp -t tmux-import.XXXXXX)
63	local diff=$(mktemp -t tmux-import.XXXXXX)
64	trap "rm -f '${old_list}' '${new_list}' '${diff}'; exit 1" \
65	    HUP INT QUIT TERM
66
67	( cd "${old_dir}" && find . | sort >>"${old_list}" )
68	( cd "${new_dir}" && find . | sort >>"${new_list}" )
69
70	diff -u "${old_list}" "${new_list}" | grep '^+\.' >>"${diff}" || true
71	if [ -s "${diff}" ]; then
72		log "New files found"
73		diff -u "${old_list}" "${new_list}" | grep '^+\.'
74		log "Check if any files have to be cleaned up and update" \
75		    "the prepare-import.sh script accordingly"
76	else
77		log "No new files; all good!"
78	fi
79
80	rm -f "${old_list}" "${new_list}" "${diff}"
81}
82
83main() {
84	[ ${#} -eq 1 ] || err "Must provide a distfile name"
85	local distfile="${1}"; shift
86
87	[ -f Makefile -a -f prepare-import.sh ] || \
88	    err "Must be run from the src/external/bsd/tmux subdirectory"
89
90	local distname="$(get_distname ${distfile})"
91
92	backup_dist
93	extract_distfile "${distfile}" "${distname}"
94	cleanup_dist
95	diff_dirs dist.old dist
96	cleantags dist
97	log "Don't forget to update the -D flags in usr.bin/tmux/Makefile" \
98	    "and to update the version in doc/3RDPARTY"
99}
100
101main "${@}"
102