graphlog: apply file filters --patch/--stat output
When passing --patch/--stat, file filters have to be applied to generate the
correct diff or stat output:
- Without --follow, the static match object can be reused
- With --follow, the files displayed at revision X are the ancestors of
selected files at parent revision. To do this, we reproduce the ancestry
calculations done by --follow, lazily.
test-glog.t changes show that --patch output is not satisfying because renames
are reported as copies. This can probably be fixed by:
- Without --follow: compute files to display, look for renames sources and
extend the matcher to include them.
- With --follow: detect .path() transitions between parent/child filectx,
filter them using the linked changectx .removed() field and extend fcache
with them.
$ hg init base
$ cd base
$ echo 'alpha' > alpha
$ hg ci -A -m 'add alpha'
adding alpha
$ cd ..
$ hg clone base work
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd work
$ echo 'beta' > beta
$ hg ci -A -m 'add beta'
adding beta
$ cd ..
$ cd base
$ echo 'gamma' > gamma
$ hg ci -A -m 'add gamma'
adding gamma
$ cd ..
$ cd work
$ hg pull -q
$ hg merge
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
Update --clean to revision 1 to simulate a failed merge:
$ rm alpha beta gamma
$ hg update --clean 1
2 files updated, 0 files merged, 0 files removed, 0 files unresolved