Merge branch 'tb/rev-list-unpacked-fix'
"git rev-list --unpacked --objects" failed to exclude packed non-commit objects, which has been corrected. * tb/rev-list-unpacked-fix: pack-bitmap: drop --unpacked non-commit objects from results list-objects: drop --unpacked non-commit objects from results
This commit is contained in:
@ -39,6 +39,9 @@ static void show_object(struct traversal_context *ctx,
|
|||||||
{
|
{
|
||||||
if (!ctx->show_object)
|
if (!ctx->show_object)
|
||||||
return;
|
return;
|
||||||
|
if (ctx->revs->unpacked && has_object_pack(&object->oid))
|
||||||
|
return;
|
||||||
|
|
||||||
ctx->show_object(object, name, ctx->show_data);
|
ctx->show_object(object, name, ctx->show_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1666,6 +1666,30 @@ static int can_filter_bitmap(struct list_objects_filter_options *filter)
|
|||||||
return !filter_bitmap(NULL, NULL, NULL, filter);
|
return !filter_bitmap(NULL, NULL, NULL, filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void filter_packed_objects_from_bitmap(struct bitmap_index *bitmap_git,
|
||||||
|
struct bitmap *result)
|
||||||
|
{
|
||||||
|
struct eindex *eindex = &bitmap_git->ext_index;
|
||||||
|
uint32_t objects_nr;
|
||||||
|
size_t i, pos;
|
||||||
|
|
||||||
|
objects_nr = bitmap_num_objects(bitmap_git);
|
||||||
|
pos = objects_nr / BITS_IN_EWORD;
|
||||||
|
|
||||||
|
if (pos > result->word_alloc)
|
||||||
|
pos = result->word_alloc;
|
||||||
|
|
||||||
|
memset(result->words, 0x00, sizeof(eword_t) * pos);
|
||||||
|
for (i = pos * BITS_IN_EWORD; i < objects_nr; i++)
|
||||||
|
bitmap_unset(result, i);
|
||||||
|
|
||||||
|
for (i = 0; i < eindex->count; ++i) {
|
||||||
|
if (has_object_pack(&eindex->objects[i]->oid))
|
||||||
|
bitmap_unset(result, objects_nr + i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs,
|
struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs,
|
||||||
int filter_provided_objects)
|
int filter_provided_objects)
|
||||||
{
|
{
|
||||||
@ -1788,6 +1812,9 @@ struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs,
|
|||||||
wants_bitmap,
|
wants_bitmap,
|
||||||
&revs->filter);
|
&revs->filter);
|
||||||
|
|
||||||
|
if (revs->unpacked)
|
||||||
|
filter_packed_objects_from_bitmap(bitmap_git, wants_bitmap);
|
||||||
|
|
||||||
bitmap_git->result = wants_bitmap;
|
bitmap_git->result = wants_bitmap;
|
||||||
bitmap_git->haves = haves_bitmap;
|
bitmap_git->haves = haves_bitmap;
|
||||||
|
|
||||||
|
@ -169,4 +169,17 @@ test_expect_success 'rev-list --count --objects' '
|
|||||||
test_line_count = $count actual
|
test_line_count = $count actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'rev-list --unpacked' '
|
||||||
|
git repack -ad &&
|
||||||
|
test_commit unpacked &&
|
||||||
|
|
||||||
|
git rev-list --objects --no-object-names unpacked^.. >expect.raw &&
|
||||||
|
sort expect.raw >expect &&
|
||||||
|
|
||||||
|
git rev-list --all --objects --unpacked --no-object-names >actual.raw &&
|
||||||
|
sort actual.raw >actual &&
|
||||||
|
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
@ -141,4 +141,17 @@ test_expect_success 'combine filter with --filter-provided-objects' '
|
|||||||
done <objects
|
done <objects
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'bitmap traversal with --unpacked' '
|
||||||
|
git repack -adb &&
|
||||||
|
test_commit unpacked &&
|
||||||
|
|
||||||
|
git rev-list --objects --no-object-names unpacked^.. >expect.raw &&
|
||||||
|
sort expect.raw >expect &&
|
||||||
|
|
||||||
|
git rev-list --use-bitmap-index --objects --all --unpacked >actual.raw &&
|
||||||
|
sort actual.raw >actual &&
|
||||||
|
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
@ -48,6 +48,13 @@ check_du HEAD
|
|||||||
check_du --objects HEAD
|
check_du --objects HEAD
|
||||||
check_du --objects HEAD^..HEAD
|
check_du --objects HEAD^..HEAD
|
||||||
|
|
||||||
|
test_expect_success 'setup for --unpacked tests' '
|
||||||
|
git repack -adb &&
|
||||||
|
test_commit unpacked
|
||||||
|
'
|
||||||
|
|
||||||
|
check_du --all --objects --unpacked
|
||||||
|
|
||||||
# As mentioned above, don't use hardcode sizes as actual size, but use the
|
# As mentioned above, don't use hardcode sizes as actual size, but use the
|
||||||
# output from git cat-file.
|
# output from git cat-file.
|
||||||
test_expect_success 'rev-list --disk-usage=human' '
|
test_expect_success 'rev-list --disk-usage=human' '
|
||||||
|
Reference in New Issue
Block a user