diff --git a/Makefile b/Makefile index 55d07752fa..462eec9742 100644 --- a/Makefile +++ b/Makefile @@ -23,7 +23,8 @@ src/github.com/docker/cli: cp -r "$(CLI_DIR)" $@ else src/github.com/docker/cli: - git clone -q "$(DOCKER_CLI_REPO)" $@ + git init $@ + git -C $@ remote add origin "$(DOCKER_CLI_REPO)" endif ifdef ENGINE_DIR @@ -32,16 +33,17 @@ src/github.com/docker/docker: cp -r "$(ENGINE_DIR)" $@ else src/github.com/docker/docker: - git clone -q "$(DOCKER_ENGINE_REPO)" $@ + git init $@ + git -C $@ remote add origin "$(DOCKER_ENGINE_REPO)" endif .PHONY: checkout-cli checkout-cli: src/github.com/docker/cli - @git -C src/github.com/docker/cli checkout -q "$(DOCKER_CLI_REF)" + ./scripts/checkout.sh src/github.com/docker/cli "$(DOCKER_CLI_REF)" .PHONY: checkout-docker checkout-docker: src/github.com/docker/docker - @git -C src/github.com/docker/docker checkout -q "$(DOCKER_ENGINE_REF)" + ./scripts/checkout.sh src/github.com/docker/docker "$(DOCKER_ENGINE_REF)" .PHONY: checkout checkout: checkout-cli checkout-docker ## checkout source at the given reference(s) diff --git a/scripts/checkout.sh b/scripts/checkout.sh new file mode 100755 index 0000000000..6bc18479dd --- /dev/null +++ b/scripts/checkout.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env sh + +# Copyright 2018-2020 Docker Inc. + +# 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. + +checkout() ( + set -ex + SRC="$1" + REF="$2" + REF_FETCH="$REF" + # if ref is branch or tag, retrieve its canonical form + REF=$(git -C "$SRC" ls-remote --refs --heads --tags origin "$REF" | awk '{print $2}') + if [ -n "$REF" ]; then + # if branch or tag then create it locally too + REF_FETCH="$REF:$REF" + else + REF="FETCH_HEAD" + fi + git -C "$SRC" fetch --update-head-ok --depth 1 origin "$REF_FETCH" + git -C "$SRC" checkout -q "$REF" +) + + +# Only execute checkout function above if this file is executed, not sourced from another script +prog=checkout.sh # needs to be in sync with this file's name +if [ "$(basename -- $0)" = "$prog" ]; then + checkout $* +fi