# # # patch "cmd_policy.cc" # from [7d52becabc871309313d51c8e6aa2de07fc010a0] # to [e3d6ec064d5dfb48a169149baf63198c5b3ec996] # # patch "project.hh" # from [5e66ecaf7dff55782fe4997e8c713cb4fb196595] # to [8983d9b63cfab024393410d63da128a013e93219] # ============================================================ --- cmd_policy.cc 7d52becabc871309313d51c8e6aa2de07fc010a0 +++ cmd_policy.cc e3d6ec064d5dfb48a169149baf63198c5b3ec996 @@ -129,21 +129,11 @@ CMD(create_branch, "create_branch", "", project_t project(db, app.lua, app.opts); branch_name branch = typecast_vocab(idx(args, 0)); - editable_policy parent; - branch_name parent_prefix; - E(project.get_policy_branch_policy_of(branch, parent, parent_prefix), - origin::user, - F("Cannot find a parent policy for %s") % branch); - P(F("Parent policy: %s") % parent_prefix); + governing_policy_info gov; + project.find_governing_policy(branch(), gov); - I(branch().find(parent_prefix()) == 0); - std::string relative_name = branch().substr(parent_prefix().size()); - if (relative_name.size() > 0 && relative_name[0] == '.') - relative_name.erase(0, 1); - if (relative_name.empty()) - relative_name = "__main__"; - - cache_user_key(app.opts, app.lua, db, keys, project); + policies::policy_branch parent(gov.delegation_to_governing_policy()); + policies::editable_policy ppol(*parent.begin()); std::set admin_keys; { key_identity_info ident; @@ -151,18 +141,13 @@ CMD(create_branch, "create_branch", "", project.complete_key_identity(keys, app.lua, ident); admin_keys.insert(typecast_vocab(ident.official_name)); } - - - shared_ptr - br = parent.get_branch(relative_name); - E(!br, origin::user, - F("A branch %s already exists under policy %s") - % relative_name % parent_prefix); - br = parent.get_branch(relative_name, true); - br->committers = admin_keys; - - project_t p = project_t::empty_project(db); - parent.commit(p, keys, utf8(N_("Declare new branch"))); + std::string relative_name = branch().substr(parent_prefix().size()); + if (relative_name.size() > 0 && relative_name[0] == '.') + relative_name.erase(0, 1); + if (relative_name.empty()) + relative_name = "__main__"; + ppol.set_branch(relative_name, policies::branch(admin_keys)); + parent.commit(ppol, utf8("Add branch.")); } CMD_FWD_DECL(list); ============================================================ --- project.hh 5e66ecaf7dff55782fe4997e8c713cb4fb196595 +++ project.hh 8983d9b63cfab024393410d63da128a013e93219 @@ -120,9 +120,9 @@ public: //bool get_policy_branch_policy_of(branch_name const & name, // editable_policy & policy_branch_policy, // branch_name & policy_prefix); - //bool policy_exists(branch_name const & name) const; - //void get_subpolicies(branch_name const & name, - // std::set & names) const; + bool policy_exists(branch_name const & name) const; + void get_subpolicies(branch_name const & name, + std::set & names) const; void get_branch_list(std::set & names, bool check_heads = false);