# # # patch "database.cc" # from [69a329da77f8f3477761c7167f8aadafe95d3575] # to [89ca0d5333b3d8203e7e04a34e2ea38ac11bf4ce] # # patch "database.hh" # from [e06001413dcb2f1ff7c81dd292b04583f7611f46] # to [668349c60ec98717a48885e508a629dae9c78248] # # patch "editable_policy.cc" # from [e62f5bbe20a1b69aea2221104f294d67f9e80e0a] # to [5d9e309ba6c8d9576b2bd2db5ccd220a1813f6d2] # ============================================================ --- database.cc 69a329da77f8f3477761c7167f8aadafe95d3575 +++ database.cc 89ca0d5333b3d8203e7e04a34e2ea38ac11bf4ce @@ -3785,6 +3785,17 @@ database::hook_get_revision_cert_trust(s return lua.hook_get_revision_cert_trust(signers, id, name, val); }; +// Get a meaningless, unique value for use in branch certs. +branch_uid +database::generate_uid() const +{ + // FIXME: I'm sure there's a better way to do this. + std::string when = date_t::now().as_iso_8601_extended(); + char buf[20]; + rng->randomize(reinterpret_cast(buf), 20); + return branch_uid(when + "--" + encode_hexenc(std::string(buf, 20))); +} + // transaction guards conditional_transaction_guard::~conditional_transaction_guard() ============================================================ --- database.hh e06001413dcb2f1ff7c81dd292b04583f7611f46 +++ database.hh 668349c60ec98717a48885e508a629dae9c78248 @@ -434,6 +434,8 @@ public: bool hook_get_revision_cert_trust(std::set const & signers, revision_id const & id, cert_name const & name, cert_value const & val); + // This wants to be somewhere with access to a RNG. + branch_uid generate_uid() const; private: boost::shared_ptr imp; lua_hooks & lua; ============================================================ --- editable_policy.cc e62f5bbe20a1b69aea2221104f294d67f9e80e0a +++ editable_policy.cc 5d9e309ba6c8d9576b2bd2db5ccd220a1813f6d2 @@ -59,16 +59,6 @@ namespace { } namespace { - branch_uid - generate_uid() - { - // FIXME: I'm sure there's a better way to do this. - std::string when = date_t::now().as_iso_8601_extended(); - char buf[20]; - Botan::Global_RNG::randomize(reinterpret_cast(buf), 20); - return branch_uid(when + "--" + encode_hexenc(std::string(buf, 20))); - } - template struct thing_info { @@ -167,7 +157,7 @@ editable_policy::editable_policy(databas editable_policy::editable_policy(database & db, set const & admins) - : impl(new editable_policy_impl(db)), uid(generate_uid()) + : impl(new editable_policy_impl(db)), uid(db.generate_uid()) { branch_holder::info_type self; self.new_name = "__policy__"; @@ -684,7 +674,7 @@ editable_policy::get_branch(string const branch_holder::info_type item; item.new_name = name; item.new_value.reset(new branch()); - item.new_value->uid = generate_uid(); + item.new_value->uid = impl->db.generate_uid(); impl->branches.insert(item); return item.new_value; }