Releases/Firefox 2.0.0.20 MU/BuildNotes

From MozillaWiki
Jump to: navigation, search

Release Engineers

Nick Thomas

Bugs

bug 470521 - tracking bug
bug 472079 - nulls for partners

Generate Major Update Snippets

These are for the "vanilla" builds we're going to update.

# ssh cltbld@prometheus-vm.build.mozilla.org
mkdir -p /builds/2.0.0.20-major-update/snippets
cd /builds/2.0.0.20-major-update/snippets
cvs -d:ext:ffxbld@cvs.mozilla.org:/cvsroot co -r UPDATE_PACKAGING_R5 -d patcher mozilla/tools/patcher
cd patcher
cvs -d:ext:ffxbld@cvs.mozilla.org:/cvsroot co -r UPDATE_PACKAGING_R5 -d MozBuild mozilla/tools/release/MozBuild
cd ../
cvs -d:ext:ffxbld@cvs.mozilla.org:/cvsroot co -d patcher-configs mozilla/tools/patcher-configs

cd patcher
export CVSROOT=:ext:ffxbld@cvs.mozilla.org:/cvsroot

# build tools
./patcher2.pl --build-tools --app=firefox --tools-rev=UPDATE_PACKAGING_R5 --config=../patcher-configs/moz18-branch-major-update-patcher2.cfg 2>&1 | tee ../firefox_build-tools.log

# download mars
./patcher2.pl --download --app=firefox --config=../patcher-configs/moz18-branch-major-update-patcher2.cfg 2>&1 | tee ../firefox_download.log

# FIXME - patcher needs to see that the MARs that it thinks are partials
#             are there or else it will not attempt to generate patchinfo
cd temp/firefox
ln -s 3.0.5 2.0.0.20-3.0.5
cd ../..

# Create partial patches and snippets
./patcher2.pl --create-patches --app=firefox --config=../patcher-configs/moz18-branch-major-update-patcher2.cfg 2>&1 | tee ../firefox-create-patches.log

Separate out beta snippets

cd temp/firefox/2.0.0.20-3.0.5
rsync -a aus2/ aus2.beta/
find aus2.beta/ -type d -name "release" -exec rm -rfv {} \;
find aus2/ -type d -name "beta" -exec rm -rfv {} \; 

Quick verify

Check the snippets are identical for all four channels

# betatest == releasetest
find aus2.test -type d -iregex '.*betatest.*' | perl -nle '$a = $_; $a =~ s/betatest/releasetest/; system("diff -r -u $_ $a");'
# test the opposite direction to catch anything that only exists for releasetest
find aus2.test -type d -iregex '.*releasetest.*' | perl -nle '$a = $_; $a =~ s/releasetest/betatest/; system("diff -r -u $_ $a");'

# betatest == beta
find aus2.test -type d -iregex '.*betatest.*' | perl -nle '$a = $_; $a =~ s/betatest/beta/; $a =~ s/aus2\.test/aus2.beta/; system("diff -r -u $_ $a");'
find aus2.beta -type d -iregex '.*/beta$' | perl -nle '$a = $_; $a =~ s/beta$/betatest/; $a =~ s/aus2\.beta/aus2.test/; system("diff -r -u $_ $a");'

# betatest == release
find aus2.test -type d -iregex '.*betatest.*' | perl -nle '$a = $_; $a =~ s/betatest/release/; $a =~ s/aus2\.test/aus2/; system("diff -r -u $_ $a");'
find aus2 -type d -iregex '.*/release$' | perl -nle '$a = $_; $a =~ s/release$/betatest/; $a =~ s/aus2/aus2.test/; system("diff -r -u $_ $a");'

Got no output for each test.

Push to AUS

cd /builds/2.0.0.20-major-update/snippets/patcher/temp/firefox/2.0.0.20-3.0.5
rsync -e 'ssh -i /home/cltbld/.ssh/aus' -av aus2/ cltbld@aus2-staging.mozilla.org:/opt/aus2/snippets/staging/20081219-Firefox-2.0.0.20-3.0.5-MU
rsync -e 'ssh -i /home/cltbld/.ssh/aus' -av aus2.beta/ cltbld@aus2-staging.mozilla.org:/opt/aus2/snippets/staging/20081219-Firefox-2.0.0.20-3.0.5-MU-beta
rsync -e 'ssh -i /home/cltbld/.ssh/aus' -av aus2.test/ cltbld@aus2-staging.mozilla.org:/opt/aus2/snippets/staging/20081219-Firefox-2.0.0.20-3.0.5-MU-test

Enable test snippets

Safe to do this without doing null snippets because we're only talking about betatest and releasetest, where no end-users of partner builds will be falling back to (metrics website confirms).

~/bin/backupsnip 20081219-Firefox-2.0.0.20-3.0.5-MU-test
~/bin/pushsnip 20081219-Firefox-2.0.0.20-3.0.5-MU-test

Update verify

Ran update verify on fx-{linux,mac,win32}-1.9-slave2 as follows:

mkdir -p /builds/verify/firefox-20020-305-real-major/
cd /builds/verify/firefox-20020-305-real-major/
cvs -d cltbld@cvs.mozilla.org:/cvsroot co -d updates mozilla/testing/release/updates/
cvs -d cltbld@cvs.mozilla.org:/cvsroot co -d common mozilla/testing/release/common/

# get patch to trawl "Only in" directories
cd common
# on mac & linux
curl -s https://bugzilla.mozilla.org/attachment.cgi?id=304252 | patch -p0
# on win32
wget --no-check-certificate -O patch https://bugzilla.mozilla.org/attachment.cgi?id=304252
patch -p0 < patch

# everyone ...
platform=linux   # or mac or win32
cd ../updates
./verify.sh -c moz18-firefox-$platform-major.cfg 2>&1 | tee $platform.log

Logs look fine. Each platform has some standard differences, here's Linux

diff -r source/firefox/defaults/pref/channel-prefs.js target/firefox/defaults/pref/channel-prefs.js
1c1
< //@line 2 "/builds/tinderbox/Fx-Mozilla1.8-release/Linux_2.4.21-53.EL_Depend/mozilla/browser/app/profile/channel-prefs.js"
---
> //@line 2 "/builds/tinderbox/Fx-Mozilla1.9-Release/Linux_2.6.18-53.1.13.el5_Depend/mozilla/browser/app/profile/channel-prefs.js"
Only in source/firefox/extensions: inspector@mozilla.org
Only in source/firefox/extensions: talkback@mozilla.org
Contents of source/firefox/extensions/inspector@mozilla.org dir only in source or target
444790    4 drwxr-xr-x   2 cltbld   cltbld       4096 Dec 20 00:27 source/firefox/extensions/inspector@mozilla.org/components
444880    4 drwxr-xr-x   3 cltbld   cltbld       4096 Dec 17 10:13 source/firefox/extensions/inspector@mozilla.org/defaults
444881    4 drwxr-xr-x   2 cltbld   cltbld       4096 Dec 20 00:27 source/firefox/extensions/inspector@mozilla.org/defaults/preferences
444877    4 drwxr-xr-x   2 cltbld   cltbld       4096 Dec 20 00:27 source/firefox/extensions/inspector@mozilla.org/chrome
Contents of source/firefox/extensions/talkback@mozilla.org dir only in source or target
444886    4 drwxr-xr-x   3 cltbld   cltbld       4096 Dec 20 00:27 source/firefox/extensions/talkback@mozilla.org/components
444889    4 drwxr-xr-x   2 cltbld   cltbld       4096 Dec 20 00:27 source/firefox/extensions/talkback@mozilla.org/components/talkback
WARN: non-binary files found in diff
WARN: check_updates returned warning for Linux_x86-gcc3 downloads/firefox-2.0.0.20.tar.gz vs. downloads/firefox-3.0.5.tar.bz2: 2
  • The channel-prefs.js is a harmless comment change due the path on the build machine changing and us exlicitly not including that file in the complete mar
  • extensions/{inspector@mozilla.org,talkback@mozilla.org} are trees of empty dirs. We've removed all the files but the updater can't remove dirs (for safety), no problem because the Addons manager does that for us
  • Some locales also give messages like (eg be), due to them removing those plugins from the 3.0 build but we can't remove them for only some locales. Better user experience if the stuff you use is not vanished anyway
Only in source/firefox/searchplugins: amazondotcom.xml
Only in source/firefox/searchplugins: answers.xml
Only in source/firefox/searchplugins: creativecommons.xml
Only in source/firefox/searchplugins: eBay.xml

Mac

diff -r source/Firefox.app/Contents/MacOS/defaults/pref/channel-prefs.js target/Firefox.app/Contents/MacOS/defaults/pref/channel-prefs.js
1c1
< //@line 2 "/builds/tinderbox/Fx-Mozilla1.8-release/Darwin_8.7.0_Depend/mozilla/browser/app/profile/channel-prefs.js"
---
> //@line 2 "/builds/tinderbox/Fx-Mozilla1.9-Release/Darwin_8.8.4_Depend/mozilla/browser/app/profile/channel-prefs.js"
Only in source/Firefox.app/Contents/MacOS/extensions: inspector@mozilla.org
Only in source/Firefox.app/Contents/MacOS/extensions: talkback@mozilla.org
Only in source/Firefox.app/Contents/MacOS: init.d
Only in source/Firefox.app/Contents/MacOS: updates
Contents of source/Firefox.app/Contents/MacOS/extensions/inspector@mozilla.org dir only in source or target
1169542621    0 drwxr-xr-x    2 cltbld   cltbld         68 Dec 20 00:28 source/Firefox.app/Contents/MacOS/extensions/inspector@mozilla.org/chrome
1169542622    0 drwxr-xr-x    2 cltbld   cltbld         68 Dec 20 00:28 source/Firefox.app/Contents/MacOS/extensions/inspector@mozilla.org/components
1169542624    0 drwxr-xr-x    3 cltbld   cltbld        102 Dec 17 11:32 source/Firefox.app/Contents/MacOS/extensions/inspector@mozilla.org/defaults
1169542625    0 drwxr-xr-x    2 cltbld   cltbld         68 Dec 20 00:28 source/Firefox.app/Contents/MacOS/extensions/inspector@mozilla.org/defaults/preferences
Contents of source/Firefox.app/Contents/MacOS/extensions/talkback@mozilla.org dir only in source or target
1169542627    0 drwxr-xr-x    3 cltbld   cltbld        102 Dec 20 00:28 source/Firefox.app/Contents/MacOS/extensions/talkback@mozilla.org/components
1169542628    0 drwxr-xr-x    3 cltbld   cltbld        102 Dec 20 00:28 source/Firefox.app/Contents/MacOS/extensions/talkback@mozilla.org/components/talkback
1169542629    0 drwxr-xr-x    3 cltbld   cltbld        102 Dec 17 11:32 source/Firefox.app/Contents/MacOS/extensions/talkback@mozilla.org/components/talkback/Talkback.app
1169542630    0 drwxr-xr-x    4 cltbld   cltbld        136 Dec 20 00:28 source/Firefox.app/Contents/MacOS/extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents
1169542631    0 drwxr-xr-x    2 cltbld   cltbld         68 Dec 20 00:28 source/Firefox.app/Contents/MacOS/extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/MacOS
1169542632    0 drwxr-xr-x    3 cltbld   cltbld        102 Dec 20 00:28 source/Firefox.app/Contents/MacOS/extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources
1169542633    0 drwxr-xr-x    7 cltbld   cltbld        238 Dec 20 00:28 source/Firefox.app/Contents/MacOS/extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj
1169542634    0 drwxr-xr-x    2 cltbld   cltbld         68 Dec 20 00:28 source/Firefox.app/Contents/MacOS/extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/ArchivingSettings.nib
1169542635    0 drwxr-xr-x    2 cltbld   cltbld         68 Dec 20 00:28 source/Firefox.app/Contents/MacOS/extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/IntroWizard.nib
1169542636    0 drwxr-xr-x    2 cltbld   cltbld         68 Dec 20 00:28 source/Firefox.app/Contents/MacOS/extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/MainMenu.nib
1169542637    0 drwxr-xr-x    2 cltbld   cltbld         68 Dec 20 00:28 source/Firefox.app/Contents/MacOS/extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/ProxySettings.nib
1169542638    0 drwxr-xr-x    2 cltbld   cltbld         68 Dec 20 00:28 source/Firefox.app/Contents/MacOS/extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/SendingSettings.nib
Contents of source/Firefox.app/Contents/MacOS/init.d dir only in source or target
Contents of source/Firefox.app/Contents/MacOS/updates dir only in source or target
1169542674    0 drwxr-xr-x    2 cltbld   cltbld         68 Dec 17 11:32 source/Firefox.app/Contents/MacOS/updates/0
WARN: non-binary files found in diff
WARN: check_updates returned warning for Darwin_Universal-gcc3 downloads/Firefox 2.0.0.20.dmg vs. downloads/Firefox 3.0.5.dmg: 2
  • the same again, there are more dirs for talkback (.nib)
  • empty init.d dir can't be removed but is harmless
  • updates dir is from testing method I think

Win32

Only in source/bin: .autoreg
diff -r source/bin/defaults/pref/channel-prefs.js target/bin/defaults/pref/channel-prefs.js
1c1
< //@line 2 "/cygdrive/c/builds/tinderbox/Fx-Mozilla1.8-Release/WINNT_5.2_Depend/mozilla/browser/app/profile/channel-prefs.js"
---
> //@line 2 "e:\fx19rel\WINNT_5.2_Depend\mozilla\browser\app\profile\channel-prefs.js"
Only in source/bin/extensions: inspector@mozilla.org
Only in source/bin/extensions: talkback@mozilla.org
Binary files source/bin/freebl3.chk and target/bin/freebl3.chk differ
Only in source/bin: removed-files
Binary files source/bin/softokn3.chk and target/bin/softokn3.chk differ
Contents of source/bin/extensions/inspector@mozilla.org dir only in source or target
29197205    0 drwxr-xr-x   3 cltbld   Administ        0 Dec 20 00:26 source/bin/extensions/inspector@mozilla.org/chrome
26706838    0 drwxr-xr-x   3 cltbld   Administ        0 Dec 20 00:26 source/bin/extensions/inspector@mozilla.org/chrome/icons
28803991    0 drwxr-xr-x   2 cltbld   Administ        0 Dec 20 00:26 source/bin/extensions/inspector@mozilla.org/chrome/icons/default
30114715    0 drwxr-xr-x   2 cltbld   Administ        0 Dec 20 00:26 source/bin/extensions/inspector@mozilla.org/components
22315933    0 drwxr-xr-x   3 cltbld   Administ        0 Dec 20 00:26 source/bin/extensions/inspector@mozilla.org/defaults
24282014    0 drwxr-xr-x   2 cltbld   Administ        0 Dec 20 00:26 source/bin/extensions/inspector@mozilla.org/defaults/preferences
Contents of source/bin/extensions/talkback@mozilla.org dir only in source or target
28738467    0 drwxr-xr-x   2 cltbld   Administ        0 Dec 20 00:26 source/bin/extensions/talkback@mozilla.org/components
FAIL: binary files found in diff
FAIL: check_updates returned failure for WINNT_x86-msvc downloads/Firefox Setup 2.0.0.20.exe vs. downloads/Firefox Setup 3.0.5.exe: 1
  • .autoreg is normal difference when updating (required?)
  • freebl3.chk and softoke3.chk diff is ok, still valid check files bug 404340
  • removed-files is for the regeneration of uninstall logs (IIRC)

Announced to r-d

Enable beta snippets

Safe to do this without doing null snippets because there are no end-users of partner builds on beta channel (kev and metrics website confirmed last MU).

cd /opt/aus2/snippets/staging
time ~/bin/backupsnip 20081219-Firefox-2.0.0.20-3.0.5-MU-beta
real    33m56.918s
user    0m26.862s
sys     0m31.210s
time ~/bin/pushsnip 20081219-Firefox-2.0.0.20-3.0.5-MU-beta
real    0m24.086s
user    0m0.006s
sys     0m0.383s

Generate Null Partner Snippets

Create snippets

Starting from attachment 355355, we create empty snippets to block partner builds from updating.

# ssh cltbld@prometheus-vm.build.mozilla.org
cd /builds/2.0.0.20-major-update/snippets/patcher/
# get a copy of https://bugzilla.mozilla.org/attachment.cgi?id=355355 ...
#    and save as partner-update-channels
# checkout out null_partners.sh and update versions and buildIDs
cd temp/firefox/2.0.0.20-3.0.5
bash ../../../one-offs/null_partners.sh ../../../partner-update-channels

NB: going to do the release-* and releasetest-* snippets this time, since there are no users on beta or betatest. releasetest-* will be used to check the nulls work properly.

We have to munge the Yahoo snippets because more than distribution is on the same channel but not all have a MU live at present

rm -vr aus2.null/Firefox/2.0.0.20/WINNT_x86-msvc/2008121709/{ko,zh-CN,zh-TW,en-US}/release*-cck-yahoo

Now check there are no vanilla snippets in there [no extended regexp in find :-(]

find aus2.null -regex '.*/release/.*'
find aus2.null -regex '.*/releasetest/.*'
find aus2.null -regex '.*/beta/.*'
find aus2.null -regex '.*/betatest/.*'

and that releasetest == release

find aus2.null -type d -iregex '.*release-.*' | perl -nle '$a = $_; $a =~ s/release/releasetest/; system("diff -r -u $_ $a");'
find aus2.null -type d -iregex '.*releasetest-.*' | perl -nle '$a = $_; $a =~ s/releasetest/release/; system("diff -r -u $_ $a");'

Push to AUS server

rsync -e 'ssh -i /home/cltbld/.ssh/aus' -av aus2.null/ cltbld@aus2-staging.mozilla.org:/opt/aus2/snippets/staging/20090104-Firefox-2.0.0.20-3.0.5-MU-partner-null

Push live

# cltbld@aus2-staging
~/bin/backupsnip 20090104-Firefox-2.0.0.20-3.0.5-MU-partner-null
~/bin/pushsnip 20090104-Firefox-2.0.0.20-3.0.5-MU-partner-null

Adds 23904 files to the 78718 already present, so there will be a ~ 30% time increase for future backups. We can remove the releasetest blocks later to save half of this.

Verify nulls

Create a list of URLs to test

cd /builds/2.0.0.20-major-update/snippets/patcher/one-offs

Generate platform-specific locale lists

ls ../temp/firefox/2.0.0.20-3.0.5/aus2/Firefox/2.0.0.20/WINNT_x86-msvc/2008121709/ > locales-win32.txt
ls ../temp/firefox/2.0.0.20-3.0.5/aus2/Firefox/2.0.0.20/Darwin_Universal-gcc3/2008121709/ > locales-mac.txt
ls ../temp/firefox/2.0.0.20-3.0.5/aus2/Firefox/2.0.0.20/Linux_x86-gcc3/2008121709/ > locales-linux.txt

Update the version & BuildID in create_aus_urls-{linux,mac,win32}.sh, then

ln -s ../partner-update-channels
./create_aus_urls-linux.sh
./create_aus_urls-mac.sh
./create_aus_urls-win32.sh

Run tests for win32

./test_null_updates.sh urls-win32.txt 2>&1 | tee test-nulls-win32.txt
grep -v '^PASS' test-nulls-win32.txt
FAIL https://aus2.mozilla.org/update/1/Firefox/2.0.0.20/2008121709/WINNT_x86-msvc/en-US/releasetest-cck-yahoo/update.xml
FAIL https://aus2.mozilla.org/update/1/Firefox/2.0.0.20/2008121709/WINNT_x86-msvc/ko/releasetest-cck-yahoo/update.xml
FAIL https://aus2.mozilla.org/update/1/Firefox/2.0.0.20/2008121709/WINNT_x86-msvc/zh-CN/releasetest-cck-yahoo/update.xml
FAIL https://aus2.mozilla.org/update/1/Firefox/2.0.0.20/2008121709/WINNT_x86-msvc/zh-TW/releasetest-cck-yahoo/update.xml

Which is expected, those MU are live and therefore non-null info returned. Repeat for each other two platforms, get no failures.

Checked in null_partners.sh, create_aus_urls-{linux,mac,win32}.sh

Add Slovenian locale

While doing checks, discovered that si and sl had been omitted from the list of locales for 3.0.5, and that we weren't verifying en-US was updating properly. Fix is attachment 355863 [edit].

Generate sl snippets

# cltbld@promethus-vm
cd /builds/2.0.0.20-major-update/snippets/patcher-configs/
cvs up moz18-branch-major-update-patcher2.cfg
cd ../patcher/
./patcher2.pl --download --app=firefox --config=../patcher-configs/moz18-branch-major-update-patcher2.cfg 2>&1 | tee ../firefox_download2.log
# si and sl were downloaded for 3.0.5

cd temp/firefox/2.0.0.20-3.0.5
mkdir bak
rsync -a aus2 bak/ && rsync -a aus2.beta bak/ && rsync -a aus2.test bak/
cd /builds/2.0.0.20-major-update/snippets/patcher
./patcher2.pl --create-patches --app=firefox --config=../patcher-configs/moz18-branch-major-update-patcher2.cfg 2>&1 | tee ../firefox-create-patches.log
# all snippets were regenerated
 
cd temp/firefox/2.0.0.20-3.0.5
rsync -a aus2/ aus2.beta/
find aus2.beta/ -type d -name "release" -exec rm -rfv {} \;
find aus2/ -type d -name "beta" -exec rm -rfv {} \; 
diff -ru bak/aus2/ aus2/
Only in aus2/Firefox/2.0.0.20/Darwin_Universal-gcc3/2008121709: sl
Only in aus2/Firefox/2.0.0.20/Linux_x86-gcc3/2008121709: sl
Only in aus2/Firefox/2.0.0.20/WINNT_x86-msvc/2008121709: sl

diff -ru bak/aus2.beta/ aus2.beta/ 
Only in aus2.beta/Firefox/2.0.0.20/Darwin_Universal-gcc3/2008121709: sl
Only in aus2.beta/Firefox/2.0.0.20/Linux_x86-gcc3/2008121709: sl
Only in aus2.beta/Firefox/2.0.0.20/WINNT_x86-msvc/2008121709: sl

diff -ru bak/aus2.test/ aus2.test/ 
Only in aus2.test/Firefox/2.0.0.20/Darwin_Universal-gcc3/2008121709: sl
Only in aus2.test/Firefox/2.0.0.20/Linux_x86-gcc3/2008121709: sl
Only in aus2.test/Firefox/2.0.0.20/WINNT_x86-msvc/2008121709: sl

and those dirs in turn contain the right channels.

Push over to AUS (verified first with -n that only new files were sl; NB use of -rc and not -a)

rsync -rc -e 'ssh -i /home/cltbld/.ssh/aus' -v aus2/ cltbld@aus2-staging.mozilla.org:/opt/aus2/snippets/staging/20081219-Firefox-2.0.0.20-3.0.5-MU
rsync -rc -e 'ssh -i /home/cltbld/.ssh/aus' -v aus2.beta/ cltbld@aus2-staging.mozilla.org:/opt/aus2/snippets/staging/20081219-Firefox-2.0.0.20-3.0.5-MU-beta
rsync -rc -e 'ssh -i /home/cltbld/.ssh/aus' -v aus2.test/ cltbld@aus2-staging.mozilla.org:/opt/aus2/snippets/staging/20081219-Firefox-2.0.0.20-3.0.5-MU-test

Made a ~/bin/pushsnip-test which -n's the rsync, and check what is pushed. Then

~/bin/pushsnip 20081219-Firefox-2.0.0.20-3.0.5-MU-test

Update verify

Much the same as before (ie same hosts & setup).

cd /builds/verify/firefox-20020-305-real-major/updates
cvs up

platform=linux   # or mac or win32
cat moz18-firefox-$platform-major.cfg | \
  sed -e 's/locales=".*zh-TW"/locales="en-US sl"/' > temp.cfg
./verify.sh -c temp.cfg 2>&1 | tee $platform-2.log

which gave the same results as for the earlier check, so go ahead and push sl to beta

~/bin/pushsnip 20081219-Firefox-2.0.0.20-3.0.5-MU-beta

Enable release snippets

# cltbld@aus2-staging
date; time ~/bin/backupsnip 20081219-Firefox-2.0.0.20-3.0.5-MU
real    38m0.262s
user    0m38.100s
sys     0m58.012s

time ~/bin/pushsnip 20081219-Firefox-2.0.0.20-3.0.5-MU
real    0m8.010s
user    0m0.024s
sys     0m0.557s

DONE TO HERE

Remove nulls

If we should ship a Firefox 2.0.0.21 then we should remove the nulls.