Skip to content

Commit 64e86d2

Browse files
jeffhostetlerdscho
authored andcommitted
survey: add commit-oid to large_item detail
Signed-off-by: Jeff Hostetler <[email protected]>
1 parent a31fa1f commit 64e86d2

File tree

1 file changed

+27
-8
lines changed

1 file changed

+27
-8
lines changed

builtin/survey.c

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,21 @@ static void incr_obj_hist_bin(struct obj_hist_bin *pbin,
156156
struct large_item {
157157
uint64_t size;
158158
struct object_id oid;
159+
160+
/*
161+
* For blobs and trees the name field is the pathname of the
162+
* file or directory. Root trees will have a zero-length
163+
* name. The name field is not currenly used for commits.
164+
*/
159165
struct strbuf name;
166+
167+
/*
168+
* For blobs and trees remember the transient commit from
169+
* the treewalk so that we can say that this large item
170+
* first appeared in this commit (relative to the treewalk
171+
* order).
172+
*/
173+
struct object_id containing_commit_oid;
160174
};
161175

162176
struct large_item_vec {
@@ -204,7 +218,8 @@ static void free_large_item_vec(struct large_item_vec *vec)
204218
static void maybe_insert_large_item(struct large_item_vec *vec,
205219
uint64_t size,
206220
struct object_id *oid,
207-
const char *name)
221+
const char *name,
222+
const struct object_id *containing_commit_oid)
208223
{
209224
size_t rest_len;
210225
size_t k;
@@ -240,6 +255,7 @@ static void maybe_insert_large_item(struct large_item_vec *vec,
240255
memset(&vec->items[k], 0, sizeof(struct large_item));
241256
vec->items[k].size = size;
242257
oidcpy(&vec->items[k].oid, oid);
258+
oidcpy(&vec->items[k].containing_commit_oid, containing_commit_oid ? containing_commit_oid : null_oid(the_hash_algo));
243259
strbuf_init(&vec->items[k].name, 0);
244260
if (name && *name)
245261
strbuf_addstr(&vec->items[k].name, name);
@@ -748,15 +764,18 @@ static void survey_report_largest_vec(struct large_item_vec *vec)
748764
return;
749765

750766
table.table_name = vec->dimension_label;
751-
strvec_pushl(&table.header, "Size", "OID", "Name", NULL);
767+
strvec_pushl(&table.header, "Size", "OID", "Name", "Commit", NULL);
752768

753769
for (size_t k = 0; k < vec->nr_items; k++) {
754770
struct large_item *pk = &vec->items[k];
755771
if (!is_null_oid(&pk->oid)) {
756772
strbuf_reset(&size);
757773
strbuf_addf(&size, "%"PRIuMAX, (uintmax_t)pk->size);
758774

759-
insert_table_rowv(&table, size.buf, oid_to_hex(&pk->oid), pk->name.buf, NULL);
775+
insert_table_rowv(&table, size.buf, oid_to_hex(&pk->oid), pk->name.buf,
776+
is_null_oid(&pk->containing_commit_oid) ?
777+
"" : oid_to_hex(&pk->containing_commit_oid),
778+
NULL);
760779
}
761780
}
762781
strbuf_release(&size);
@@ -1255,8 +1274,8 @@ static void increment_totals(struct survey_context *ctx,
12551274
ctx->report.reachable_objects.commits.parent_cnt_pbin[k]++;
12561275
base = &ctx->report.reachable_objects.commits.base;
12571276

1258-
maybe_insert_large_item(ctx->report.reachable_objects.commits.vec_largest_by_nr_parents, k, &commit->object.oid, NULL);
1259-
maybe_insert_large_item(ctx->report.reachable_objects.commits.vec_largest_by_size_bytes, object_length, &commit->object.oid, NULL);
1277+
maybe_insert_large_item(ctx->report.reachable_objects.commits.vec_largest_by_nr_parents, k, &commit->object.oid, NULL, &commit->object.oid);
1278+
maybe_insert_large_item(ctx->report.reachable_objects.commits.vec_largest_by_size_bytes, object_length, &commit->object.oid, NULL, &commit->object.oid);
12601279
break;
12611280
}
12621281
case OBJ_TREE: {
@@ -1276,8 +1295,8 @@ static void increment_totals(struct survey_context *ctx,
12761295

12771296
pst->sum_entries += nr_entries;
12781297

1279-
maybe_insert_large_item(pst->vec_largest_by_nr_entries, nr_entries, &tree->object.oid, path);
1280-
maybe_insert_large_item(pst->vec_largest_by_size_bytes, object_length, &tree->object.oid, path);
1298+
maybe_insert_large_item(pst->vec_largest_by_nr_entries, nr_entries, &tree->object.oid, path, NULL);
1299+
maybe_insert_large_item(pst->vec_largest_by_size_bytes, object_length, &tree->object.oid, path, NULL);
12811300

12821301
qb = qbin(nr_entries);
12831302
incr_obj_hist_bin(&pst->entry_qbin[qb], object_length, disk_sizep);
@@ -1288,7 +1307,7 @@ static void increment_totals(struct survey_context *ctx,
12881307
case OBJ_BLOB:
12891308
base = &ctx->report.reachable_objects.blobs.base;
12901309

1291-
maybe_insert_large_item(ctx->report.reachable_objects.blobs.vec_largest_by_size_bytes, object_length, &oids->oid[i], path);
1310+
maybe_insert_large_item(ctx->report.reachable_objects.blobs.vec_largest_by_size_bytes, object_length, &oids->oid[i], path, NULL);
12921311
break;
12931312
default:
12941313
continue;

0 commit comments

Comments
 (0)