| 3667 | } |
| 3668 | |
| 3669 | void write_untracked_extension(struct strbuf *out, struct untracked_cache *untracked) |
| 3670 | { |
| 3671 | struct ondisk_untracked_cache *ouc; |
| 3672 | struct write_data wd; |
| 3673 | unsigned char varbuf[16]; |
| 3674 | uint8_t varint_len; |
| 3675 | const unsigned hashsz = the_hash_algo->rawsz; |
| 3676 | |
| 3677 | CALLOC_ARRAY(ouc, 1); |
| 3678 | stat_data_to_disk(&ouc->info_exclude_stat, &untracked->ss_info_exclude.stat); |
| 3679 | stat_data_to_disk(&ouc->excludes_file_stat, &untracked->ss_excludes_file.stat); |
| 3680 | ouc->dir_flags = htonl(untracked->dir_flags); |
| 3681 | |
| 3682 | varint_len = encode_varint(untracked->ident.len, varbuf); |
| 3683 | strbuf_add(out, varbuf, varint_len); |
| 3684 | strbuf_addbuf(out, &untracked->ident); |
| 3685 | |
| 3686 | strbuf_add(out, ouc, sizeof(*ouc)); |
| 3687 | strbuf_add(out, untracked->ss_info_exclude.oid.hash, hashsz); |
| 3688 | strbuf_add(out, untracked->ss_excludes_file.oid.hash, hashsz); |
| 3689 | strbuf_add(out, untracked->exclude_per_dir, strlen(untracked->exclude_per_dir) + 1); |
| 3690 | FREE_AND_NULL(ouc); |
| 3691 | |
| 3692 | if (!untracked->root) { |
| 3693 | varint_len = encode_varint(0, varbuf); |
| 3694 | strbuf_add(out, varbuf, varint_len); |
| 3695 | return; |
| 3696 | } |
| 3697 | |
| 3698 | wd.index = 0; |
| 3699 | wd.check_only = ewah_new(); |
| 3700 | wd.valid = ewah_new(); |
| 3701 | wd.sha1_valid = ewah_new(); |
| 3702 | strbuf_init(&wd.out, 1024); |
| 3703 | strbuf_init(&wd.sb_stat, 1024); |
| 3704 | strbuf_init(&wd.sb_sha1, 1024); |
| 3705 | write_one_dir(untracked->root, &wd); |
| 3706 | |
| 3707 | varint_len = encode_varint(wd.index, varbuf); |
| 3708 | strbuf_add(out, varbuf, varint_len); |
| 3709 | strbuf_addbuf(out, &wd.out); |
| 3710 | ewah_serialize_strbuf(wd.valid, out); |
| 3711 | ewah_serialize_strbuf(wd.check_only, out); |
| 3712 | ewah_serialize_strbuf(wd.sha1_valid, out); |
| 3713 | strbuf_addbuf(out, &wd.sb_stat); |
| 3714 | strbuf_addbuf(out, &wd.sb_sha1); |
| 3715 | strbuf_addch(out, '\0'); /* safe guard for string lists */ |
| 3716 | |
| 3717 | ewah_free(wd.valid); |
| 3718 | ewah_free(wd.check_only); |
| 3719 | ewah_free(wd.sha1_valid); |
| 3720 | strbuf_release(&wd.out); |
| 3721 | strbuf_release(&wd.sb_stat); |
| 3722 | strbuf_release(&wd.sb_sha1); |
| 3723 | } |
| 3724 | |
| 3725 | static void free_untracked(struct untracked_cache_dir *ucd) |
| 3726 | { |
no test coverage detected