1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/dist/tools/git/git-cache

122 lines
2.7 KiB
Plaintext
Raw Normal View History

2016-03-20 12:40:20 +01:00
#!/bin/sh
git_cache() {
git -C "${GIT_CACHE_DIR}" $*
}
init() {
set -ex
test -d "${GIT_CACHE_DIR}/.git" || {
mkdir -p "${GIT_CACHE_DIR}"
git_cache init --bare
git_cache config core.compression 1
}
set +ex
}
add() {
set -ex
git_cache remote add $1 $2
set +ex
}
update() {
set -ex
local REMOTE=${1:---all}
git_cache fetch $REMOTE
set +ex
}
list() {
local REMOTES="$(git_cache remote show)"
for remote in $REMOTES; do
echo "${remote}: $(git_cache remote get-url $remote)"
done
}
drop() {
set -ex
local REMOTE=${1}
[ -z "$REMOTE" ] && {
echo "usage: git cache drop <name>"
exit 1
}
git_cache remote remove $REMOTE
set +ex
}
_check_commit() {
git_cache cat-file -e ${1}^{commit}
}
clone() {
set -ex
local REMOTE="${1}"
local SHA1="${2}"
local REMOTE_NAME="$(basename $REMOTE)"
local TARGET_PATH="${3:-${REMOTE_NAME}}"
if _check_commit $2 2>&1; then
git init "${TARGET_PATH}"
git_cache tag commit$SHA1 $SHA1 || true # ignore possibly already existing tag
2016-06-01 19:46:31 +02:00
git -C "${TARGET_PATH}" fetch --tags --depth=1 "${GIT_CACHE_DIR}" refs/tags/commit$SHA1
2016-03-20 12:40:20 +01:00
git -C "${TARGET_PATH}" checkout FETCH_HEAD
else
git clone "${REMOTE}" "${TARGET_PATH}"
git -C "${TARGET_PATH}" checkout $SHA1
fi
set +ex
}
usage() {
echo "git cache uses a bare git repository containing all objects from multiple"
echo "upstream git repositories."
echo ""
echo "usage:"
echo ""
echo " git cache init initialize git cache"
echo " git cache add <name> <url> add repository <url> with name <name>"
echo " git cache list list cached repositories"
echo " git cache drop <name> drop repo from cache"
echo " git cache update [<name>] fetch repo named <name> (or all)"
echo " git cache clone <url> <SHA1> clone repository <url> from cache"
echo " git cache show-path print's the path that can be used as "
echo " '--reference' parameter"
echo ""
echo "To retrieve objects from cache (will use remote repository if needed):"
echo ' git clone --reference $(git cache show-path) <repo>'
}
ACTION=$1
shift
export GIT_CACHE_DIR=${GIT_CACHE_DIR:-${HOME}/.gitcache}
case $ACTION in
init)
init $*
;;
add)
add $*
;;
update)
update $*
;;
list)
list $*
;;
drop)
drop $*
;;
show-path)
echo ${GIT_CACHE_DIR}
;;
clone)
clone $*
;;
*)
usage
;;
esac