@@ -571,6 +571,18 @@ fetch_git() {
571571 local git_url=" $2 "
572572 local git_ref=" $3 "
573573
574+ local git_branch=${git_ref}
575+ local git_sha=' '
576+ if [[ " ${git_ref} " = * @* ]]; then
577+ git_branch=" $( echo " ${git_ref} " | cut -d@ -f 1) "
578+ git_sha=" $( echo " ${git_ref} " | cut -d@ -f 2) "
579+ fi
580+
581+ local depth_args=(" --depth" " 1" )
582+ if [[ -n " ${git_sha} " ]]; then
583+ depth_args=()
584+ fi
585+
574586 log_info " Cloning ${git_url} ..."
575587
576588 if ! type git & > /dev/null; then
@@ -582,18 +594,24 @@ fetch_git() {
582594 local cache_dir
583595 cache_dir=" $RUBY_BUILD_CACHE_PATH /$( sanitize " $git_url " ) "
584596 if [ -e " $cache_dir " ]; then
585- log_command git -C " $cache_dir " fetch --force " $git_url " " +${git_ref } :${git_ref } " 2>&3
597+ log_command git -C " $cache_dir " fetch --force " $git_url " " +${git_branch } :${git_branch } " 2>&3
586598 else
587- log_command git clone --bare --branch " $git_ref " " $git_url " " $cache_dir " 2>&3
599+ log_command git clone --bare --single- branch --branch " $git_branch " " $git_url " " $cache_dir " 2>&3
588600 fi
589601 git_url=" $cache_dir "
590602 fi
591603
592604 if [ -e " $package_name " ]; then
593- log_command git -C " $package_name " fetch --depth 1 origin " +${git_ref} " 2>&3
594- log_command git -C " $package_name " checkout -q -B " $git_ref " " origin/${git_ref} " 2>&3
605+ log_command git -C " $package_name " fetch " ${depth_args[@]} " origin " +${git_ref} " 2>&3
606+ if [ -z " ${git_sha} " ]; then
607+ log_command git -C " $package_name " checkout -q -B " $git_branch " " origin/${git_branch} " 2>&3
608+ fi
595609 else
596- log_command git clone --depth 1 --branch " $git_ref " " $git_url " " $package_name " 2>&3
610+ log_command git clone " ${depth_args[@]} " --single-branch --branch " $git_branch " " $git_url " " $package_name " 2>&3
611+ fi
612+
613+ if [ -n " ${git_sha} " ]; then
614+ log_command git -C " $package_name " checkout -q " $git_sha " 2>&3
597615 fi
598616}
599617
0 commit comments