# # # patch "mtn_cvs/cvs_edge.cc" # from [f8a2e067ccf5449f65dafaefcb6e79775fb353c1] # to [2ff6c18ae13b2af573f3d9aaba130ecd5f611537] # # patch "mtn_cvs/cvs_sync.cc" # from [cb45ce82c1fe72cde7906c3e4af89b139d7b6974] # to [0673b89d59fffdd5d6b6d0c092eab6bb5c4f6e77] # # patch "mtn_cvs/cvs_sync.hh" # from [350f3f5ea1300fbfb18cf8cb88c14ba179ce2d16] # to [8d825ef94a8aafa2a8f40396603e8042f9f71540] # # patch "mtn_cvs/mtn_automate.cc" # from [da1e165ae5c090fa9177ce71660cef09ff1582e7] # to [4cc6bc36cea53fc4a17db351cf8c2518f6ea52e1] # # patch "mtn_cvs/mtn_automate.hh" # from [a35ce90bf7b002e3dc50629c3bc8c9563c40163a] # to [463f2dc405ef99a6cff9afeb8068055f2ed43965] # # patch "mtn_cvs/mtn_cvs.cc" # from [8f777dcc5ced081ce52025cb18ca86f7457f295f] # to [3b120834a7cf02dabef0931c33c9ee2d65d3cb86] # # patch "mtn_cvs/options_list.hh" # from [85a2c2ed794980775702ce96e4a7f5def257a78c] # to [3bab48751ad37ca16b591c2fdddbe3689c656809] # ============================================================ --- mtn_cvs/cvs_edge.cc f8a2e067ccf5449f65dafaefcb6e79775fb353c1 +++ mtn_cvs/cvs_edge.cc 2ff6c18ae13b2af573f3d9aaba130ecd5f611537 @@ -98,7 +98,7 @@ cvs_edge::cvs_edge(const revision_id &ri cvs_edge::cvs_edge(const revision_id &rid, mtncvs_state &app) : changelog_valid(), time(), time2() -{ revision=hexenc(rid.inner()); +{ revision=rid; // get author + date std::vector certs=app.get_revision_certs(rid); ============================================================ --- mtn_cvs/cvs_sync.cc cb45ce82c1fe72cde7906c3e4af89b139d7b6974 +++ mtn_cvs/cvs_sync.cc 0673b89d59fffdd5d6b6d0c092eab6bb5c4f6e77 @@ -105,7 +105,7 @@ std::string debug_manifest(const cvs_man { result+= i->first + " " + i->second->cvs_version; if (!i->second->keyword_substitution.empty()) result+="/"+i->second->keyword_substitution; - result+=" " + std::string(i->second->dead?"dead ":"") + i->second->sha1sum() + "\n"; + result+=" " + std::string(i->second->dead?"dead ":"") + i->second->sha1sum.inner()() + "\n"; } return result; } @@ -118,7 +118,7 @@ static dump(cvs_sync::file_state const& if (fs.dead) result+= "dead"; else if (fs.size) result+= boost::lexical_cast(fs.size); else if (fs.patchsize) result+= "p" + boost::lexical_cast(fs.patchsize); - else if (!fs.sha1sum().empty()) result+= fs.sha1sum().substr(0,4) + fs.keyword_substitution; + else if (!fs.sha1sum.inner()().empty()) result+= fs.sha1sum.inner()().substr(0,4) + fs.keyword_substitution; result+=" "+fs.log_msg.substr(0,20)+"\n"; } @@ -174,10 +174,10 @@ mtn_automate::sync_map_t cvs_repository: { mtn_automate::sync_map_t result; split_path sp(1,the_null_component); - result[std::make_pair(sp,app.opts.domain()+":root")]= host+":"+root; - result[std::make_pair(sp,app.opts.domain()+":module")]= module; + 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()) - result[std::make_pair(sp,app.opts.domain()+":branch")]= branch; + result[std::make_pair(sp,attr_key(app.opts.domain()+":branch"))]= attr_value(branch); return result; } @@ -185,7 +185,7 @@ static dump(cvs_sync::cvs_edge const& e, static dump(cvs_sync::cvs_edge const& e, std::string& result) { result= "[" + cvs_repository::time_t2human(e.time); if (e.time!=e.time2) result+= "+" + boost::lexical_cast(e.time2-e.time); - if (!e.revision().empty()) result+= "," + e.revision().substr(0,4); + if (!e.revision.inner()().empty()) result+= "," + e.revision.inner()().substr(0,4); if (!e.xfiles.empty()) result+= "," + boost::lexical_cast(e.xfiles.size()) + (e.delta_base.inner()().empty()?"files":"deltas"); @@ -285,10 +285,10 @@ void cvs_repository::prime_log_cb::revis if (iter2.second && repo.cvs_edges_ticker.get()) ++(*repo.cvs_edges_ticker); } -void cvs_repository::store_contents(const data &dat, hexenc &sha1sum) +void cvs_repository::store_contents(file_data const &dat, file_id &sha1sum) { if (file_id_ticker.get()) ++(*file_id_ticker); - sha1sum=app.put_file(dat).inner(); + sha1sum=app.put_file(dat); } static void apply_delta(piece::piece_table &contents, const std::string &patch) @@ -297,17 +297,15 @@ static void apply_delta(piece::piece_tab std::swap(contents,after); } -void cvs_repository::store_delta(const std::string &new_contents, - const std::string &old_contents, - // this argument is unused since we can no longer use the rcs patch - const std::string &dummy, - const hexenc &from, hexenc &to) -{ if (old_contents.empty()) +void cvs_repository::store_delta(file_data const& new_contents, + file_data const& old_contents, + file_id const&from, file_id &to) +{ if (old_contents.inner()().empty()) { store_contents(new_contents, to); return; } if (file_id_ticker.get()) ++(*file_id_ticker); - to=app.put_file(new_contents,from).inner(); + to=app.put_file(new_contents,from); } static @@ -362,7 +360,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().empty()); + I(!fn->second->sha1sum.inner()().empty()); split_path sp; f->first.split(sp); safe_insert(cs.deltas_applied, std::make_pair(sp, std::make_pair(f->second.first,fn->second->sha1sum))); @@ -377,7 +375,7 @@ build_change_set(const cvs_client &c, mt if (mi==oldr.end()) { L(FL("adding file '%s' as '%s'\n") % f->second->sha1sum % f->first); - I(!f->second->sha1sum().empty()); + I(!f->second->sha1sum.inner()().empty()); split_path sp; file_path_internal(f->first).split(sp); add_missing_parents(oldr, sp, cs); @@ -419,7 +417,8 @@ void cvs_repository::store_update(std::s unsigned hashidx=hash.OUTPUT_LENGTH; for (;hashidx && hashval[hashidx-1]==Botan::byte(md5sum[hashidx-1]);--hashidx) ; if (!hashidx) - { store_delta(contents, old_contents, u.patch, s->sha1sum, const_cast&>(s2->sha1sum)); + { store_delta(file_data(contents), file_data(old_contents), s->sha1sum, + const_cast(s2->sha1sum)); } else { E(false, F("MD5 sum %s<>%s") % u.checksum @@ -427,11 +426,11 @@ void cvs_repository::store_update(std::s } } else - { if (!s->sha1sum().empty()) + { if (!s->sha1sum.inner()().empty()) // we default to patch if it's at all possible - store_delta(u.contents, contents, std::string(), s->sha1sum, const_cast&>(s2->sha1sum)); + store_delta(file_data(u.contents), file_data(contents), s->sha1sum, const_cast(s2->sha1sum)); else - store_contents(u.contents, const_cast&>(s2->sha1sum)); + store_contents(file_data(u.contents), const_cast(s2->sha1sum)); const_cast(s2->size)=u.contents.size(); contents=u.contents; const_cast(s2->keyword_substitution)=u.keyword_substitution; @@ -462,7 +461,7 @@ void cvs_repository::update(std::setsince_when && c.mod_time!=-1 && s2->since_when!=sync_since) { W(F("checkout time %s and log time %s disagree\n") % time_t2human(c.mod_time) % time_t2human(s2->since_when)); } - store_contents(c.contents, const_cast&>(s2->sha1sum)); + store_contents(file_data(c.contents), const_cast(s2->sha1sum)); const_cast(s2->size)=c.contents.size(); contents=c.contents; const_cast(s2->keyword_substitution)=c.keyword_substitution; @@ -482,7 +481,7 @@ void cvs_repository::update(std::set(s2->md5sum)=""; const_cast(s2->patchsize)=0; - store_contents(c.contents, const_cast&>(s2->sha1sum)); + store_contents(file_data(c.contents), const_cast(s2->sha1sum)); const_cast(s2->size)=c.contents.size(); contents=c.contents; const_cast(s2->keyword_substitution)=c.keyword_substitution; @@ -494,7 +493,7 @@ void cvs_repository::update(std::set(s2->md5sum)=""; const_cast(s2->patchsize)=0; - store_contents(c.contents, const_cast&>(s2->sha1sum)); + store_contents(file_data(c.contents), const_cast(s2->sha1sum)); const_cast(s2->size)=c.contents.size(); contents=c.contents; const_cast(s2->keyword_substitution)=c.keyword_substitution; @@ -510,7 +509,7 @@ void cvs_repository::store_checkout(std: if (c.mod_time!=s2->since_when && c.mod_time!=-1 && s2->since_when!=sync_since) { W(F("checkout time %s and log time %s disagree\n") % time_t2human(c.mod_time) % time_t2human(s2->since_when)); } - store_contents(c.contents, const_cast&>(s2->sha1sum)); + store_contents(file_data(c.contents), const_cast(s2->sha1sum)); const_cast(s2->size)=c.contents.size(); file_contents=c.contents; const_cast(s2->keyword_substitution)=c.keyword_substitution; @@ -525,7 +524,7 @@ void cvs_repository::store_checkout(std: if (c.mod_time!=s2->since_when && c.mod_time!=-1 && s2->since_when!=sync_since) { W(F("checkout time %s and log time %s disagree\n") % time_t2human(c.mod_time) % time_t2human(s2->since_when)); } - store_contents(c.contents, const_cast&>(s2->sha1sum)); + store_contents(file_data(c.contents), const_cast(s2->sha1sum)); const_cast(s2->size)=c.contents.size(); file_contents=c.contents; const_cast(s2->keyword_substitution)=c.keyword_substitution; @@ -573,7 +572,7 @@ void cvs_repository::fill_manifests(std: if (s!=f->second.known_states.end() && !s->dead) // a matching revision was found { current_manifest[f->first]=s; - I(!s->sha1sum().empty()); + I(!s->sha1sum.inner()().empty()); check_split(s,f->second.known_states.end(),e); } } @@ -591,7 +590,7 @@ void cvs_repository::fill_manifests(std: else { mi->second=s; - I(!s->sha1sum().empty()); + I(!s->sha1sum.inner()().empty()); } check_split(s,f->second.known_states.end(),e); } @@ -676,14 +675,14 @@ mtn_automate::sync_map_t cvs_repository: } file_path_internal(dirname).split(sp); if (!dirname.empty() || i->second!=root+"/"+module+"/") - state[std::make_pair(sp,attr_key(app.opts.domain()+":path"))]=i->second; + state[std::make_pair(sp,attr_key(app.opts.domain()+":path"))]=attr_value(i->second); } for (cvs_manifest::const_iterator i=e.xfiles.begin(); i!=e.xfiles.end(); ++i) { #if 1 if (i->second->cvs_version.empty()) - { if (i->second->sha1sum().empty()) + { if (i->second->sha1sum.inner()().empty()) { W(F("internal error: directory '%s' skipped\n") % i->first); continue; } @@ -699,14 +698,14 @@ mtn_automate::sync_map_t cvs_repository: split_path sp; file_path_internal(i->first).split(sp); state[std::make_pair(sp,attr_key(app.opts.domain()+":revision"))] - =i->second->cvs_version; + =attr_value(i->second->cvs_version); if (!i->second->keyword_substitution.empty()) state[std::make_pair(sp,attr_key(app.opts.domain()+":keyword"))] - =i->second->keyword_substitution; + =attr_value(i->second->keyword_substitution); // FIXME: How to flag locally modified files? add the synched sha1sum? - if (!i->second->sha1sum().empty()) + if (!i->second->sha1sum.inner()().empty()) state[std::make_pair(sp,attr_key(app.opts.domain()+":sha1"))] - =i->second->sha1sum().substr(0,6); + =attr_value(i->second->sha1sum.inner()().substr(0,6)); } return state; } @@ -716,13 +715,13 @@ void cvs_repository::commit_cvs2mtn(std: { revision_id parent_rid; cvs_edges_ticker.reset(0); - L(FL("commit_revisions(%s %s)\n") % time_t2human(e->time) % e->revision()); + L(FL("commit_revisions(%s %s)\n") % time_t2human(e->time) % e->revision.inner()()); revision_ticker.reset(new ticker("revisions", "R", 3)); if (e!=edges.begin()) { std::set::const_iterator before=e; --before; - L(FL("found last committed %s %s\n") % time_t2human(before->time) % before->revision()); - I(!before->revision().empty()); + L(FL("found last committed %s %s\n") % time_t2human(before->time) % before->revision.inner()()); + I(!before->revision.inner()().empty()); parent_rid=before->revision; } // temp_node_id_source nis; @@ -732,7 +731,7 @@ void cvs_repository::commit_cvs2mtn(std: mtn_automate::cset cs; I(e->delta_base.inner()().empty()); // no delta yet cvs_manifest child_manifest=get_files(*e); - L(FL("build_change_set(%s %s)\n") % time_t2human(e->time) % e->revision()); + L(FL("build_change_set(%s %s)\n") % time_t2human(e->time) % e->revision.inner()()); // revision_set rev; // boost::shared_ptr cs(new cset()); mtn_automate::manifest_map oldmanifest; @@ -764,7 +763,7 @@ void cvs_repository::commit_cvs2mtn(std: revision_id child_rid=app.put_revision(parent_rid,cs); if (revision_ticker.get()) ++(*revision_ticker); L(FL("CVS Sync: Inserted revision %s into repository\n") % child_rid); - e->revision=child_rid.inner(); + e->revision=child_rid; app.cert_revision(child_rid,"branch",app.opts.branch_name()); std::string author=e->author; @@ -956,8 +955,8 @@ std::set::iterator cvs_reposit a=commit_arg(); // add a.file=file_path(i->second).as_internal(); - I(!old->second->sha1sum().empty()); - a.new_content=app.get_file(old->second->sha1sum); + I(!old->second->sha1sum.inner()().empty()); + a.new_content=app.get_file(old->second->sha1sum).inner()(); commits.push_back(a); L(FL("rename to %s %d\n") % a.file % a.new_content.size()); } @@ -983,7 +982,7 @@ std::set::iterator cvs_reposit commit_arg a; a.file=file_path(i->first).as_internal(); // if (a.file==".mtn-sync-"+app.opts.domain()) continue; - a.new_content=app.get_file(i->second); + a.new_content=app.get_file(i->second).inner()(); commits.push_back(a); L(FL("add %s %d\n") % a.file % a.new_content.size()); } @@ -999,14 +998,14 @@ std::set::iterator cvs_reposit I(old!=parent_manifest.end()); a.old_revision=old->second->cvs_version; a.keyword_substitution=old->second->keyword_substitution; - a.new_content=app.get_file(i->second.second); + a.new_content=app.get_file(i->second.second).inner()(); commits.push_back(a); L(FL("delta %s %s %s %d\n") % a.file % a.old_revision % a.keyword_substitution % a.new_content.size()); } if (commits.empty()) - { W(F("revision %s: nothing to commit") % e.revision()); + { W(F("revision %s: nothing to commit") % e.revision.inner()()); e.delta_base=parent->revision; cert_cvs(e); revision_lookup[e.revision]=edges.insert(e).first; @@ -1015,7 +1014,7 @@ std::set::iterator cvs_reposit } std::string changelog; changelog=e.changelog+"\nmonotone "+e.author+" " - +cvs_client::time_t2rfc822(e.time)+" "+e.revision()+"\n"; + +cvs_client::time_t2rfc822(e.time)+" "+e.revision.inner()().substr(0,6)+"\n"; // gather information CVS does not know about into the changelog changelog+=gather_merge_information(e.revision); std::map > result @@ -1041,12 +1040,12 @@ std::set::iterator cvs_reposit file_path_internal(i->first).split(sp); std::map >::const_iterator mydelta=cs->deltas_applied.find(sp); if (mydelta!=cs->deltas_applied.end()) - { fs.sha1sum=mydelta->second.second.inner(); + { fs.sha1sum=mydelta->second.second; } else // newly added? { std::map::const_iterator myadd=cs->files_added.find(sp); I(myadd!=cs->files_added.end()); - fs.sha1sum=myadd->second.inner(); + fs.sha1sum=myadd->second; } std::pair::iterator,bool> newelem= files[i->first].known_states.insert(fs); @@ -1165,7 +1164,7 @@ void cvs_repository::commit() std::set::iterator now_iter=last_known_revision(); while (now_iter!=edges.end()) { const cvs_edge &now=*now_iter; - I(!now.revision().empty()); + I(!now.revision.inner()().empty()); L(FL("looking for children of revision %s\n") % now.revision); std::vector children=app.get_revision_children(now.revision); @@ -1270,9 +1269,9 @@ cvs_sync::cvs_repository *cvs_sync::prep revision_id lastid; if (app.opts.branch_name().empty()) { - app.opts.branch_name=app.get_option("branch"); + app.opts.branch_name=utf8(app.get_option("branch")); if (!app.opts.branch_name().empty() && app.opts.branch_name()[app.opts.branch_name().size()-1]=='\n') - app.opts.branch_name=app.opts.branch_name().substr(0,app.opts.branch_name().size()-1); + app.opts.branch_name=utf8(app.opts.branch_name().substr(0,app.opts.branch_name().size()-1)); } N(!app.opts.branch_name().empty(), F("no destination branch specified\n")); { std::string rep,mod,br; @@ -1331,9 +1330,9 @@ cvs_file_state cvs_repository::remember( const_cast(i->since_when)=fs.since_when; static file_id emptysha1sum; if (emptysha1sum.inner()().empty()) - calculate_ident(data(),const_cast&>(emptysha1sum.inner())); + calculate_ident(file_data(),emptysha1sum); if (i->log_msg=="last cvs update (modified)" - && i->sha1sum==emptysha1sum.inner() + && i->sha1sum==emptysha1sum && i->author==("unknown@"+host)) { W(F("replacing fake contents for %s V%s\n") % filename % i->cvs_version); @@ -1351,7 +1350,7 @@ void cvs_repository::process_sync_info(m void cvs_repository::process_sync_info(mtn_automate::sync_map_t const& sync_info, revision_id const& rid) { mtn_automate::manifest_map manifest=app.get_manifest_of(rid); // populate data structure using this sync info - cvs_edge e(rid.inner(),app); + cvs_edge e(rid,app); for (mtn_automate::manifest_map::const_iterator i=manifest.begin(); i!=manifest.end();++i) @@ -1363,11 +1362,11 @@ void cvs_repository::process_sync_info(m file_state fs; fs.since_when=e.time; fs.cvs_version=const_map_access(sync_info,std::make_pair(sp,attr_key(app.opts.domain()+":revision")))(); - fs.cvssha1sum=const_map_access(sync_info,std::make_pair(sp,attr_key(app.opts.domain()+":sha1")))(); + fs.cvssha1sum=file_id(const_map_access(sync_info,std::make_pair(sp,attr_key(app.opts.domain()+":sha1")))()); fs.keyword_substitution=const_map_access(sync_info,std::make_pair(sp,attr_key(app.opts.domain()+":keywords")))(); - fs.sha1sum=i->second.first.inner(); - if (fs.sha1sum().empty()) continue; // directory node + fs.sha1sum=i->second.first; + if (fs.sha1sum.inner()().empty()) continue; // directory node fs.log_msg=e.changelog; fs.author=e.author; std::string path=file_path(i->first).as_internal(); @@ -1396,14 +1395,14 @@ void cvs_repository::process_sync_info(m fs.log_msg=i->changelog; fs.author=i->author; fs.dead=true; - L(FL("file %s gets removed at %s\n") % j->first % i->revision()); + L(FL("file %s gets removed at %s\n") % j->first % i->revision.inner()()); remember(files[j->first].known_states,fs,j->first); } } } catch (informative_failure &e) { L(FL("failed to reconstruct CVS revisions: %s: %s->%s\n") - % e.what % last->revision() % i->revision()); + % e.what % last->revision.inner()() % i->revision.inner()()); } last=i; } @@ -1428,7 +1427,7 @@ void cvs_repository::update() retrieve_modules(); std::set::iterator now_iter=last_known_revision(); const cvs_edge &now=*now_iter; - I(!now.revision().empty()); + I(!now.revision.inner()().empty()); std::vector file_revisions; std::vector results; const cvs_manifest &m=get_files(now); @@ -1479,8 +1478,8 @@ void cvs_repository::update() store_checkout(s2,c,file_contents); } else - { I(!last->sha1sum().empty()); - file_contents=app.get_file(last->sha1sum); + { I(!last->sha1sum.inner()().empty()); + file_contents=app.get_file(last->sha1sum).inner()(); initial_contents=file_contents; } for (std::set::const_iterator s=last; @@ -1498,7 +1497,7 @@ void cvs_repository::update() cvs_client::update c=Update(i->file,s2->cvs_version); const_cast(s2->md5sum)=""; const_cast(s2->patchsize)=0; - store_contents(c.contents, const_cast&>(s2->sha1sum)); + store_contents(file_data(c.contents), const_cast(s2->sha1sum)); const_cast(s2->size)=c.contents.size(); const_cast(s2->keyword_substitution)=c.keyword_substitution; } @@ -1633,7 +1632,7 @@ void cvs_client::validate_path(const std server_dir[local]=server; } -void read_file(std::string const& name, data &result) +static void read_file(std::string const& name, file_data &result) { std::string dest; ifstream is(name.c_str()); while (is.good()) @@ -1641,7 +1640,7 @@ void read_file(std::string const& name, is.read(buf,sizeof buf); if (is.gcount()) dest+=std::string(buf,buf+is.gcount()); } - result=data(dest); + result=file_data(dest); } void cvs_repository::takeover_dir(const std::string &path) @@ -1704,7 +1703,7 @@ void cvs_repository::takeover_dir(const if (sbuf.st_mtime!=modtime) { L(FL("modified %s %u %u\n") % filename % modtime % sbuf.st_mtime); fs.log_msg="partially overwritten content from last update"; - store_contents(std::string(), fs.sha1sum); + store_contents(file_data(), fs.sha1sum); f->second.known_states.insert(fs); fs.since_when=time(NULL); @@ -1713,7 +1712,7 @@ void cvs_repository::takeover_dir(const } // import the file and check whether it is (un-)changed fs.log_msg="initial cvs content"; - data new_data; + file_data new_data; read_file(filename, new_data); store_contents(new_data, fs.sha1sum); f->second.known_states.insert(fs); @@ -1781,7 +1780,7 @@ void cvs_repository::takeover() { ofstream of("_MTN/revision"); of << "format_version \"1\"\n\n" "new_manifest []\n\n" - "old_revision [" << (--edges.end())->revision() << "]\n"; + "old_revision [" << (--edges.end())->revision.inner()() << "]\n"; } // like in commit ? // update_any_attrs(app); ============================================================ --- mtn_cvs/cvs_sync.hh 350f3f5ea1300fbfb18cf8cb88c14ba179ce2d16 +++ mtn_cvs/cvs_sync.hh 8d825ef94a8aafa2a8f40396603e8042f9f71540 @@ -41,8 +41,8 @@ struct file_state unsigned patchsize; bool dead; std::string md5sum; // hexenc - hexenc cvssha1sum; - hexenc sha1sum; // make this a file_id + file_id cvssha1sum; + file_id sha1sum; std::string log_msg; std::string author; std::string keyword_substitution; @@ -76,8 +76,7 @@ struct cvs_edge // careful this name is mutable cvs_manifest xfiles; // manifest (or use cvs_manifest) // mutable unsigned cm_delta_depth; // we store a full manifest every N revisions // static const unsigned cm_max_delta_depth=50; - mutable hexenc revision; // monotone revision - // make this a revision_id + mutable revision_id revision; // monotone revision // I do not want this to be 3 hours (how comes?) static size_t const cvs_window = 5; @@ -155,9 +154,9 @@ private: void fill_manifests(std::set::iterator e); void commit_cvs2mtn(std::set::iterator e); -// std::string is equivalent to data - void store_contents(const data &contents, hexenc &sha1sum); - void store_delta(const std::string &new_contents, const std::string &old_contents, const std::string &patch, const hexenc &from, hexenc &to); + void store_contents(file_data const&contents, file_id &sha1sum); + void store_delta(file_data const& new_contents, file_data const &old_contents, + file_id const&from, file_id &to); void cert_cvs(const cvs_edge &e); cvs_file_state remember(std::set &s,const file_state &fs, cvs_file_path const& filename); ============================================================ --- mtn_cvs/mtn_automate.cc da1e165ae5c090fa9177ce71660cef09ff1582e7 +++ mtn_cvs/mtn_automate.cc 4cc6bc36cea53fc4a17db351cf8c2518f6ea52e1 @@ -102,7 +102,7 @@ mtn_automate::sync_map_t mtn_automate::g parse_path(parser, p1); parser.esym(syms::attr); parser.str(t1); - pair new_pair(p1, 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))); @@ -110,17 +110,17 @@ mtn_automate::sync_map_t mtn_automate::g return result; } -file_id mtn_automate::put_file(data const& d, file_id const& base) +file_id mtn_automate::put_file(file_data const& d, file_id const& base) { std::vector args; if (!null_id(base.inner())) args.push_back(base.inner()()); - args.push_back(d()); + args.push_back(d.inner()()); return file_id(automate("put_file",args)); } -std::string mtn_automate::get_file(file_id const& fid) +file_data mtn_automate::get_file(file_id const& fid) { std::vector args; args.push_back(fid.inner()()); - return automate("get_file",args); + return file_data(automate("get_file",args)); } #include @@ -444,7 +444,7 @@ parse_cset(basic_io::parser & parser, parse_path(parser, p1); parser.esym(syms::attr); parser.str(t1); - pair new_pair(p1, 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); @@ -457,7 +457,7 @@ parse_cset(basic_io::parser & parser, parse_path(parser, p1); parser.esym(syms::attr); parser.str(t1); - pair new_pair(p1, 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); ============================================================ --- mtn_cvs/mtn_automate.hh a35ce90bf7b002e3dc50629c3bc8c9563c40163a +++ mtn_cvs/mtn_automate.hh 463f2dc405ef99a6cff9afeb8068055f2ed43965 @@ -57,12 +57,12 @@ struct mtn_automate : mtn_pipe sync_map_t get_sync_info(revision_id const& rid, std::string const& domain); void put_sync_info(revision_id const& rid, std::string const& domain, sync_map_t const& data); - file_id put_file(data const& d, file_id const& base=file_id()); + file_id put_file(file_data const& d, file_id const& base=file_id()); manifest_map get_manifest_of(revision_id const& rid); revision_id put_revision(revision_id const& parent, cset const& changes); void cert_revision(revision_id const& rid, std::string const& name, std::string const& value); std::vector get_revision_certs(revision_id const& rid); - std::string get_file(file_id const& fid); + file_data get_file(file_id const& fid); std::vector get_revision_children(revision_id const& rid); std::vector get_revision_parents(revision_id const& rid); revision_t get_revision(revision_id const& rid); ============================================================ --- mtn_cvs/mtn_cvs.cc 8f777dcc5ced081ce52025cb18ca86f7457f295f +++ mtn_cvs/mtn_cvs.cc 3b120834a7cf02dabef0931c33c9ee2d65d3cb86 @@ -281,7 +281,7 @@ cpp_main(int argc, char ** argv) if (prog_name.rfind(".exe") == prog_name.size() - 4) prog_name = prog_name.substr(0, prog_name.size() - 4); utf8 prog_name_u; - system_to_utf8(prog_name, prog_name_u); + system_to_utf8(external(prog_name), prog_name_u); ui.prog_name = prog_name_u(); I(!ui.prog_name.empty()); } ============================================================ --- mtn_cvs/options_list.hh 85a2c2ed794980775702ce96e4a7f5def257a78c +++ mtn_cvs/options_list.hh 3bab48751ad37ca16b591c2fdddbe3689c656809 @@ -27,7 +27,7 @@ OPT(since, "since", utf8, , N_("set hist OPT(since, "since", utf8, , N_("set history start for CVS pull")) #ifdef option_bodies { - since = arg; + since = utf8(arg); } #endif @@ -116,14 +116,14 @@ GOPT(mtn_binary, "mtn", utf8, , gettext_ GOPT(mtn_binary, "mtn", utf8, , gettext_noop("monotone binary name")) #ifdef option_bodies { - mtn_binary = arg; + mtn_binary = utf8(arg); } #endif GOPT(domain, "domain", utf8, "cvs", gettext_noop("synchronization domain")) #ifdef option_bodies { - domain = arg; + domain = utf8(arg); } #endif @@ -131,7 +131,7 @@ OPTION(globals, mtn_option, true, "mtn-o OPTION(globals, mtn_option, true, "mtn-option", N_("pass option to monotone")) #ifdef option_bodies { - mtn_options.push_back(arg); + mtn_options.push_back(utf8(arg)); } #endif @@ -148,7 +148,7 @@ OPTION(globals, dump, true, "dump", #ifdef option_bodies #define TRANSOPT3(name,optstring,desc) TRANSOPT_sub(name,true,optstring,desc) \ -{ mtn_options.push_back("--" #name "=" +arg); } +{ mtn_options.push_back(utf8("--" #name "=" +arg)); } #else #define TRANSOPT3(name,optstring,desc) TRANSOPT_sub(name,true,optstring,desc) #endif