#!/bin/sh
# Copyright (C) 2012-2013,2015 Codethink Limited
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program. If not, see .
# Create strata outside the main morphologies repository, which is useful
# for the more complex workflow tests.
. "$SRCDIR/scripts/fix-committer-info"
create_chunk() {
REPO="$1"
NAME="$2"
mkdir "$1"
ln -s "$1" "$1.git"
cd "$1"
cat < "$1/$2.morph"
{
"name": "$2",
"kind": "chunk",
"build-system": "dummy"
}
EOF
git init --quiet
git add .
git commit --quiet -m "Initial commit"
}
write_stratum_morph() {
REPO="$1"
NAME="$2"
cat < "$1/$2.morph"
{
"name": "$2",
"kind": "stratum",
"chunks": [
{
"name": "hello",
"repo": "test:$2-hello",
"ref": "master",
"build-mode": "test",
"build-depends": []
}
]
}
EOF
}
# Create two more strata outside the test:morphs repository
EXTERNAL_STRATA_REPO="$DATADIR/external-strata"
mkdir "$EXTERNAL_STRATA_REPO"
ln -s "$EXTERNAL_STRATA_REPO" "$EXTERNAL_STRATA_REPO".git
cd "$EXTERNAL_STRATA_REPO"
git init --quiet .
write_stratum_morph "$EXTERNAL_STRATA_REPO" "stratum2"
write_stratum_morph "$EXTERNAL_STRATA_REPO" "stratum3"
git add .
git commit --quiet -m "Initial commit"
# To make life harder, both chunks have the same name too
create_chunk "$DATADIR/stratum2-hello" "hello"
create_chunk "$DATADIR/stratum3-hello" "hello"
# Update hello-system to include them ... using a system branch! Since the
# strata refs are 'master' not 'me/add-external-strata' this does not cause
# problems with merging.
cd "$DATADIR/workspace"
"$SRCDIR/scripts/test-morph" init
"$SRCDIR/scripts/test-morph" branch test:morphs me/add-external-strata
cd "$DATADIR/workspace/me/add-external-strata/test:morphs"
cat < "hello-system.morph"
{
"name": "hello-system",
"kind": "system",
"arch": "x86_64",
"strata": [
{
"morph": "hello-stratum",
"repo": "test:morphs",
"ref": "master"
},
{
"morph": "stratum2",
"repo": "test:external-strata",
"ref": "master"
},
{
"morph": "stratum3",
"repo": "test:external-strata",
"ref": "master"
}
]
}
EOF
git commit --quiet --all -m "Add two more external strata"
# Merge to master
cd "$DATADIR/workspace"
"$SRCDIR/scripts/test-morph" checkout test:morphs master
cd master/test:morphs
"$SRCDIR/scripts/test-morph" merge me/add-external-strata
# In reality the user would do: 'git push origin master' here,
# but since our remote repo is non-bare we must cheat a bit.
# We should consider a separate fixture for the workflow tests.
cd "$DATADIR/morphs"
git pull -q \
"file://$DATADIR/workspace/master/test:morphs" master
cd "$DATADIR/workspace"