Excess data size for a single revision
John Arbash Meinel
john at arbash-meinel.com
Mon Jan 23 11:22:37 UTC 2012
-----BEGIN PGP SIGNED MESSAGE-----
> The pack is this:
> -rw-rw-rw- 1 eliz eliz 28040427 Jan 19 06:35
> I verified (by looking at .bzr.log) that there was no repacking
> since then.
So 28MB vs the ~58MB you said it downloaded. I can certainly come up
with a scenario where this could happen. Namely:
I believe the emacs main repository has a lot of people committing
directly to the repository, so you probably get a fair number of
single commit pack files. Which coupled with bug #402669, means that
all of those single-commits have the fulltext of all the texts
present, and that gets transmitted. Then when you receive the 35
revisions locally, you can combine any files that were changed
>> 2) Use the name of that file to then inspect the associated
>> index files (tix = text content, rix = revision, cix = inventory
>> stuff, iix/six are probably not very interesting). For example,
>> my most recent file in bzr is:
>> You can use
>> head -n5
>> To get the summary information, and you can this to get the
>> bzr dump-btree [--raw]
>> Note that it will probably be a bit verbose, but if you look
>> around in it, you can see how many files are affected, etc. In my
>> case, a 2.7MB bzr pack file had 1712 entries in the .tix (1700
>> files were affected), 549 entries in .rix (549 total revisions),
>> and 2,159 entries in .cix (which has to do with inventory
>> With the raw data, you can start working out what the size on
>> disk actually comprises of.
> What am I looking for, though? E.g., the .rix index corresponding
> to the above pack has 35 revisions, while the corresponding .tix
> file has 4088 texts. Is the latter unusually large?
Averaged across a lot of histories (bzr, mysql, linux kernel, emacs I
think), a good heuristic is <10 texts changed per commit. Above is
averaging 100 texts changed per commit, or about 10x normal. So yes,
it is larger than expected.
repo # texts # revs t/r
bzr 172249 63446 2.7
emacs 264859 118524 2.2
mysql 388608 74779 5.2
Now that is averaged over a lot of history, and development workflow
impacts this a lot. Merges, in particular, can swing it high or low.
In the case of MySQL, they tend to do a lot more merges that touch the
same files, so a merge creates one commit that touches lots of files.
While bzr tends to do merges that are orthogonal, so the actual merge
commit doesn't introduce new content, so the merge looks more like a
commit that doesn't change much.
>> 3) If you want to test the fetch again, you can create a new
>> repository, and branch your old revision into it (so it shouldn't
>> copy any new data) and then do the fetch again. So something
>> bzr branch -r 106888 . ../../somewhere-not-in-the-shared-repo
>> --no-tree cd ../../somewhere-not-in-the-shared-repo bzr pull
>> bzr+ssh://firstname.lastname@example.org/emacs/trunk -Dhpss
> Will do, thanks.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Cygwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
-----END PGP SIGNATURE-----
More information about the bazaar