mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-10 13:04:15 -04:00
Generate list of seen categories
This commit is contained in:
parent
a75381b0ef
commit
e86cd07246
@ -63,8 +63,12 @@ class inode_manager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::pair<fragment_category::value_type, size_t>>
|
std::vector<std::pair<fragment_category::value_type, size_t>>
|
||||||
category_counts() const {
|
fragment_category_counts() const {
|
||||||
return impl_->category_counts();
|
return impl_->fragment_category_counts();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<fragment_category> inode_categories() const {
|
||||||
|
return impl_->inode_categories();
|
||||||
}
|
}
|
||||||
|
|
||||||
void scan_background(worker_group& wg, os_access& os,
|
void scan_background(worker_group& wg, os_access& os,
|
||||||
@ -85,7 +89,8 @@ class inode_manager {
|
|||||||
virtual void for_each_inode_in_order(
|
virtual void for_each_inode_in_order(
|
||||||
std::function<void(std::shared_ptr<inode> const&)> const& fn) const = 0;
|
std::function<void(std::shared_ptr<inode> const&)> const& fn) const = 0;
|
||||||
virtual std::vector<std::pair<fragment_category::value_type, size_t>>
|
virtual std::vector<std::pair<fragment_category::value_type, size_t>>
|
||||||
category_counts() const = 0;
|
fragment_category_counts() const = 0;
|
||||||
|
virtual std::vector<fragment_category> inode_categories() const = 0;
|
||||||
virtual void
|
virtual void
|
||||||
scan_background(worker_group& wg, os_access& os, std::shared_ptr<inode> ino,
|
scan_background(worker_group& wg, os_access& os, std::shared_ptr<inode> ino,
|
||||||
file const* p) const = 0;
|
file const* p) const = 0;
|
||||||
|
@ -477,12 +477,12 @@ class inode_manager_ final : public inode_manager::impl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::pair<fragment_category::value_type, size_t>>
|
std::vector<std::pair<fragment_category::value_type, size_t>>
|
||||||
category_counts() const override {
|
fragment_category_counts() const override {
|
||||||
std::unordered_map<fragment_category::value_type, size_t> tmp;
|
std::unordered_map<fragment_category::value_type, size_t> tmp;
|
||||||
|
|
||||||
for (auto const& i : inodes_) {
|
for (auto const& i : inodes_) {
|
||||||
if (auto const& fragments = i->fragments(); !fragments.empty()) {
|
if (auto const& fragments = i->fragments(); !fragments.empty()) {
|
||||||
for (auto const& frag : fragments.span()) {
|
for (auto const& frag : fragments) {
|
||||||
++tmp[frag.category().value()];
|
++tmp[frag.category().value()];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -500,6 +500,24 @@ class inode_manager_ final : public inode_manager::impl {
|
|||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<fragment_category> inode_categories() const override {
|
||||||
|
std::unordered_set<fragment_category> tmp;
|
||||||
|
|
||||||
|
for (auto const& i : inodes_) {
|
||||||
|
if (auto const& fragments = i->fragments(); !fragments.empty()) {
|
||||||
|
for (auto const& frag : fragments) {
|
||||||
|
tmp.emplace(frag.category());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<fragment_category> rv(tmp.begin(), tmp.end());
|
||||||
|
|
||||||
|
std::sort(rv.begin(), rv.end());
|
||||||
|
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
scan_background(worker_group& wg, os_access& os, std::shared_ptr<inode> ino,
|
scan_background(worker_group& wg, os_access& os, std::shared_ptr<inode> ino,
|
||||||
file const* p) const override;
|
file const* p) const override;
|
||||||
|
@ -606,11 +606,18 @@ void scanner_<LoggerPolicy>::scan(
|
|||||||
<< prog.duplicate_files << "/" << prog.files_found
|
<< prog.duplicate_files << "/" << prog.files_found
|
||||||
<< " duplicate files";
|
<< " duplicate files";
|
||||||
|
|
||||||
if (options_.inode.categorizer_mgr) {
|
if (auto catmgr = options_.inode.categorizer_mgr) {
|
||||||
for (auto const& cc : im.category_counts()) {
|
for (auto const& cc : im.fragment_category_counts()) {
|
||||||
LOG_INFO << cc.second << " "
|
LOG_INFO << cc.second << " " << catmgr->category_name(cc.first)
|
||||||
<< options_.inode.categorizer_mgr->category_name(cc.first)
|
<< " fragments";
|
||||||
<< " files";
|
}
|
||||||
|
|
||||||
|
for (auto const& cat : im.inode_categories()) {
|
||||||
|
std::string str(catmgr->category_name(cat.value()));
|
||||||
|
if (cat.has_subcategory()) {
|
||||||
|
str += fmt::format("/{}", cat.subcategory());
|
||||||
|
}
|
||||||
|
LOG_INFO << str;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user