git am rewrites the index 2-3x per patch. In Chromium (~500K files,
70MB index) this dominated wall time: ~67 of 73 seconds were spent
rehashing and rewriting the index ~300 times for 150 patches.
- Add index.skipHash=true to skip recomputing the trailing SHA over
the full index on every write
- Force index v4 before am so path-prefix compression roughly halves
the on-disk index size (70MB -> 40MB)
- Disable core.fsync and gc.auto during am since a crashed apply is
just re-run from a clean reset
- Apply patch targets in parallel (capped at ncpu-2); Chromium still
dominates but this hides node/nan/etc behind it. Falls back to
sequential on roller/ branches where conflict output needs to be
readable.
- Prefix each output line with the target name so parallel output is
attributable
Measured on a 13-target config with 238 total patches: 73s -> 28s.
* build: make patches/config.json an array of objects
This file was previously an object of patch_dir keys to repo values;
Now is an array of objects containing `patch_dir` and `repo` properties.
This makes other per-target properties (e.g. `grep`) possible.
* build: include Note metadata when exporting patches
* build: support keyword filtering in export_patches()
* build: add optional `--grep` arg to git-export-patches script
* build: update export_all_patches to understand new config file
* fixup! build: update export_all_patches to understand new config file
chore: make lint happy
* fixup! build: make patches/config.json an array of objects
chore: fix oops
* refactor: remove support for the old file format
There is more code using config.json than I thought, so the
effort-to-reward of supporting the old format is not worth it.
* build: update apply_all_patches to understand new config file
* build: update lint.js to understand new config file
* build: update patches-mtime-cache.py to understand new config file
* fixup! build: update apply_all_patches to understand new config file
fix: oops
* fixup! build: update apply_all_patches to understand new config file
fix minor syntax wart
* fixup! build: support keyword filtering in export_patches()
refactor: use idiomatic python
* refactor: warn if config.json has an invalid repo