I've actually rebased this one so Petr doesn't have to deal with the silly conflicts. It also turns out that my repo got fsck'd in one of the last updates, and cg-merge was seriously broken. I guess did an update in the middle of the transition between positional parameters and named parameters, and got stuck.
Actual commit message follows. ---
+ will check tagrefs, trying to ensure it actually has the relevant commits. If the commits are missing, it'll go out and fetch them. + if the tagref points to a blob and we have it, it'll skip it
This isn't a complete solution for cg-fetch -- git-fetch is actually much smarter now, and cg-fetch should perhaps be a thin wrapper around it, dropping all the duplicate code.
This version uses ^0 instead of ^{commit} which does a more thorough check, so we don't need to call git-cat-file.
---
cg-fetch | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)
applies-to: e6fab694ece986de77f6e17c16df9f17276c6666 e2cf1ab9b594d3d12655dd93377dfea03247379e
Show changes to cg-fetch +2 −1
diff --git a/cg-fetch b/cg-fetch index b004ab3..f0c11aa 100755 --- a/cg-fetch +++ b/cg-fetch @@ -377,7 +377,8 @@ $get -i -s -u -d "$uri/refs/tags" "$_git for tag in *; do [ "$tag" = "*" ] && break tagid="$(cat "$tag")" - GIT_DIR=../.. git-cat-file -t "$tagid" >/dev/null 2>&1 && continue + GIT_DIR=../.. git-rev-parse --verify "$tag"^0 2>/dev/null >> /dev/null && continue + GIT_DIR=../.. git-cat-file blob `git-rev-parse --verify "$tag"^{blob} 2>/dev/null` 2>/dev/null >> /dev/null && continue echo -n "Missing object of tag $tag... " if [ "$fetch" != "fetch_rsync" ] && GIT_DIR=../.. $fetch "$tagid" "$uri" 2>/dev/null >&2; then echo "retrieved" --- 0.99.8.GIT