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