convert: add classification for conv_attrs struct
Create `enum conv_attrs_classification` to express the different ways that attributes are handled for a blob during checkout. This will be used in a later commit when deciding whether to add a file to the parallel or delayed queue during checkout. For now, we can also use it in get_stream_filter_ca() to simplify the function (as the classifying logic is the same). Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com> Signed-off-by: Matheus Tavares <matheus.bernardino@usp.br> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
3e9e82c0d8
commit
f59d15bb42
26
convert.c
26
convert.c
@ -1954,13 +1954,7 @@ struct stream_filter *get_stream_filter_ca(const struct conv_attrs *ca,
|
|||||||
{
|
{
|
||||||
struct stream_filter *filter = NULL;
|
struct stream_filter *filter = NULL;
|
||||||
|
|
||||||
if (ca->drv && (ca->drv->process || ca->drv->smudge || ca->drv->clean))
|
if (classify_conv_attrs(ca) != CA_CLASS_STREAMABLE)
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (ca->working_tree_encoding)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (ca->crlf_action == CRLF_AUTO || ca->crlf_action == CRLF_AUTO_CRLF)
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (ca->ident)
|
if (ca->ident)
|
||||||
@ -2016,3 +2010,21 @@ void clone_checkout_metadata(struct checkout_metadata *dst,
|
|||||||
if (blob)
|
if (blob)
|
||||||
oidcpy(&dst->blob, blob);
|
oidcpy(&dst->blob, blob);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum conv_attrs_classification classify_conv_attrs(const struct conv_attrs *ca)
|
||||||
|
{
|
||||||
|
if (ca->drv) {
|
||||||
|
if (ca->drv->process)
|
||||||
|
return CA_CLASS_INCORE_PROCESS;
|
||||||
|
if (ca->drv->smudge || ca->drv->clean)
|
||||||
|
return CA_CLASS_INCORE_FILTER;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ca->working_tree_encoding)
|
||||||
|
return CA_CLASS_INCORE;
|
||||||
|
|
||||||
|
if (ca->crlf_action == CRLF_AUTO || ca->crlf_action == CRLF_AUTO_CRLF)
|
||||||
|
return CA_CLASS_INCORE;
|
||||||
|
|
||||||
|
return CA_CLASS_STREAMABLE;
|
||||||
|
}
|
||||||
|
33
convert.h
33
convert.h
@ -200,4 +200,37 @@ int stream_filter(struct stream_filter *,
|
|||||||
const char *input, size_t *isize_p,
|
const char *input, size_t *isize_p,
|
||||||
char *output, size_t *osize_p);
|
char *output, size_t *osize_p);
|
||||||
|
|
||||||
|
enum conv_attrs_classification {
|
||||||
|
/*
|
||||||
|
* The blob must be loaded into a buffer before it can be
|
||||||
|
* smudged. All smudging is done in-proc.
|
||||||
|
*/
|
||||||
|
CA_CLASS_INCORE,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The blob must be loaded into a buffer, but uses a
|
||||||
|
* single-file driver filter, such as rot13.
|
||||||
|
*/
|
||||||
|
CA_CLASS_INCORE_FILTER,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The blob must be loaded into a buffer, but uses a
|
||||||
|
* long-running driver process, such as LFS. This might or
|
||||||
|
* might not use delayed operations. (The important thing is
|
||||||
|
* that there is a single subordinate long-running process
|
||||||
|
* handling all associated blobs and in case of delayed
|
||||||
|
* operations, may hold per-blob state.)
|
||||||
|
*/
|
||||||
|
CA_CLASS_INCORE_PROCESS,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The blob can be streamed and smudged without needing to
|
||||||
|
* completely read it into a buffer.
|
||||||
|
*/
|
||||||
|
CA_CLASS_STREAMABLE,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum conv_attrs_classification classify_conv_attrs(
|
||||||
|
const struct conv_attrs *ca);
|
||||||
|
|
||||||
#endif /* CONVERT_H */
|
#endif /* CONVERT_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user