| 3612 | } |
| 3613 | |
| 3614 | static void write_one_dir(struct untracked_cache_dir *untracked, |
| 3615 | struct write_data *wd) |
| 3616 | { |
| 3617 | struct stat_data stat_data; |
| 3618 | struct strbuf *out = &wd->out; |
| 3619 | unsigned char intbuf[16]; |
| 3620 | unsigned int value; |
| 3621 | uint8_t intlen; |
| 3622 | int i = wd->index++; |
| 3623 | |
| 3624 | /* |
| 3625 | * untracked_nr should be reset whenever valid is clear, but |
| 3626 | * for safety.. |
| 3627 | */ |
| 3628 | if (!untracked->valid) { |
| 3629 | for (size_t i = 0; i < untracked->untracked_nr; i++) |
| 3630 | free(untracked->untracked[i]); |
| 3631 | untracked->untracked_nr = 0; |
| 3632 | untracked->check_only = 0; |
| 3633 | } |
| 3634 | |
| 3635 | if (untracked->check_only) |
| 3636 | ewah_set(wd->check_only, i); |
| 3637 | if (untracked->valid) { |
| 3638 | ewah_set(wd->valid, i); |
| 3639 | stat_data_to_disk(&stat_data, &untracked->stat_data); |
| 3640 | strbuf_add(&wd->sb_stat, &stat_data, sizeof(stat_data)); |
| 3641 | } |
| 3642 | if (!is_null_oid(&untracked->exclude_oid)) { |
| 3643 | ewah_set(wd->sha1_valid, i); |
| 3644 | strbuf_add(&wd->sb_sha1, untracked->exclude_oid.hash, |
| 3645 | the_hash_algo->rawsz); |
| 3646 | } |
| 3647 | |
| 3648 | intlen = encode_varint(untracked->untracked_nr, intbuf); |
| 3649 | strbuf_add(out, intbuf, intlen); |
| 3650 | |
| 3651 | /* skip non-recurse directories */ |
| 3652 | for (i = 0, value = 0; i < untracked->dirs_nr; i++) |
| 3653 | if (untracked->dirs[i]->recurse) |
| 3654 | value++; |
| 3655 | intlen = encode_varint(value, intbuf); |
| 3656 | strbuf_add(out, intbuf, intlen); |
| 3657 | |
| 3658 | strbuf_add(out, untracked->name, strlen(untracked->name) + 1); |
| 3659 | |
| 3660 | for (i = 0; i < untracked->untracked_nr; i++) |
| 3661 | strbuf_add(out, untracked->untracked[i], |
| 3662 | strlen(untracked->untracked[i]) + 1); |
| 3663 | |
| 3664 | for (i = 0; i < untracked->dirs_nr; i++) |
| 3665 | if (untracked->dirs[i]->recurse) |
| 3666 | write_one_dir(untracked->dirs[i], wd); |
| 3667 | } |
| 3668 | |
| 3669 | void write_untracked_extension(struct strbuf *out, struct untracked_cache *untracked) |
| 3670 | { |
no test coverage detected