On 10/21/2016 03:17 PM, Eric Blake wrote:
> At any rate, I'll post the commands I used to make the conversion, once
> it is complete; here's my starting point.
> 
> $ git fsck 2>&1 | sed -n 's/error in tag \([^:]*\).*/\1/p' > broken

Here's the final steps I used; the findutils.git repository is now
clean, using a script graciously provided by Kyle J. McKay, where the
attached file 'broken' is the list of tags that I fixed:

$ # get the cleanup script
$ wget
https://gist.githubusercontent.com/mackyle/9ea081513f6b90bb4470b7b2bc6e4bce/raw/7f1814a5b9823278852731e7f13e717937dffec2/export-fixed-tags
$ chmod +x export-fixed-tags
$ # create fresh clone, so none of my local tags get pushed
$ git clone git://git.sv.gnu.org/findutils.git findutils-cleanup
$ cd findutils-cleanup
$ # fix up the repository, creating a backdated tag for every broken tag
$ ../export-fixed-tags | git fast-import
processing invalid tag refs/tags/FINDUTILS-4_1-10
...
skipping OK tag refs/tags/v4.6.0 (v4.6.0)
git-fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:       5000
Total objects:           97 (         0 duplicates                  )
...
$ # 97 tags were replaced; grab their names into 'broken'
$ git push -n --tags 2>&1 | \
  sed -n 's/.* \([a-zA-Z0-9_-]*\) .already.*/\1/p' > broken
$ # delete the old tags, then push the fixed ones
$ git push origin $(sed s/^/:/ broken)
$ git push --tags


If you have previously checked out the repository, you will NOT get the
updated tags unless you FIRST delete all the broken tags you have
previously downloaded.  If you want to clean things up locally, you can
use the following steps:

$ git tag -d $(cat broken)
$ git fetch origin --tags

You can then use git prune to remove the now-dangling broken tags.

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org
FINDUTILS-4_1-10
FINDUTILS-4_1-11
FINDUTILS-4_1-4
FINDUTILS-4_1-5
FINDUTILS-4_1-6
FINDUTILS-4_1-7
FINDUTILS-4_1-8
FINDUTILS-4_1-9
FINDUTILS_4_1
FINDUTILS_4_1-12
FINDUTILS_4_1-13
FINDUTILS_4_1-14
FINDUTILS_4_1-15
FINDUTILS_4_1-16
FINDUTILS_4_1-17
FINDUTILS_4_1-18
FINDUTILS_4_1-19
FINDUTILS_4_1-20
FINDUTILS_4_1-21
FINDUTILS_4_1-22
FINDUTILS_4_1-23
FINDUTILS_4_1-24
FINDUTILS_4_1-25
FINDUTILS_4_1-26
FINDUTILS_4_1-27
FINDUTILS_4_1-28
FINDUTILS_4_1-29
FINDUTILS_4_1-30
FINDUTILS_4_1-31
FINDUTILS_4_1-32
FINDUTILS_4_1-33
FINDUTILS_4_1-34
FINDUTILS_4_1-35
FINDUTILS_4_1-36
FINDUTILS_4_1-37
FINDUTILS_4_1-40
FINDUTILS_4_1_2
FINDUTILS_4_1_20-1
FINDUTILS_4_1_3
FINDUTILS_4_1_6
FINDUTILS_4_1_6-1
FINDUTILS_4_1_6-2
FINDUTILS_4_1_7
FINDUTILS_4_1_7-1
FINDUTILS_4_1_7-2
FINDUTILS_4_2_0-1
FINDUTILS_4_2_1-1
FINDUTILS_4_2_10-1
FINDUTILS_4_2_11-1
FINDUTILS_4_2_12-1
FINDUTILS_4_2_13-1
FINDUTILS_4_2_14-1
FINDUTILS_4_2_15-1
FINDUTILS_4_2_16-1
FINDUTILS_4_2_17-1
FINDUTILS_4_2_18-1
FINDUTILS_4_2_19-1
FINDUTILS_4_2_20-1
FINDUTILS_4_2_21-1
FINDUTILS_4_2_22-1
FINDUTILS_4_2_23-1
FINDUTILS_4_2_24-1
FINDUTILS_4_2_25-1
FINDUTILS_4_2_26-1
FINDUTILS_4_2_27-1
FINDUTILS_4_2_28-1
FINDUTILS_4_2_29-1
FINDUTILS_4_2_3-1
FINDUTILS_4_2_30-1
FINDUTILS_4_2_31-1
FINDUTILS_4_2_32-1
FINDUTILS_4_2_33-1
FINDUTILS_4_2_4-1
FINDUTILS_4_2_5-1
FINDUTILS_4_2_6-1
FINDUTILS_4_2_7-1
FINDUTILS_4_2_8-1
FINDUTILS_4_2_9-1
FINDUTILS_4_3_0-1
FINDUTILS_4_3_1-1
FINDUTILS_4_3_10-1
FINDUTILS_4_3_11-1
FINDUTILS_4_3_12-1
FINDUTILS_4_3_13-1
FINDUTILS_4_3_2-1
FINDUTILS_4_3_3-1
FINDUTILS_4_3_4-1
FINDUTILS_4_3_5-1
FINDUTILS_4_3_6-1
FINDUTILS_4_3_7-1
FINDUTILS_4_3_8-1
FINDUTILS_4_3_9-1
before_fts_conversion
compat_gnulib_2006-07-09
fts-last-merge-from-trunk
rel-4-2-fixes-last-merge-to-trunk
trunk-before-jy-4_1_20-merge

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to