summaryrefslogtreecommitdiff
path: root/list-objects-filter.c
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2021-04-12 13:37:35 (GMT)
committerJunio C Hamano <gitster@pobox.com>2021-04-12 16:35:50 (GMT)
commit9a2a4f95448890d138a800c8a55c5d5dcfe16082 (patch)
tree9c3c3df9c336ad1f733ba78831ba7ee61be66139 /list-objects-filter.c
parent628d81be6c007de5aa0fa352b912b89f74a5cfa7 (diff)
downloadgit-9a2a4f95448890d138a800c8a55c5d5dcfe16082.zip
git-9a2a4f95448890d138a800c8a55c5d5dcfe16082.tar.gz
git-9a2a4f95448890d138a800c8a55c5d5dcfe16082.tar.bz2
list-objects: support filtering by tag and commit
Object filters currently only support filtering blobs or trees based on some criteria. This commit lays the foundation to also allow filtering of tags and commits. No change in behaviour is expected from this commit given that there are no filters yet for those object types. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'list-objects-filter.c')
-rw-r--r--list-objects-filter.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/list-objects-filter.c b/list-objects-filter.c
index 39e2f15..0ebfa52 100644
--- a/list-objects-filter.c
+++ b/list-objects-filter.c
@@ -82,6 +82,16 @@ static enum list_objects_filter_result filter_blobs_none(
default:
BUG("unknown filter_situation: %d", filter_situation);
+ case LOFS_TAG:
+ assert(obj->type == OBJ_TAG);
+ /* always include all tag objects */
+ return LOFR_MARK_SEEN | LOFR_DO_SHOW;
+
+ case LOFS_COMMIT:
+ assert(obj->type == OBJ_COMMIT);
+ /* always include all commit objects */
+ return LOFR_MARK_SEEN | LOFR_DO_SHOW;
+
case LOFS_BEGIN_TREE:
assert(obj->type == OBJ_TREE);
/* always include all tree objects */
@@ -173,6 +183,16 @@ static enum list_objects_filter_result filter_trees_depth(
default:
BUG("unknown filter_situation: %d", filter_situation);
+ case LOFS_TAG:
+ assert(obj->type == OBJ_TAG);
+ /* always include all tag objects */
+ return LOFR_MARK_SEEN | LOFR_DO_SHOW;
+
+ case LOFS_COMMIT:
+ assert(obj->type == OBJ_COMMIT);
+ /* always include all commit objects */
+ return LOFR_MARK_SEEN | LOFR_DO_SHOW;
+
case LOFS_END_TREE:
assert(obj->type == OBJ_TREE);
filter_data->current_depth--;
@@ -267,6 +287,16 @@ static enum list_objects_filter_result filter_blobs_limit(
default:
BUG("unknown filter_situation: %d", filter_situation);
+ case LOFS_TAG:
+ assert(obj->type == OBJ_TAG);
+ /* always include all tag objects */
+ return LOFR_MARK_SEEN | LOFR_DO_SHOW;
+
+ case LOFS_COMMIT:
+ assert(obj->type == OBJ_COMMIT);
+ /* always include all commit objects */
+ return LOFR_MARK_SEEN | LOFR_DO_SHOW;
+
case LOFS_BEGIN_TREE:
assert(obj->type == OBJ_TREE);
/* always include all tree objects */
@@ -371,6 +401,16 @@ static enum list_objects_filter_result filter_sparse(
default:
BUG("unknown filter_situation: %d", filter_situation);
+ case LOFS_TAG:
+ assert(obj->type == OBJ_TAG);
+ /* always include all tag objects */
+ return LOFR_MARK_SEEN | LOFR_DO_SHOW;
+
+ case LOFS_COMMIT:
+ assert(obj->type == OBJ_COMMIT);
+ /* always include all commit objects */
+ return LOFR_MARK_SEEN | LOFR_DO_SHOW;
+
case LOFS_BEGIN_TREE:
assert(obj->type == OBJ_TREE);
dtype = DT_DIR;