#!/bin/ksh
#
# $OpenBSD: portimport,v 1.6 2018/11/01 11:33:12 espie Exp $
# Copyright (c) 2013 Robert Peichaer
# 
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
# 
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#
# Based on Marc Espie's portimport.
# sthen: Modified to handle imports from mystuff/ and do a dry run first.
# rpe:   rewrite based on sthen@'s version
# zhuk:  checks and detection of pkgpath moved to portcheck(1)

set -e
set -u

usage() {
	echo "usage: $(basename $0) [-p portsdir] [-u username]" >&2
	exit 1
}

user=$(id -un)
portsdir=
set -A portcheck_args -- -N

while getopts "p:u:" OPT; do
	case $OPT in
	p)	portsdir="$OPTARG"
		portcheck_args[${#portcheck_args[@]}]="-p$portsdir";;
	u)	user=$OPTARG;;
	*)	usage;;
	esac
done

shift $(($OPTIND - 1))
(($# > 0)) && usage

error=false
pkgpath=$(portcheck "${portcheck_args[@]}") || error=true
if test -z $pkgpath; then
	echo >&2 "Can't determine pkgpath"
	exit 1
fi
if $error; then
	read ans?'Do you want to continue after those errors? [y/N] '
	[[ $ans == +(y|Y) ]] || exit 1
fi

portsdir=${portsdir:-${PWD%"/$pkgpath"}}
timestamp=$(date '+%Y%m%d')
cvsroot=$user@cvs.openbsd.org:/cvs

echo -n "Import would go into: "
cvs -n -d$cvsroot import ports/$pkgpath $user ${user}_$timestamp 2>/dev/null | \
	grep Makefile | head -1 | awk '{print $2}' | xargs dirname

read ans?'Does this look correct? [y/n] '
if [[ $ans == +(y|Y) ]]; then
	cvs -d$cvsroot import ports/$pkgpath $user ${user}_$timestamp
	cd "$portsdir/${pkgpath%/*}"
	cvs -d$cvsroot update -AdP ${pkgpath##*/}
	echo "Don't forget to commit the ${pkgpath%/*}/Makefile when you're done!"
	pwd
fi
