aboutsummaryrefslogtreecommitdiff
path: root/kiss
diff options
context:
space:
mode:
authornoreply@github.com <noreply@github.com>2020-02-19 15:11:00 +0000
committernoreply@github.com <noreply@github.com>2020-02-19 15:11:00 +0000
commit11ef2019d9298a36385561e51c176b3c96ea87e5 (patch)
treeda284622717bc606049c722219f23726dd4090d8 /kiss
parentaf1e05923483ed427232c3b56cc24487e393be07 (diff)
parent929283edb08cbe965637c033ac32c93a243044ea (diff)
downloadcpt-11ef2019d9298a36385561e51c176b3c96ea87e5.tar.gz
Merge pull request #113 from kisslinux/smgit
kiss: less git pulls FossilOrigin-Name: 1ea5da1a5682862cdea5c55e8824a138270fa7f247cd462fe7ff48e6b04e5d9b
Diffstat (limited to 'kiss')
-rwxr-xr-xkiss40
1 files changed, 35 insertions, 5 deletions
diff --git a/kiss b/kiss
index 24f3c27..94883a8 100755
--- a/kiss
+++ b/kiss
@@ -187,16 +187,39 @@ pkg_sources() {
mkdir -p "$mak_dir/$1/$dest"
- # Run in a subshell to keep variables local.
+ # Run in a subshell to keep the variables, path and
+ # argument list local to each loop iteration.
(
repo_src=${src##git+}
- log "$1" "Cloning ${repo_src%#*}"
+ log "$1" "Cloning ${repo_src%[@#]*}"
- [ "${src##*#*}" ] && shallow=--depth=1
+ # Git has no option to clone a repository to a
+ # specific location so we must do it ourselves
+ # beforehand.
+ cd "$mak_dir/$1/$dest" || die 2>/dev/null
- cd "$mak_dir/$1/$dest" &&
- git clone "${shallow:---}" "${repo_src%#*}" .
+ # Clear the argument list as we'll be overwriting
+ # it below based on what kind of checkout we're
+ # dealing with.
+ set -- "$repo_src"
+
+ # If a branch was given, shallow clone it directly.
+ # This speeds things up as we don't have to grab
+ # a lot of unneeded commits.
+ [ "${src##*@*}" ] ||
+ set -- -b "${src##*@}" "${repo_src%@*}"
+
+ # Maintain compatibility with older versions of
+ # kiss by shallow cloning all branches. This has
+ # the added benefit of allowing checkouts of
+ # specific commits in specific branches.
+ [ "${src##*#*}" ] ||
+ set -- --no-single-branch "${repo_src%#*}"
+
+ # Always do a shallow clone as we will unshallow it if
+ # needed later (when a commit is desired).
+ git clone --depth=1 "$@" .
) || die "$1" "Failed to clone $src"
@@ -234,6 +257,13 @@ pkg_extract() {
git+*\#*)
log "Checking out ${src##*#}"
+ # A commit was requested, unshallow the repository.
+ # This will convert it to a regular repository with
+ # full history.
+ git fetch --unshallow
+
+ # Try to checkout the repository. If we fail here,
+ # the requested commit doesn't exist.
git -c advice.detachedHead=false checkout "${src##*#}" ||
die "Commit hash ${src##*#} doesn't exist"
;;