# # # patch "cmd_policy.cc" # from [06785d027f0bb7ee54b442713814be6f868c7429] # to [1d01be7fa8231ac740ea25b6ca336309611a1ace] # # patch "policies/delegation.cc" # from [246a8cde7eea25378eeeed8902e3c03324f28e9f] # to [39fcae010fdb237b9691223cfcefc35f21d132ad] # # patch "project.cc" # from [0c16138bf14f332d8d19704f1fce95e6dec16055] # to [f39e3052a7ef34bcb5d6a151bb41e943503cfae5] # # patch "tests/policy-basic/__driver__.lua" # from [81d1af4034c099f12f995ee128e750ba0d5b5ab9] # to [db5b67a924dec8c7fd4b15ad511ea57c18c7bab0] # ============================================================ --- cmd_policy.cc 06785d027f0bb7ee54b442713814be6f868c7429 +++ cmd_policy.cc 1d01be7fa8231ac740ea25b6ca336309611a1ace @@ -63,7 +63,6 @@ CMD(create_project, "create_project", "" F("Configuration directory is a file.")); require_path_is_nonexistent(project_file, F("You already have a project with that name.")); - mkdir_p(project_dir); cache_user_key(app.opts, app.lua, db, keys, project); ============================================================ --- policies/delegation.cc 246a8cde7eea25378eeeed8902e3c03324f28e9f +++ policies/delegation.cc 39fcae010fdb237b9691223cfcefc35f21d132ad @@ -98,9 +98,12 @@ namespace policies { case branch_type: { policy_branch br(project, parent, branch_desc); - E(br.size() == 1, origin::no_fault, - F("Policy branch '%s' has %d heads; need 1 head") - % branch_desc.get_uid() % br.size()); + if (br.size() != 1) + { + W(F("Policy branch '%s' has %d heads; need 1 head") + % branch_desc.get_uid() % br.size()); + return boost::shared_ptr(); + } return br.begin()->second; } break; ============================================================ --- project.cc 0c16138bf14f332d8d19704f1fce95e6dec16055 +++ project.cc f39e3052a7ef34bcb5d6a151bb41e943503cfae5 @@ -107,6 +107,9 @@ void walk_policies(project_t const & pro string current_prefix = "", policies::delegation del = policies::delegation()) { + if (!root) + return; + fn(root, current_prefix, del); policy::del_map const & d(root->list_delegations()); @@ -252,19 +255,18 @@ public: child_policy_map child_policies; public: bool passthru; - explicit policy_info(database & db) - : policy(), - passthru(true) + policy_info() + : policy(), passthru(true) { } - policy_info(shared_ptr const & ep, database & db) - : policy(ep), passthru(false) + policy_info(bool passthru, shared_ptr const & ep) + : policy(ep), passthru(passthru) { } policies::policy const & get_base_policy() const { - I(!passthru); + I(policy); return *policy; } @@ -404,17 +406,14 @@ project_t::project_t(database & db) project_t::project_t(database & db) : db(db) { - project_policy.reset(new policy_info(db)); + project_policy.reset(new policy_info()); } project_t::project_t(database & db, lua_hooks & lua, options & opts) : db(db) { shared_ptr bp(new policies::base_policy(db, opts, lua)); - if (bp->empty()) - project_policy.reset(new policy_info(db)); - else - project_policy.reset(new policy_info(bp, db)); + project_policy.reset(new policy_info(bp->empty(), bp)); } project_t ============================================================ --- tests/policy-basic/__driver__.lua 81d1af4034c099f12f995ee128e750ba0d5b5ab9 +++ tests/policy-basic/__driver__.lua db5b67a924dec8c7fd4b15ad511ea57c18c7bab0 @@ -6,8 +6,8 @@ check(mtn("create_project", "test_projec check(mtn("create_project", "test_project"), 0, false, false) -check(mtn("ls", "branches"), 0, true) -check(qgrep("test_project.__policy__", "stdout"), 0) +check(mtn("ls", "branches"), 0, true, false) +check(not qgrep("test_project.__policy__", "stdout")) check(mtn("checkout", "checkout", "--branch=test_project.__policy__"), 0)