blob: 0d8b97f04c0b4ace941fad12ce78b70e531b9f84 [file] [log] [blame]
#!/usr/bin/env bash
#
# Copyright (C) 2016 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# A sceleton script to demonstrate how to use the preview_submit REST API call.
#
#
if test -z $server
then
echo "The variable 'server' needs to point to your Gerrit instance"
exit 1
fi
if test -z $changeId
then
echo "The variable 'changeId' must contain a valid change Id"
exit 1
fi
if test -z $gerrituser
then
echo "The variable 'gerrituser' must contain a user/password"
exit 1
fi
curl -u $gerrituser -w '%{http_code}' -o preview \
$server/a/changes/$changeId/revisions/current/preview_submit?format=tgz >http_code
if ! grep 200 http_code >/dev/null
then
# error out:
echo "Error previewing submit $changeId due to:"
cat preview
echo
else
# valid tgz file, extract and obtain a bundle for each project
mkdir tmp-bundles
(cd tmp-bundles && tar -zxf ../preview)
for project in $(cd tmp-bundles && find -type f)
do
# Projects may contain slashes, so create the required
# directory structure
mkdir -p $(dirname $project)
# $project is in the format of "./path/name/project.git"
# remove the leading ./
proj=${project:-./}
git clone $server/$proj $proj
# First some nice output:
echo "Verify that the bundle is good:"
GIT_WORK_TREE=$proj GIT_DIR=$proj/.git \
git bundle verify tmp-bundles/$proj
echo "Checking that the bundle only contains one branch..."
if test \
"$(GIT_WORK_TREE=$proj GIT_DIR=$proj/.git \
git bundle list-heads tmp-bundles/$proj |wc -l)" != 1
then
echo "Submitting $changeId would affect the project"
echo "$proj"
echo "on multiple branches:"
git bundle list-heads
echo "This script does not demonstrate this use case."
exit 1
fi
# find the target branch:
branch=$(GIT_WORK_TREE=$proj GIT_DIR=$proj/.git \
git bundle list-heads tmp-bundles/$proj | awk '{print $2}')
echo "found branch $branch"
echo "fetch the bundle into the repository"
GIT_WORK_TREE=$proj GIT_DIR=$proj/.git \
git fetch tmp-bundles/$proj $branch
echo "and checkout the state"
git -C $proj checkout FETCH_HEAD
done
echo "Now run a test for all of: $(cd tmp-bundles && find -type f)"
fi