# # # patch "mtn_cvs/cvs_sync.cc" # from [daab96d47def82a950541ddf9b43fe3dd86d3833] # to [e2cd2154c3535e411203ee296787ae7bf48c1bd7] # # patch "mtn_cvs/cvs_sync.hh" # from [edb911b87d1be61d1c2e262011b5a9fe5ed0c1a2] # to [0e4c288d7874e48d1ae1846a53ea65437e950ec2] # # patch "mtn_cvs/mtn_automate.cc" # from [a024ae4e42601bf45df31990cb7c50ccb3b60ff9] # to [f7ca4a67ed3e283b91a4bb3779e40ac79c9e8a89] # # patch "mtn_cvs/mtn_automate.hh" # from [5cff35d4a0e64a1ba615dc09bbb585c822814da1] # to [2c2a87b3bf9cfaf014f2d8583d51a5d0393bc3d5] # ============================================================ --- mtn_cvs/cvs_sync.cc daab96d47def82a950541ddf9b43fe3dd86d3833 +++ mtn_cvs/cvs_sync.cc e2cd2154c3535e411203ee296787ae7bf48c1bd7 @@ -164,16 +164,16 @@ void cvs_repository::parse_cvs_cert_head std::string &repository, std::string& module, std::string& branch) { // MM(value); - split_path sp(1,the_null_component); - repository=const_map_access(value,std::make_pair(sp,attr_key(domain+":root")))(); - module=const_map_access(value,std::make_pair(sp,attr_key(domain+":module")))(); - branch=const_map_access(value,std::make_pair(sp,attr_key(domain+":branch")))(); + file_path sp=file_path_internal(""); + repository=const_map_access(value,std::make_pair(sp,attr_key(domain+":root"))); + module=const_map_access(value,std::make_pair(sp,attr_key(domain+":module"))); + branch=const_map_access(value,std::make_pair(sp,attr_key(domain+":branch"))); } mtn_automate::sync_map_t cvs_repository::create_cvs_cert_header() const { mtn_automate::sync_map_t result; - split_path sp(1,the_null_component); + file_path sp=file_path_internal(""); result[std::make_pair(sp,attr_key(app.opts.domain()+":root"))]= attr_value(host+":"+root); result[std::make_pair(sp,attr_key(app.opts.domain()+":module"))]= attr_value(module); if (!branch.empty()) @@ -310,12 +310,12 @@ void add_missing_parents(mtn_automate::m static void add_missing_parents(mtn_automate::manifest_map const& oldr, - split_path const & sp, mtn_automate::cset & cs) -{ split_path tmp; + file_path const & sp, mtn_automate::cset & cs) +{ file_path tmp; std::string log; dump(sp,log); L(FL("add_missing_parents(,%s,)\n") % log); - for (split_path::const_iterator i=sp.begin();i!=sp.end() && i!=--sp.end();++i) + for (file_path::const_iterator i=sp.begin();i!=sp.end() && i!=--sp.end();++i) { L(FL("path comp '%s'/%d\n") % *i % sp.size()); tmp.push_back(*i); // already added? @@ -345,7 +345,7 @@ build_change_set(const cvs_client &c, mt if (fn==newm.end()) { L(FL("deleting file '%s'\n") % f->first); - split_path sp; + file_path sp; f->first.split(sp); safe_insert(cs.nodes_deleted, sp); // cvs_delta[path.as_internal()]=remove_state; @@ -361,7 +361,7 @@ build_change_set(const cvs_client &c, mt L(FL("applying state delta on '%s' : '%s' -> '%s'\n") % f->first % f->second.first % fn->second->sha1sum); I(!fn->second->sha1sum.inner()().empty()); - split_path sp; + file_path sp; f->first.split(sp); safe_insert(cs.deltas_applied, std::make_pair(sp, std::make_pair(f->second.first,fn->second->sha1sum))); // cvs_delta[path.as_internal()]=fn->second; @@ -376,7 +376,7 @@ build_change_set(const cvs_client &c, mt { L(FL("adding file '%s' as '%s'\n") % f->second->sha1sum % f->first); I(!f->second->sha1sum.inner()().empty()); - split_path sp; + file_path sp; file_path_internal(f->first).split(sp); add_missing_parents(oldr, sp, cs); safe_insert(cs.files_added, make_pair(sp, f->second->sha1sum)); @@ -634,7 +634,7 @@ void cvs_repository::attach_sync_state(c for (mtn_automate::manifest_map::const_iterator i=oldmanifest.begin(); i!=oldmanifest.end(); ++i) { - split_path sp; + file_path sp; i->first.split(sp); for (mtn_automate::attr_map_t::const_iterator a=i->second.second.begin(); a!=i->second.second.end(); ++a) @@ -652,12 +652,12 @@ void cvs_repository::attach_sync_state(c // delete old dummy attribute if present { mtn_automate::manifest_map::const_iterator f=oldmanifest.find(file_path_internal("")); if (f!=oldmanifest.end() && f->second.second.find(attr_key(app.opts.domain()+":touch"))!=f->second.second.end()) - { cs.attrs_cleared.insert(std::make_pair(split_path(1,the_null_component),attr_key(app.opts.domain()+":touch"))); + { cs.attrs_cleared.insert(std::make_pair(file_path_internal(""),attr_key(app.opts.domain()+":touch"))); any_change=true; } } if (!any_change) // this happens if only deletions happened - { cs.attrs_set[std::make_pair(split_path(1,the_null_component),attr_key(app.opts.domain()+":touch"))] + { cs.attrs_set[std::make_pair(file_path_internal(""),attr_key(app.opts.domain()+":touch"))] =attr_value("synchronized"); } } @@ -667,7 +667,7 @@ mtn_automate::sync_map_t cvs_repository: const std::map &sd=GetServerDir(); for (std::map::const_iterator i=sd.begin(); i!=sd.end();++i) - { split_path sp; + { file_path sp; std::string dirname=i->first; if (!dirname.empty()) { I(dirname[dirname.size()-1]=='/'); @@ -695,7 +695,7 @@ mtn_automate::sync_map_t cvs_repository: #else I(!i->second->cvs_version.empty()); #endif - split_path sp; + file_path sp; file_path_internal(i->first).split(sp); state[std::make_pair(sp,attr_key(app.opts.domain()+":revision"))] =attr_value(i->second->cvs_version); @@ -931,7 +931,7 @@ std::set::iterator cvs_reposit boost::shared_ptr cs=j->second; cvs_manifest parent_manifest; if (parent!=edges.end()) parent_manifest=get_files(*parent); - std::map renamed_ids; + std::map renamed_ids; for (path_set::const_iterator i=cs->nodes_deleted.begin(); i!=cs->nodes_deleted.end(); ++i) @@ -947,7 +947,7 @@ std::set::iterator cvs_reposit L(FL("delete %s -%s %s\n") % a.file % a.old_revision % a.keyword_substitution); } - for (std::map::const_iterator i + for (std::map::const_iterator i =cs->nodes_renamed.begin(); i!=cs->nodes_renamed.end(); ++i) { commit_arg a; // remove @@ -963,7 +963,7 @@ std::set::iterator cvs_reposit a=commit_arg(); // add a.file=file_path(i->second).as_internal(); I(!old->second->sha1sum.inner()().empty()); - std::map >::const_iterator change_ent = + std::map >::const_iterator change_ent = cs->deltas_applied.find(i->second); if (change_ent != cs->deltas_applied.end()) // the file content is going to change - handle that little detail now... @@ -989,7 +989,7 @@ std::set::iterator cvs_reposit AddDirectory(dir,parent); } - for (std::map::const_iterator + for (std::map::const_iterator i=cs->files_added.begin(); i!=cs->files_added.end(); ++i) { @@ -1001,7 +1001,7 @@ std::set::iterator cvs_reposit L(FL("add %s %d\n") % a.file % a.new_content.size()); } - for (std::map >::const_iterator + for (std::map >::const_iterator i=cs->deltas_applied.begin(); i!=cs->deltas_applied.end(); ++i) { @@ -1053,19 +1053,19 @@ std::set::iterator cvs_reposit fs.log_msg=e.changelog; fs.author=e.author; fs.keyword_substitution=i->second.second; - split_path sp; + file_path sp; file_path_internal(i->first).split(sp); - std::map >::const_iterator mydelta=cs->deltas_applied.find(sp); + std::map >::const_iterator mydelta=cs->deltas_applied.find(sp); if (mydelta!=cs->deltas_applied.end()) { fs.sha1sum=mydelta->second.second; } else // newly added? - { std::map::const_iterator myadd=cs->files_added.find(sp); + { std::map::const_iterator myadd=cs->files_added.find(sp); if (myadd!=cs->files_added.end()) { fs.sha1sum=myadd->second; } else // renamed? - { std::map::const_iterator myrename=renamed_ids.find(sp); + { std::map::const_iterator myrename=renamed_ids.find(sp); I(myrename!=renamed_ids.end()); fs.sha1sum=myrename->second; } @@ -1380,7 +1380,7 @@ void cvs_repository::process_sync_info(m i!=manifest.end();++i) { // populate the file info - split_path sp; + file_path sp; i->first.split(sp); file_state fs; ============================================================ --- mtn_cvs/cvs_sync.hh edb911b87d1be61d1c2e262011b5a9fe5ed0c1a2 +++ mtn_cvs/cvs_sync.hh 0e4c288d7874e48d1ae1846a53ea65437e950ec2 @@ -7,6 +7,7 @@ #include #include #include +#include "base.hh" #include "sanity.hh" #include "cvs_client.hh" #include "mtn_automate.hh" ============================================================ --- mtn_cvs/mtn_automate.cc a024ae4e42601bf45df31990cb7c50ccb3b60ff9 +++ mtn_cvs/mtn_automate.cc f7ca4a67ed3e283b91a4bb3779e40ac79c9e8a89 @@ -70,11 +70,11 @@ static inline void } static inline void -parse_path(basic_io::parser & parser, split_path & sp) +parse_path(basic_io::parser & parser, file_path & sp) { std::string s; parser.str(s); - file_path_internal(s).split(sp); + sp=file_path_internal(s); } file_id mtn_automate::put_file(file_data const& d, file_id const& base) @@ -136,7 +136,7 @@ static void print_cset(basic_io::printer } static void print_cset(basic_io::printer &printer, mtn_automate::cset const& cs) -{ for (path_set::const_iterator i = cs.nodes_deleted.begin(); +{ for (mtn_automate::path_set::const_iterator i = cs.nodes_deleted.begin(); i != cs.nodes_deleted.end(); ++i) { basic_io::stanza st; @@ -144,7 +144,7 @@ static void print_cset(basic_io::printer printer.print_stanza(st); } - for (std::map::const_iterator i = cs.nodes_renamed.begin(); + for (std::map::const_iterator i = cs.nodes_renamed.begin(); i != cs.nodes_renamed.end(); ++i) { basic_io::stanza st; @@ -153,7 +153,7 @@ static void print_cset(basic_io::printer printer.print_stanza(st); } - for (path_set::const_iterator i = cs.dirs_added.begin(); + for (mtn_automate::path_set::const_iterator i = cs.dirs_added.begin(); i != cs.dirs_added.end(); ++i) { basic_io::stanza st; @@ -161,7 +161,7 @@ static void print_cset(basic_io::printer printer.print_stanza(st); } - for (std::map::const_iterator i = cs.files_added.begin(); + for (std::map::const_iterator i = cs.files_added.begin(); i != cs.files_added.end(); ++i) { basic_io::stanza st; @@ -170,7 +170,7 @@ static void print_cset(basic_io::printer printer.print_stanza(st); } - for (std::map >::const_iterator i = cs.deltas_applied.begin(); + for (std::map >::const_iterator i = cs.deltas_applied.begin(); i != cs.deltas_applied.end(); ++i) { basic_io::stanza st; @@ -180,7 +180,7 @@ static void print_cset(basic_io::printer printer.print_stanza(st); } - for (std::set >::const_iterator i = cs.attrs_cleared.begin(); + for (std::set >::const_iterator i = cs.attrs_cleared.begin(); i != cs.attrs_cleared.end(); ++i) { basic_io::stanza st; @@ -189,7 +189,7 @@ static void print_cset(basic_io::printer printer.print_stanza(st); } - for (std::map, attr_value>::const_iterator i = cs.attrs_set.begin(); + for (std::map, attr_value>::const_iterator i = cs.attrs_set.begin(); i != cs.attrs_set.end(); ++i) { basic_io::stanza st; @@ -352,17 +352,17 @@ parse_cset(basic_io::parser & parser, string t1, t2; MM(t1); MM(t2); - split_path p1, p2; + file_path p1, p2; MM(p1); MM(p2); -// split_path prev_path; +// file_path prev_path; // MM(prev_path); -// pair prev_pair; +// pair prev_pair; // MM(prev_pair.first); // MM(prev_pair.second); - // we make use of the fact that a valid split_path is never empty + // we make use of the fact that a valid file_path is never empty // prev_path.clear(); while (parser.symp(syms::delete_node)) { @@ -429,7 +429,7 @@ parse_cset(basic_io::parser & parser, parse_path(parser, p1); parser.esym(syms::attr); parser.str(t1); - pair new_pair(p1, attr_key(t1)); + pair new_pair(p1, attr_key(t1)); // I(prev_pair.first.empty() || new_pair > prev_pair); // prev_pair = new_pair; safe_insert(cs.attrs_cleared, new_pair); @@ -442,7 +442,7 @@ parse_cset(basic_io::parser & parser, parse_path(parser, p1); parser.esym(syms::attr); parser.str(t1); - pair new_pair(p1, attr_key(t1)); + pair new_pair(p1, attr_key(t1)); // I(prev_pair.first.empty() || new_pair > prev_pair); // prev_pair = new_pair; parser.esym(syms::value); @@ -518,7 +518,7 @@ static const char *const sync_prefix="x- // needed by find_newest_sync: check whether a revision has up to date synch information static const char *const sync_prefix="x-sync-attr-"; -typedef std::map, attr_value> sync_map_t; +typedef std::map, attr_value> sync_map_t; static bool begins_with(const std::string &s, const std::string &sub) { std::string::size_type len=sub.size(); @@ -535,7 +535,7 @@ bool mtn_automate::is_synchronized(revis { L(FL("is_synch: rev %s testing changeset\n") % rid); boost::shared_ptr cs=rev.edges.begin()->second; - for (std::map, attr_value>::const_iterator i=cs->attrs_set.begin(); + for (std::map, attr_value>::const_iterator i=cs->attrs_set.begin(); i!=cs->attrs_set.end();++i) { if (begins_with(i->first.second(),prefix)) // TODO: omit some attribute changes (repository, keyword, directory) return true; @@ -619,14 +619,14 @@ static void parse_attributes(std::string basic_io::parser parser(tokenizer); std::string t1, t2; - split_path p1; + file_path p1; while (parser.symp(syms::clear)) { parser.sym(); parse_path(parser, p1); parser.esym(syms::attr); parser.str(t1); - pair new_pair(p1, attr_key(t1)); + pair new_pair(p1, attr_key(t1)); safe_erase(result, new_pair); } while (parser.symp(syms::set)) @@ -635,7 +635,7 @@ static void parse_attributes(std::string parse_path(parser, p1); parser.esym(syms::attr); parser.str(t1); - pair new_pair(p1, attr_key(t1)); + pair new_pair(p1, attr_key(t1)); parser.esym(syms::value); parser.str(t2); safe_insert(result, make_pair(new_pair, attr_value(t2))); @@ -684,9 +684,7 @@ sync_map_t mtn_automate::get_sync_info(r { if (begins_with(j->first(),prefix)) { - split_path sp; - i->first.split(sp); - result[std::make_pair(sp,j->first)]=j->second; + result[std::make_pair(i->first,j->first)]=j->second; // else W(F("undefined value of %s %s\n") % sp % j->first()); } } ============================================================ --- mtn_cvs/mtn_automate.hh 5cff35d4a0e64a1ba615dc09bbb585c822814da1 +++ mtn_cvs/mtn_automate.hh 2c2a87b3bf9cfaf014f2d8583d51a5d0393bc3d5 @@ -10,6 +10,7 @@ // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR // PURPOSE. +#include #include "mtn_pipe.hh" #include #include @@ -22,15 +23,16 @@ struct mtn_automate : mtn_pipe { typedef std::map attr_map_t; // (directories have a null file_id) typedef std::map > manifest_map; + typedef std::set path_set; struct cset { path_set nodes_deleted; path_set dirs_added; - std::map files_added; - std::map nodes_renamed; - std::map > deltas_applied; - std::set > attrs_cleared; - std::map, attr_value> attrs_set; + std::map files_added; + std::map nodes_renamed; + std::map > deltas_applied; + std::set > attrs_cleared; + std::map, attr_value> attrs_set; bool is_nontrivial() const { return !nodes_deleted.empty() || !files_added.empty() || !deltas_applied.empty() @@ -48,7 +50,7 @@ struct mtn_automate : mtn_pipe bool trusted; certificate() : signature(unknown), trusted() {} }; - typedef std::map, attr_value> sync_map_t; + typedef std::map, attr_value> sync_map_t; // methods void check_interface_revision(std::string const&minimum);