summaryrefslogtreecommitdiff
path: root/package.inc.sh
diff options
context:
space:
mode:
Diffstat (limited to 'package.inc.sh')
-rw-r--r--package.inc.sh22
1 files changed, 15 insertions, 7 deletions
diff --git a/package.inc.sh b/package.inc.sh
index 7a9756d..84c9f66 100644
--- a/package.inc.sh
+++ b/package.inc.sh
@@ -156,7 +156,7 @@ package_export() {
}
package_checkout() {
- local remote
+ local remote clone_args
pkgname=$1
package_init "$pkgname" remote || return
@@ -164,12 +164,20 @@ package_checkout() {
git show-ref -q "refs/heads/$remote/packages/$pkgname" ||
git branch -qf --no-track {,}"$remote/packages/$pkgname"
- quiet_git clone \
- --local \
- --single-branch \
- --branch "$remote/packages/$pkgname" \
- --config "pull.rebase=true" \
- "$ASPROOT" "$pkgname" || return
+ clone_args=(
+ --local
+ --single-branch
+ --branch "$remote/packages/$pkgname"
+ --config "pull.rebase=true"
+ )
+
+ # If the current directory isn't on the same FS as us, then we can't use
+ # hardlinks in the clone, implied by --local.
+ if [[ $(stat -c %d "$ASPROOT") != "$(stat -c %d .)" ]] ; then
+ clone_args+=(--no-hardlinks)
+ fi
+
+ quiet_git clone "${clone_args[@]}" "$ASPROOT" "$pkgname"
}
package_get_repos_with_arch() {