# # patch "commands.cc" # from [aa8e0a70612deaf609ae2e3434134f6093bebf0a] # to [ab30f2609dd08f184dab86d79b2c949f3faf3fc7] # # patch "work.cc" # from [89675c09b108ac461d5f2ae5e687a1ab7ad95d42] # to [e4bf5864e53f92f99f9eb511d21fbb26d094bff7] # # patch "work.hh" # from [eca715d5497910ca4852c123b099768634315014] # to [58c2d5cdee7232487fc8f196d74641d31e855ad6] # ======================================================================== --- commands.cc aa8e0a70612deaf609ae2e3434134f6093bebf0a +++ commands.cc ab30f2609dd08f184dab86d79b2c949f3faf3fc7 @@ -1167,20 +1167,20 @@ get_base_revision(app, base_rid, base_roster); get_work_cset(work); - vector paths; - for (vector::const_iterator i = args.begin(); i != args.end(); ++i) - paths.push_back(file_path_external(*i)); - + path_set paths; if (app.unknown) { - path_set unknown, ignored; - find_unknown_and_ignored(app, false, args, unknown, ignored); - paths.insert(paths.end(), unknown.begin(), unknown.end()); + path_set ignored; + find_unknown_and_ignored(app, false, args, paths, ignored); } + else + for (vector::const_iterator i = args.begin(); i != args.end(); ++i) + { + split_path sp; + file_path_external(*i).split(sp); + paths.insert(sp); + } - if (paths.size() == 0) - return; - build_additions(paths, base_roster, app, work); put_work_cset(work); ======================================================================== --- work.cc 89675c09b108ac461d5f2ae5e687a1ab7ad95d42 +++ work.cc e4bf5864e53f92f99f9eb511d21fbb26d094bff7 @@ -123,11 +123,14 @@ } void -build_additions(vector const & paths, +build_additions(path_set const & paths, roster_t const & base_roster, app_state & app, cset & work) { + if (paths.empty()) + return; + temp_node_id_source nis; roster_t new_roster(base_roster); editable_roster_base er(new_roster, nis); @@ -144,9 +147,9 @@ I(new_roster.has_root()); addition_builder build(app, new_roster, er); - for (vector::const_iterator i = paths.begin(); i != paths.end(); ++i) + for (path_set::const_iterator i = paths.begin(); i != paths.end(); ++i) // NB.: walk_tree will handle error checking for non-existent paths - walk_tree(*i, build); + walk_tree(file_path(*i), build); work.clear(); make_cset(base_roster, new_roster, work); @@ -158,6 +161,9 @@ app_state & app, cset & work) { + if (paths.empty()) + return; + temp_node_id_source nis; roster_t new_roster(base_roster); editable_roster_base er(new_roster, nis); ======================================================================== --- work.hh eca715d5497910ca4852c123b099768634315014 +++ work.hh 58c2d5cdee7232487fc8f196d74641d31e855ad6 @@ -61,7 +61,7 @@ }; void -build_additions(std::vector const & args, +build_additions(path_set const & targets, roster_t const & base_roster, app_state & app, cset & work);