Re: [PATCH v2 5/8] odb/streaming: consolidate read and write streams
Karthik Nayak <[email protected]>
| Newsgroups | org.kernel.vger.git |
|---|---|
| Message-ID | <CAOLa=ZTi8tL896_F2ONQck0z+H8NYhzcbTorb80NOdiqvnpjNg@mail.gmail.com> |
Patrick Steinhardt <[email protected]> writes: > The `struct odb_read_stream` and `struct odb_write_stream` both provide > the same functionality: they allow a caller to read object data from an > arbitrary source. Historically, the only difference was that the read > stream was used to read data out of the object database, whereas the > write stream was used to write data into the object database, but the > interfaces were mostly the same. > > Over the preceding commits we have refactored the write stream to have > almost exactly the same interface as the read stream. With these > refactorings we can now easily merge those two streams into a single > interface that's used for both use cases. > > While most of the changes are mechanical, there are two sites that need > special mention: > > - "builtin/unpack-objects.c" creates a write stream from compressed > object data. > > - "odb/streaming.c" creates a write stream from a file descriptor. > > Adapting these sites to yield the new stream type requires a couple more > changes. Most importantly, instead of embedding the pointer to the data > in `struct odb_write_stream`, we now allocate a structure that wraps the > new `struct odb_stream` base. Other than that though, the changes are > rather straight forward. > So instead of `odb_write_stream.data` which was pointing to the data, we simply wrap the stream with the data's structure, this allows us to get the parent struct if we have the `odb_stream`. Alright! > Some of the structures and functions are now somewhat misnamed. These > will be fixed in subsequent commits. > > Signed-off-by: Patrick Steinhardt <[email protected]> > --- > builtin/unpack-objects.c | 31 ++++++++++++++++--------------- > object-file.c | 25 ++++++++++++------------- > odb.c | 2 +- > odb.h | 4 ++-- > odb/source-files.c | 2 +- > odb/source-inmemory.c | 4 ++-- > odb/source-loose.c | 6 +++--- > odb/source-packed.c | 2 +- > odb/source.h | 4 ++-- > odb/streaming.c | 35 ++++++++++++++++------------------- > odb/streaming.h | 31 +++---------------------------- > odb/transaction.c | 2 +- > odb/transaction.h | 4 ++-- > t/unit-tests/u-odb-inmemory.c | 6 +++--- > 14 files changed, 65 insertions(+), 93 deletions(-) > > diff --git a/builtin/unpack-objects.c b/builtin/unpack-objects.c > index 7439ec53be..05a2d48011 100644 > --- a/builtin/unpack-objects.c > +++ b/builtin/unpack-objects.c > @@ -359,20 +359,21 @@ static void unpack_non_delta_entry(enum object_type type, unsigned long size, > } > > struct input_zstream_data { > + struct odb_stream base; > git_zstream *zstream; > int status; > }; > > -static ssize_t feed_input_zstream(struct odb_write_stream *in_stream, > - unsigned char *buf, size_t buf_len) > +static ssize_t feed_input_zstream(struct odb_stream *in_stream, > + char *buf, size_t buf_len) > { > - struct input_zstream_data *data = in_stream->data; > + struct input_zstream_data *data = container_of(in_stream, struct input_zstream_data, base); > git_zstream *zstream = data->zstream; > > if (data->status != Z_OK) > return 0; > > - zstream->next_out = buf; > + zstream->next_out = (unsigned char *) buf; But we do loose information here since we now use 'char *' for both read/write. But we gain flexibility. [snip] The rest looks good.
signature.asc
(application/pgp-signature, 690 B)
-----BEGIN PGP SIGNATURE----- iQHKBAEBCgA0FiEEV85Mf2N1cQ/LZcYGPtWfJI5GjH8FAmp69XMWHGthcnRoaWsu MTg4QGdtYWlsLmNvbQAKCRA+1Z8kjkaMf0fFDACa1AkO4vj5qsCrPDzgIID4vTq+ BYzBUj5IAIO3Lml7D2BQF/aX5gZ7yirE6gsP5vbR8JTr5rPWGkD/+olZ7lItBKz4 zXiKEVS8Pjop9nc9aMV/PZ1/Lt8uN/Z2Js9RgXDr9SVEuopHkqJ7OquYZPCYLNVg r4rLnbtaPxGslXPfCl7wAk+9H26sosjY2kcUD9D7nH/wh4Kzwoe7Aw+TIenvqiGS TbSBYeC4mlK9YiujlCqV3lMmWyVrVqeKwsuha8oWdTbSNPwuN3pVfg+D51lA1/N+ xiR5/uEqzNvoUt5A9CYlebT9t/LS5AS/QE0eOlR+a5784T4/6Diy1GwdSQEiMv73 nYd0sbUEU2O8JEazEXl8ViDKhRS9loWlppkx0MJauw6gwQLoHtmJ24rRT9Atlu19 DwDXTt/cqx2wmWeXH6J1erz65B0lT12ttKBLvT+Ma+KDK8yURfYp/Gs/4tI/G9Zy WXpz9r4qD7i8jEXrGUZWJx1EK918Eps+KpZfQjw= =FQc7 -----END PGP SIGNATURE-----