136 lines
3.2 KiB
Bash
Executable File
136 lines
3.2 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you 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.
|
|
#
|
|
# Author: Martin Stockhammer <martin_s@apache.org>
|
|
# Date: 2018-11-03
|
|
#
|
|
# This script runs a sparse git clone of a remote repository and
|
|
# initializes the git configuration.
|
|
#
|
|
# It is mainly used for site content creation, because the main archiva-web-content repository
|
|
# is rather large and we don't want to checkout the complete data.
|
|
#
|
|
|
|
SITE_DIR=".site-content"
|
|
GIT_REMOTE=""
|
|
|
|
GIT_USER=$(git config user.name)
|
|
GIT_EMAIL=$(git config user.email)
|
|
|
|
GIT_PATTERN_FILE="git-sparse-checkout-pattern"
|
|
GIT_PATTERN_DEST=".git/info/sparse-checkout"
|
|
|
|
MY_PWD=$(pwd)
|
|
|
|
CLONE=1
|
|
FORCE=1
|
|
MODULE_DIR="${MY_PWD}"
|
|
PATTERN=""
|
|
while [ ! -z "$1" ]; do
|
|
case "$1" in
|
|
-f)
|
|
FORCE=0
|
|
shift
|
|
;;
|
|
-d)
|
|
shift
|
|
SITE_DIR="$1"
|
|
shift
|
|
;;
|
|
-p)
|
|
shift
|
|
if [ -z "${PATTERN}" ]; then
|
|
PATTERN="${1}"
|
|
else
|
|
PATTERN="${PATTERN}\n${1}"
|
|
fi
|
|
shift
|
|
;;
|
|
-m)
|
|
shift
|
|
MODULE_DIR="$1"
|
|
shift
|
|
;;
|
|
*)
|
|
GIT_REMOTE="$1"
|
|
shift
|
|
;;
|
|
esac
|
|
done
|
|
|
|
print_usage() {
|
|
echo "checkoutRepo [-m MODULE_DIR] [-d SITE_DIR] [-f] GIT_URL"
|
|
echo " -m: The module directory where the pattern file can be found and the site dir will be created."
|
|
echo " -d SITE_DIR: Use the given directory for checkout"
|
|
echo " -f: Force clone, even if directory exists"
|
|
}
|
|
|
|
if [ ! -f "${MODULE_DIR}/pom.xml" ]; then
|
|
echo "Looks like the working directory is not a valid dir. No pom.xml found."
|
|
exit 1
|
|
fi
|
|
|
|
cd "${MODULE_DIR}" || { echo "Could not change to module directory ${MODULE_DIR}"; exit 1; }
|
|
|
|
if [ -z "$GIT_REMOTE" ]; then
|
|
print_usage
|
|
exit 1
|
|
fi
|
|
|
|
if [ "${GIT_REMOTE:0:8}" == "scm:git:" ]; then
|
|
GIT_REMOTE="${GIT_REMOTE:8}"
|
|
fi
|
|
|
|
|
|
if [ -d "${SITE_DIR}" ]; then
|
|
if [ ! -d "${SITE_DIR}/.git" ]; then
|
|
echo "Directory ${SITE_DIR} exist already, but is not a git clone. Aborting."
|
|
exit 1
|
|
elif [ "$FORCE" -eq 0 ]; then
|
|
CLONE=0
|
|
fi
|
|
else
|
|
CLONE=0
|
|
fi
|
|
|
|
if [ $CLONE -eq 0 ]; then
|
|
git clone "${GIT_REMOTE}" "${SITE_DIR}" --no-checkout
|
|
if [ $? -ne 0 ]; then
|
|
echo "Git clone failed"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
cd "${SITE_DIR}" || { echo "Could not change to site dir ${SITE_DIR}"; exit 1; }
|
|
|
|
git config core.sparsecheckout true
|
|
git config user.name "${GIT_USER}"
|
|
git config user.email "${GIT_EMAIL}"
|
|
|
|
if [ ! -z "${PATTERN}" ]; then
|
|
echo -e "${PATTERN}" >"${GIT_PATTERN_DEST}"
|
|
elif [ -f "../${GIT_PATTERN_FILE}" ]; then
|
|
cp "../${GIT_PATTERN_FILE}" "${GIT_PATTERN_DEST}"
|
|
fi
|
|
|
|
git checkout --
|
|
|
|
cd "${MY_PWD}"
|
|
|