#!/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 # 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}"