|
|
@@ -21,13 +21,25 @@ temp="$(rev <<< "${repo%/}" | cut -d/ -f1,2 | rev | tr / -)-${branch}"
|
|
|
fetch="_fetch-${temp}"
|
|
|
split="_split-${temp}-$(tr / - <<< "${subdir}")"
|
|
|
git fetch --no-tags "${repo}" "${branch}:${fetch}"
|
|
|
-git checkout "${fetch}"
|
|
|
-exec 420>&1
|
|
|
-result="$(git subtree split -P "${subdir}" -b "${split}" 2>&1 | tee /proc/self/fd/420)"
|
|
|
-if grep "is not an ancestor of commit" <<< "$result" > /dev/null; then
|
|
|
- echo "Resetting split branch..."
|
|
|
- git branch -D "${split}"
|
|
|
- git subtree split -P "${subdir}" -b "${split}"
|
|
|
+mkdir -p "${path}/.subtree-cache"
|
|
|
+cache="${path}/.subtree-cache/${split}"
|
|
|
+hash="$(git rev-parse ${fetch})"
|
|
|
+skip=false
|
|
|
+if [ -f "${cache}" ]; then
|
|
|
+ if [ "$(<${cache})" = "${hash}" ]; then
|
|
|
+ skip=true
|
|
|
+ fi
|
|
|
fi
|
|
|
-git checkout "${prev}"
|
|
|
-git subtree "${action}" -P "${path}" "${split}" -m "${action^} ${path} from ${repo}"
|
|
|
+if ! $skip; then
|
|
|
+ git checkout "${fetch}"
|
|
|
+ exec {capture}>&1
|
|
|
+ result="$(git subtree split -P "${subdir}" -b "${split}" 2>&1 | tee /proc/self/fd/$capture)"
|
|
|
+ if grep "is not an ancestor of commit" <<< "$result" > /dev/null; then
|
|
|
+ echo "Resetting split branch..."
|
|
|
+ git branch -D "${split}"
|
|
|
+ git subtree split -P "${subdir}" -b "${split}"
|
|
|
+ fi
|
|
|
+ git checkout "${prev}"
|
|
|
+ git subtree "${action}" -P "${path}" "${split}" -m "${action^} ${path} from ${repo}"
|
|
|
+fi
|
|
|
+echo "${hash}" > "${cache}"
|