Re: getting list of objects for packing
From: Nicolas Pitre <hidden>
Date: 2016-06-15 22:45:33
On Fri, 31 Oct 2008, Brandon Casey wrote:
I'm trying to write a script that will repack large binary or compressed
objects into their own non-compressed, non-delta'ed pack file.
To make the decision about whether an object should go into this special
pack file or not, I want the output from 'git cat-file --batch-check'.
I get it with something similar to:
git rev-list --objects --all |
sed -e 's/^\([0-9a-f]\{40\}\).*/\1/' |
git cat-file --batch-check
First question: Is the rev-list call correct?yes.
-If I am understanding things right, then the list of objects produced by rev-list will be in the right order for piping to pack-objects. -The sed statement is stripping off anything after the sha1. Any way to get rev-list to print out just the sha1 so that sed is not necessary?
If you strip the data after the SHA1 when pipping into pack-objects then you'll have horrible delta compression results. The path names after each SHA1 is used to sort objects when trying to find best matches for delta compression. So you should preserve those and feed it back especially with those packs that you still want delta compression for.
ISSUE TWO:
I have placed these two packs into my own personal repo, and I have unpacked all
of the other objects so that they are loose.
I thought I could use a similar sequence of commands to pack those loose objects
into a normal and special pack. I added the --unpacked option to my rev-list
command, but it still lists many more objects than exist loosely in the repository.
git rev-list --objects --unpacked --all
The man page says:
--objects
Print the object IDs of any object referenced by the listed
commits. --objects foo ^bar thus means "send me all object IDs
which I need to download if I have the commit object bar, but
not foo".
--unpacked
Only useful with --objects; print the object IDs that are not
in packs.
Is this the correct behavior for rev-list --unpacked?Well, don't think so. Although I have zero unpacked objects in my git repository, the listing still gives me a hundred objects or so, and they all appear to be tag objects. There is probably a bug here. Nicolas