diff options
Diffstat (limited to 'package.inc.sh')
-rw-r--r-- | package.inc.sh | 22 |
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() { |