diff options
author | John Wiegley <johnw@newartisans.com> | 2010-06-09 07:38:45 -0400 |
---|---|---|
committer | John Wiegley <johnw@newartisans.com> | 2010-06-09 07:47:45 -0400 |
commit | c28fad384c28fb929fc8ea69854496141bdf306a (patch) | |
tree | 9b4d0197448cd8587e11f5e3e65214e9dc80e3a7 /src/filters.cc | |
parent | 8637dd6ccf7afc71d911cd66c4a55a1308596dbb (diff) | |
download | fork-ledger-c28fad384c28fb929fc8ea69854496141bdf306a.tar.gz fork-ledger-c28fad384c28fb929fc8ea69854496141bdf306a.tar.bz2 fork-ledger-c28fad384c28fb929fc8ea69854496141bdf306a.zip |
The --anon option now anonymizes commodities
Fixes #227 / 1C90D8AF-830E-43C2-A5B7-D382F68EBDE3
Diffstat (limited to 'src/filters.cc')
-rw-r--r-- | src/filters.cc | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/filters.cc b/src/filters.cc index 1385a3f0..b818c7d0 100644 --- a/src/filters.cc +++ b/src/filters.cc @@ -36,6 +36,7 @@ #include "journal.h" #include "report.h" #include "compare.h" +#include "pool.h" namespace ledger { @@ -216,6 +217,43 @@ namespace { } } +void anonymize_posts::render_commodity(amount_t& amt) +{ + commodity_t& comm(amt.commodity()); + + std::size_t id; + bool newly_added = false; + + commodity_index_map::iterator i = comms.find(&comm); + if (i == comms.end()) { + id = next_comm_id++; + newly_added = true; + comms.insert(commodity_index_map::value_type(&comm, id)); + } else { + id = (*i).second; + } + + std::ostringstream buf; + do { + buf << static_cast<char>('A' + (id % 26)); + id /= 26; + } + while (id > 0); + + if (amt.has_annotation()) + amt.set_commodity + (*commodity_pool_t::current_pool->find_or_create(buf.str(), + amt.annotation())); + else + amt.set_commodity + (*commodity_pool_t::current_pool->find_or_create(buf.str())); + + if (newly_added) { + amt.commodity().set_flags(comm.flags()); + amt.commodity().set_precision(comm.precision()); + } +} + void anonymize_posts::operator()(post_t& post) { SHA1 sha; @@ -258,6 +296,20 @@ void anonymize_posts::operator()(post_t& post) temp.note = none; temp.add_flags(POST_ANONYMIZED); + DEBUG("foo", "1.rendering amount: " << temp.amount); + render_commodity(temp.amount); + DEBUG("foo", "2.rendering amount: " << temp.amount); + if (temp.amount.has_annotation()) { + temp.amount.annotation().tag = none; + if (temp.amount.annotation().price) + render_commodity(*temp.amount.annotation().price); + } + + if (temp.cost) + render_commodity(*temp.cost); + if (temp.assigned_amount) + render_commodity(*temp.assigned_amount); + (*handler)(temp); } |