Comment 23 for bug 239499

Revision history for this message
Robert Collins (lifeless) wrote : Re: [Bug 239499] Re: corrupt knit index on an old arch-imported bzr repo

Script to 'fix' the sha1's.

Note that if the deltas do not create a sensible inventory, then this
will just make things worse: do _not_ run it other than on a backup of
the repository.

import bzrlib.repository
from bzrlib import errors
from bzrlib.tsort import topo_sort
from bzrlib.versionedfile import FulltextContentFactory
r = bzrlib.repository.Repository.open('.')
r.lock_write()
r._backup_inventory()
new_inv = r._temp_inventories()
order = topo_sort(r.inventories.get_parent_map(r.inventories.keys()))
for key in order:
  try:
    record = r.inventories.get_record_stream([key], 'unordered',
True).next()
  except errors.SHA1KnitCorrupt, e:
    assert e.key == key
    record = FulltextContentFactory(record.key, record.parents, None,
''.join(e.content))
  new_inv.insert_record_stream([record])
r._activate_new_inventory()

After running this on a wget created copy of the repo, I get:

BzrCheckError: Internal check failed: Stored revisions missing from inventory
{Arch-1:<email address hidden>%guile-gnome-libglade--release--0--patch-2,Arch-1:<email address hidden>%guile-gnome-libglade--release--0--patch-1,Arch-1:<email address hidden>%guile-gnome-pkg--release--0--patch-12,Arch-1:<email address hidden>%guile-gnome-pkg--release--0--patch-10,Arch-1:<email address hidden>%guile-gnome-pkg--release--0--patch-11,Arch-1:<email address hidden>%guile-gnome-glib--release--0--base-0,Arch-1:<email address hidden>%guile-gnome-gtk--release--0--patch-8,Arch-1:<email address hidden>%guile-gnome-gtk--release--0--patch-9,Arch-1:<email address hidden>%guile-gnome-gtk--release--0--patch-2,Arch-1:<email address hidden>%guile-gnome-gtk--release--0--patch-3,Arch-1:<email address hidden>%guile-gnome-gtk--release--0--base-0,Arch-1:<email address hidden>%guile-gnome-gtk--release--0--patch-1,Arch-1:<email address hidden>%guile-gnome-gtk--release--0--patch-6,Arch-1:<email address hidden>%guile-gnome-gtk--release--0--patch-7,Arch-1:<email address hidden>%guile-gnome-gtk--release--0--patch-4,Arch-1:<email address hidden>%guile-gnome-gtk--release--0--patch-5,Arch-1:<email address hidden>%guile-gnome-gtk--release--0--patch-10,Arch-1:<email address hidden>%guile-gnome-gtk--release--0--patch-11,Arch-1:<email address hidden>%guile-gnome-glib--release--0--patch-7,Arch-1:<email address hidden>%guile-gnome-glib--release--0--patch-6,Arch-1:<email address hidden>%guile-gnome-glib--release--0--patch-5,Arch-1:<email address hidden>%guile-gnome-glib--release--0--patch-4,Arch-1:<email address hidden>%guile-gnome-glib--release--0--patch-3,Arch-1:<email address hidden>%guile-gnome-glib--release--0--patch-2,Arch-1:<email address hidden>%guile-gnome-glib--release--0--patch-1,Arch-1:<email address hidden>%guile-gnome-glib--release--0--patch-9,Arch-1:<email address hidden>%guile-gnome-glib--release--0--patch-8,Arch-1:<email address hidden>%guile-gnome-pkg--release--0--base-0,Arch-1:<email address hidden>%guile-gnome-libglade--release--0--base-0,Arch-1:<email address hidden>%guile-gnome-libgnomeui--release--0--base-0,Arch-1:<email address hidden>%guile-gnome-glib--release--0--patch-13,Arch-1:<email address hidden>%guile-gnome-glib--release--0--patch-12,Arch-1:<email address hidden>%guile-gnome-glib--release--0--patch-11,Arch-1:<email address hidden>%guile-gnome-glib--release--0--patch-10,Arch-1:<email address hidden>%guile-gnome-glib--release--0--patch-14,Arch-1:<email address hidden>%guile-gnome-pkg--release--0--patch-8,Arch-1:<email address hidden>%guile-gnome-pkg--release--0--patch-9,Arch-1:<email address hidden>%guile-gnome-libgnomeui--release--0--patch-1,Arch-1:<email address hidden>%guile-gnome-pkg--release--0--patch-4,Arch-1:<email address hidden>%guile-gnome-pkg--release--0--patch-5,Arch-1:<email address hidden>%guile-gnome-pkg--release--0--patch-6,Arch-1:<email address hidden>%guile-gnome-pkg--release--0--patch-7,Arch-1:<email address hidden>%guile-gnome-pkg--release--0--patch-1,Arch-1:<email address hidden>%guile-gnome-pkg--release--0--patch-2,Arch-1:<email address hidden>%guile-gnome-pkg--release--0--patch-3}

I'm looking into the cause/meaning of this now.

-Rob