rust-filepatterns: use bytes instead of String
In my initial patch, I introduced an unnecessary hard constraint on UTF-8
filenames and patterns which I forgot to remove. Although the performance
penalty for using String might be negligible, we don't want to break
compatibility with non-UTF-8 encodings for no reason.
Moreover, this change allows for a cleaner Rust core API.
This patch introduces a new utils module that is used with this fix.
Finally, PatternError was not put inside the Python module generated by
Rust, which would have raised a NameError.
Differential Revision: https://phab.mercurial-scm.org/D6485
$ hg init a
$ cd a
$ hg init b
$ echo x > b/x
Should print nothing:
$ hg add b
$ hg st
$ echo y > b/y
$ hg st
Should fail:
$ hg st b/x
abort: path 'b/x' is inside nested repo 'b'
[255]
$ hg add b/x
abort: path 'b/x' is inside nested repo 'b'
[255]
Should fail:
$ hg add b b/x
abort: path 'b/x' is inside nested repo 'b'
[255]
$ hg st
Should arguably print nothing:
$ hg st b
$ echo a > a
$ hg ci -Ama a
Should fail:
$ hg mv a b
abort: path 'b/a' is inside nested repo 'b'
[255]
$ hg st
$ cd ..