xref: /netbsd-src/external/bsd/tmux/prepare-import.sh (revision b45fa494daa2ba02187711d31a4144faf0993066)
1#! /bin/sh
2# $NetBSD: prepare-import.sh,v 1.1 2011/03/10 09:10:41 jmmv 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
16CLEAN_PATTERNS=
17CLEAN_PATTERNS="${CLEAN_PATTERNS} [A-Z]*"
18CLEAN_PATTERNS="${CLEAN_PATTERNS} configure*"
19
20err() {
21	echo "${ProgName}:" "${@}" 1>&2
22	exit 1
23}
24
25log() {
26	echo "${ProgName}:" "${@}"
27}
28
29backup_dist() {
30	if [ -d dist.old ]; then
31		log "Removing dist; dist.old exists"
32		rm -rf dist
33	else
34		log "Backing up dist as dist.old"
35		mv dist dist.old
36	fi
37}
38
39extract_distfile() {
40	local distfile="${1}"; shift
41	local distname="${1}"; shift
42
43	log "Extracting ${distfile}"
44	tar -xzf "${distfile}"
45	[ -d "${distname}" ] || err "Distfile did not create ${distname}"
46	log "Renaming ${distname} to dist"
47	mv "${distname}" dist
48}
49
50get_distname() {
51	local distfile="${1}"; shift
52	basename "${distfile}" | sed -e 's,\.tar.*,,'
53}
54
55cleanup_dist() {
56	log "Removing unnecessary files from dist"
57	( cd dist && rm -rf ${CLEAN_PATTERNS} )
58}
59
60extract_version() {
61	local version=$(grep '^VERSION[ \t]*=' dist/Makefile | \
62	    cut -d '=' -f 2 | sed -e 's,[ \t]*,,g')
63	log "Version is ${version}"
64	echo "${version}" >usr.bin/tmux/version.txt
65}
66
67diff_dirs() {
68	local old_dir="${1}"; shift
69	local new_dir="${1}"; shift
70
71	local old_list=$(mktemp -t tmux-import.XXXXXX)
72	local new_list=$(mktemp -t tmux-import.XXXXXX)
73	local diff=$(mktemp -t tmux-import.XXXXXX)
74	trap "rm -f '${old_list}' '${new_list}' '${diff}'; exit 1" \
75	    HUP INT QUIT TERM
76
77	( cd "${old_dir}" && find . | sort >>"${old_list}" )
78	( cd "${new_dir}" && find . | sort >>"${new_list}" )
79
80	diff -u "${old_list}" "${new_list}" | grep '^+\.' >>"${diff}" || true
81	if [ -s "${diff}" ]; then
82		log "New files found"
83		diff -u "${old_list}" "${new_list}" | grep '^+\.'
84		log "Check if any files have to be cleaned up and update" \
85		    "the prepare-import.sh script accordingly"
86	else
87		log "No new files; all good!"
88	fi
89
90	rm -f "${old_list}" "${new_list}" "${diff}"
91}
92
93main() {
94	[ ${#} -eq 1 ] || err "Must provide a distfile name"
95	local distfile="${1}"; shift
96
97	[ -f Makefile -a -f prepare-import.sh ] || \
98	    err "Must be run from the src/external/bsd/tmux subdirectory"
99
100	local distname="$(get_distname ${distfile})"
101
102	backup_dist
103	extract_distfile "${distfile}" "${distname}"
104	extract_version
105	cleanup_dist
106	diff_dirs dist.old dist
107	log "Don't forget to validate usr.bin/tmux/version.txt and to update" \
108	    "the version in doc/3RDPARTY"
109}
110
111main "${@}"
112