123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- #!/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=""
- BRANCH="master"
- 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
- ;;
- -b)
- shift
- BRANCH="$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 checkout "${BRANCH}"
-
- 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}"
|