# # # patch "cmd_policy.cc" # from [411c9bb87e1f310f626edc1533afcb4d68613f47] # to [fbb1c2015f25226333617a983c96874040863c59] # # patch "project.cc" # from [625e5f4bae7e6e050e8970ebea10b9dfc70fe7c0] # to [b83bb9f948835df3e63a64340dfe2a40ca0d358c] # # patch "tests/policy-keys/__driver__.lua" # from [9be299f34b7ab5352201683a118e40ba4124510f] # to [92404cd9eaf305989e49d12f4c3436c9486b091b] # ============================================================ --- cmd_policy.cc 411c9bb87e1f310f626edc1533afcb4d68613f47 +++ cmd_policy.cc fbb1c2015f25226333617a983c96874040863c59 @@ -138,6 +138,7 @@ CMD(create_branch, "create_branch", "", project_t project(db, app.lua, app.opts); branch_name branch = typecast_vocab(idx(args, 0)); + app.opts.branch = branch; cache_user_key(app.opts, app.lua, db, keys, project); policy_chain gov; ============================================================ --- project.cc 625e5f4bae7e6e050e8970ebea10b9dfc70fe7c0 +++ project.cc b83bb9f948835df3e63a64340dfe2a40ca0d358c @@ -585,13 +585,19 @@ public: typedef key_lister::name_map::const_iterator it; for (it i = names.begin(); i != names.end(); ++i) { + branch_name name_as_branch = + typecast_vocab(i->second.second); + key_name official_name = + typecast_vocab(i->second.first / name_as_branch); + if (official_name == name) + { + // fully-qualified exact match + results[official_name] = i->first; + } if (i->second.second != name) continue; if (where.empty() || where.has_prefix(i->second.first)) { - branch_name name_as_branch = typecast_vocab(i->second.second); - key_name official_name = - typecast_vocab(i->second.first / name_as_branch); results[official_name] = i->first; } } ============================================================ --- tests/policy-keys/__driver__.lua 9be299f34b7ab5352201683a118e40ba4124510f +++ tests/policy-keys/__driver__.lua 92404cd9eaf305989e49d12f4c3436c9486b091b @@ -53,10 +53,9 @@ check(mtn("create_branch", "test_project check(mtn("create_branch", "test_project.delegated.otherbranch", "--no-workspace", "-k", "my_key"), 0, nil, false) --- unrelated keys don't work +-- unrelated keys don't work... check(mtn("create_branch", "test_project.badbranch", "--no-workspace", "-k", "other_key"), 1, nil, false) - -- ...unless fully qualified check(mtn("create_branch", "test_project.badbranch", "--no-workspace", "-k", "other_project.other_key"), 0, nil, false)