#!/bin/bash
GHC_VERSION=`ghc -V | sed 's/^.* version //'  | tr -d '\n'`
export LANG=C
export LC_TIME=C
#==================================================================#
# Create gear-repo from cabal package                              #
#==================================================================#
# (C) Denis Smirnov <mithraen@freesource.info>                     #
#==================================================================#

if [ ! -f "$1" ]; then
    echo "Use: $0 <package file>"
    exit -1
fi

PACKAGE=`realpath "$1"`

echo $PACKAGE
N=${PACKAGE##*/}
N=${N%%.tar.gz}
PACKAGE_NAME=${N%-*}
PACKAGE_VER=${N##*-}
# lowcased package nam
PACKAGE_NAME_LC=`echo -n "$PACKAGE_NAME" | tr '[A-Z]' '[a-z]'`

echo $N
echo $PACKAGE_NAME $PACKAGE_NAME

DIR_NAME=ghc$GHC_VERSION-$PACKAGE_NAME_LC

mkdir -p $DIR_NAME

pushd "$DIR_NAME"
git init-db
gear-update "$PACKAGE" -c "$PACKAGE_NAME"
git commit -a -m "$PACKAGE_VER"
git checkout -b upstream
git checkout master

cd "$PACKAGE_NAME"

cabal2rpm `ls -1 *.cabal | head -1` > ../ghc$GHC_VERSION-$PACKAGE_NAME_LC.spec
cd ..

mkdir -p .gear
echo "tar: upstream:$PACKAGE_NAME name=@name@-@version@" > .gear/rules
echo "diff: upstream:$PACKAGE_NAME .:$PACKAGE_NAME name=@name@-@version@-@release@.patch" >> .gear/rules
echo "copy: $PACKAGE_NAME_LC.watch" >> .gear/rules
gear-update-tag -a

# create watch file
cat > $PACKAGE_NAME_LC.watch <<EOF
version=3
opts="downloadurlmangle=s|archive/([\w\d_-]+)/([\d\.]+)/|archive/\$1/\$2/\$1-\$2.tar.gz|,\\
filenamemangle=s|(.*)/\$|$PACKAGE_NAME-\$1.tar.gz|" \\
    http://hackage.haskell.org/packages/archive/$PACKAGE_NAME \\
    ([\d\.]*\d)/
EOF

git add .

gear-commit -a --no-edit --spec="ghc$GHC_VERSION-$PACKAGE_NAME_LC.spec"
git config 'remote.origin.url' "git.alt:packages/ghc$GHC_VERSION-$PACKAGE_NAME_LC"
git config 'remote.origin.push' "refs/heads/*:refs/heads/*"
git config 'remote.origin.fetch' "refs/heads/*:refs/remotes/origin/heads/*"
