bundle2: support for bundling and unbundling payload
We add the ability to bundle and unbundle a payload in parts. The payload is the
actual binary data of the part. It is used to convey all the applicative data.
For now we stick to very simple implementation with all the data fit in single
chunk. This open the door to some bundle2 testing usage. This will be improved before
bundle2 get used for real. We need to be able to stream the payload in multiple
part to exchange any changegroup efficiently. This simple version will do for
now.
Bundling and unbundling are done in the same changeset because the test for
parts is less modular. However, the result is not too complex.
$ hg init
Issue562: .hgignore requires newline at end:
$ touch foo
$ touch bar
$ touch baz
$ cat > makeignore.py <<EOF
> f = open(".hgignore", "w")
> f.write("ignore\n")
> f.write("foo\n")
> # No EOL here
> f.write("bar")
> f.close()
> EOF
$ python makeignore.py
Should display baz only:
$ hg status
? baz
$ rm foo bar baz .hgignore makeignore.py
$ touch a.o
$ touch a.c
$ touch syntax
$ mkdir dir
$ touch dir/a.o
$ touch dir/b.o
$ touch dir/c.o
$ hg add dir/a.o
$ hg commit -m 0
$ hg add dir/b.o
$ hg status
A dir/b.o
? a.c
? a.o
? dir/c.o
? syntax
$ echo "*.o" > .hgignore
$ hg status
abort: $TESTTMP/.hgignore: invalid pattern (relre): *.o (glob)
[255]
$ echo ".*\.o" > .hgignore
$ hg status
A dir/b.o
? .hgignore
? a.c
? syntax
Check it does not ignore the current directory '.':
$ echo "^\." > .hgignore
$ hg status
A dir/b.o
? a.c
? a.o
? dir/c.o
? syntax
$ echo "glob:**.o" > .hgignore
$ hg status
A dir/b.o
? .hgignore
? a.c
? syntax
$ echo "glob:*.o" > .hgignore
$ hg status
A dir/b.o
? .hgignore
? a.c
? syntax
$ echo "syntax: glob" > .hgignore
$ echo "re:.*\.o" >> .hgignore
$ hg status
A dir/b.o
? .hgignore
? a.c
? syntax
$ echo "syntax: invalid" > .hgignore
$ hg status
$TESTTMP/.hgignore: ignoring invalid syntax 'invalid' (glob)
A dir/b.o
? .hgignore
? a.c
? a.o
? dir/c.o
? syntax
$ echo "syntax: glob" > .hgignore
$ echo "*.o" >> .hgignore
$ hg status
A dir/b.o
? .hgignore
? a.c
? syntax
$ echo "relglob:syntax*" > .hgignore
$ hg status
A dir/b.o
? .hgignore
? a.c
? a.o
? dir/c.o
$ echo "relglob:*" > .hgignore
$ hg status
A dir/b.o
$ cd dir
$ hg status .
A b.o
$ hg debugignore
(?:(?:|.*/)[^/]*(?:/|$))
$ cd ..
Check patterns that match only the directory
$ echo "^dir\$" > .hgignore
$ hg status
A dir/b.o
? .hgignore
? a.c
? a.o
? syntax