On Thu, 2006-07-13 at 01:43 -0700, Nathaniel Smith wrote: > On Wed, Jul 12, 2006 at 01:09:19AM -0500, Timothy Brownawell wrote: > > The new testsuite seems to be "done" now, but some things aren't optimal > > yet. In particular I'd like to make tester fairly independent from the > > rest of monotone by factoring out sanity.{cc,hh} and dependencies into a > > libsanity or similar, and by making tester (and libsanity) not depend on > > paths.{cc,hh} or the vocab* files (or constants.{cc,hh}). > > > > So far it looks like sanity and dependencies make very minimal use of > > these files, so this shouldn't be (much of) a problem. I'll post again > > when I have a better idea of exactly how much would need to be changed. > > I can't really tell how important these refactorings are from your > description, but that's okay, because I trust your taste. I do want > to just double-check that you're not doing more work in this > particular direction than you otherwise would, just because it's what > you wrote up for SoC -- IIUC, last year some of your time ended up > being used less effectively than it might have, because the project > you were worked on was superceded by the unfolding roster design > plans, but you kept on to make sure you fulfilled the SoC > requirements. So, just re-emphasizing that if you feel like calling > the testsuite good enough and starting working on per-file DAGs or > building a better automate or whatever else, cool; and if not (or not > yet), cool too.
The reason behind the refactorings is that tester seems like it could be a very useful project on its own. But, if it's all tangled up with the rest of the monotone sources, having it be independent becomes a bit of a pain. So far I have sanity dependencies reduced to ui, quick_alloc, platform, simplestring_xform, constants, and numeric_vocab. constants is only used for default_encoding by split_into_lines, and for log_line_sz in sanity.cc. The lua extensions still depend on paths, transforms, and vocab. Changes to get this are: * add a platform_wrapped.hh, so the platform-specific functions can take strings instead of paths. Should be ok, since they don't do path operations on them. * sanity::filename becomes a string instead of a system_path * display_width moves from charset to ui, and now takes a string. Almost every place it was used, it was called as display_width(utf8(whatever)). I'm considering instead to make sanity not depend on ui, in which case this can be put back. (this particular change may be slightly questionable) * ui.redirect_log_to now takes a string instead of a system_path. This can also be put back if I make sanity not depend on ui. What I have so far is attached as a diff, and is available on nvm.tbrownaw.tester-spinoff . Tim
# # old_revision [ca4b9c36ceec4c8485e7b81a222da045d1b6bfeb] # # add_file "platform-wrapped.hh" # content [3e6a8b07b4a95429f95456a6de1424066e91eb77] # # patch "ChangeLog" # from [8ec3d679b83d6b3a196d35543b94494e2834943c] # to [8a351fe5db23bb84ae8e0a571a94d9d5b38f8421] # # patch "Makefile.am" # from [5e3ee4929ec349644742ff29ab02d1132d709065] # to [1e29076102800e28443e93011a2923444da83874] # # patch "app_state.cc" # from [da582b88452d7a7f2b94fc389ea0d402d12b81cc] # to [b1bc0c4beed9227f28aa34bcddfe8a76ff9d9837] # # patch "charset.cc" # from [f7b71f28c5f99965532a3fcac9580df7026d829c] # to [9b101e3bf300e2dd4332aee282ffd38e5e7e0393] # # patch "charset.hh" # from [25884bb58fda092bc5dc4a34ad2ad963ccda180a] # to [5f90820ea70ef2c6e67aaf3ce1de0c4ca78e6638] # # patch "commands.cc" # from [40263fe4929d57fb3a37a7c4efcbdd5dc45d588e] # to [0d57c5fa77ac650ffb6115cb75a8b2e4c840dc10] # # patch "file_io.cc" # from [420b99ba06117525c991c07c5ee45eb9e1908826] # to [da954957486c417075659279ffdd3dc4f3a293c9] # # patch "localized_file_io.cc" # from [848b7e4272312c3c2f2c14f660edae442f072515] # to [4cad41827577db94bbbaa0ce2966fee24eef9548] # # patch "mkstemp.cc" # from [5a022575a388280c876ebcf9c398765932d4d31d] # to [a9c32c60895ce4375715348086be72968b41c453] # # patch "mkstemp.hh" # from [49272da85bf48976f23a1aa2356f2478f9a5f223] # to [09d0fe618fa2247434b7995c3a736a5e706e2c6c] # # patch "monotone.cc" # from [3ce745694b161a9c0e3a0d22af01a23f5db4a26c] # to [1006bd53670108b50985a73c1ec2cc0d3f084824] # # patch "paths.cc" # from [4c98560ebccf3c70cfa26b985403a0a3fd66fb90] # to [78f969042bfc3a796ff835b15d8c4cfcf09b03d4] # # patch "platform.hh" # from [72407170e732b62141b8a384539242e5962ebdb7] # to [bbfc7eea9a26a5a8d24ec268fc2a870308ebe5f5] # # patch "rcs_import.cc" # from [661696993d2c2e824323ce3f060d7da35b6951e5] # to [526b1b4b9a25b6c3dfbcfd4454dfb279695200de] # # patch "roster.cc" # from [11db51bb0cfb000c9ae885ad56380534823fd56c] # to [645cc0aed02ac3164d68bd76b232bf4bbd501c6e] # # patch "sanity.cc" # from [8f3a76c6b8fb31c61d396288e92de81edbea655f] # to [ac14205ce27a5f5ac202b0538ee05e2ec64aad6b] # # patch "sanity.hh" # from [c812da629224b2ebf80e0f576f6dee8aeb7afd2c] # to [3185cbfcd3b450d949cd44cd4ff996d52039d8fb] # # patch "ui.cc" # from [0895d4dec27f70e997259a7a6f21b3a9df1c518f] # to [6d441fc0d08866bff3407cfb4eeb989964d90e96] # # patch "ui.hh" # from [e9960fb439a4ab5f7d21b8ccda0346d290174c4e] # to [b8401231f681c6e18ef804329a13bc90d74b4bc0] # # patch "unix/fs.cc" # from [5833b5cb00e799e0560372454fe9fd80f424c4c2] # to [dd87db18852e89c3a51bb98b7f211208d321f819] # # patch "unix/inodeprint.cc" # from [69978997d67e2cc2e60e4fc2c1ba0a6179348525] # to [4dcec3bb5d73edb593fc4d1118b99253edde7469] # # patch "win32/fs.cc" # from [974c8e8ba333902ed1b4ce95f3a2a4e1089efb92] # to [fb7ab5fe20474c60f6c46622308276f23a0fbdb5] # # patch "win32/inodeprint.cc" # from [0c2f874048a2f4346078307114137aacd8a885be] # to [8790ea958d2bc0088d72f2d7fb0aa0d062cae9f5] # # patch "work.cc" # from [05710dd0c0854ce19635a8e78178472d64491031] # to [acf08d2c3ad9a44e5ea090d2496a7de5f2971148] # ============================================================ --- platform-wrapped.hh 3e6a8b07b4a95429f95456a6de1424066e91eb77 +++ platform-wrapped.hh 3e6a8b07b4a95429f95456a6de1424066e91eb77 @@ -0,0 +1,38 @@ +#ifndef __PLATFORM_WRAPPED_HH__ +#define __PLATFORM_WRAPPED_HH__ + +#include "paths.hh" +#include "platform.hh" +#include "transforms.hh" +#include "vocab.hh" + +inline bool inodeprint_file(file_path const & file, hexenc<inodeprint> & ip) +{ + std::string out; + bool ret = inodeprint_file(file.as_external(), out); + inodeprint ip_raw(out); + encode_hexenc(ip_raw, ip); + return ret; +} + +inline utf8 tilde_expand(utf8 const & path) +{ + return tilde_expand(path()); +} + +inline void change_current_working_dir(any_path const & to) +{ + change_current_working_dir(to.as_external()); +} + +inline path::status get_path_status(any_path const & path) +{ + return get_path_status(path.as_external()); +} + +inline void rename_clobberingly(any_path const & from, any_path const & to) +{ + rename_clobberingly(from.as_external(), to.as_external()); +} + +#endif ============================================================ --- ChangeLog 8ec3d679b83d6b3a196d35543b94494e2834943c +++ ChangeLog 8a351fe5db23bb84ae8e0a571a94d9d5b38f8421 @@ -1,3 +1,9 @@ +2006-07-11 Timothy Brownawell <[EMAIL PROTECTED]> + + * sanity.{cc,hh} app_state.cc monotone.cc: sanity::filename is now + a string. + * ui.{cc,hh}: ui::redirect_log_to() now takes a string. + 2006-07-08 Richard Levitte <[EMAIL PROTECTED]> * cmd_files.cc (CMD(fdiff)): Make the synopsis match the ============================================================ --- Makefile.am 5e3ee4929ec349644742ff29ab02d1132d709065 +++ Makefile.am 1e29076102800e28443e93011a2923444da83874 @@ -8,18 +8,20 @@ SANITY_CORE_SOURCES = \ sanity.cc sanity.hh ui.cc ui.hh quick_alloc.hh \ - vocab.hh vocab.cc vocab_terms.hh vocab_macros.hh \ - charset.cc charset.hh \ simplestring_xform.cc simplestring_xform.hh \ - constants.cc constants.hh numeric_vocab.hh paths.cc paths.hh \ - interner.hh hash_map.hh platform.hh + constants.cc constants.hh numeric_vocab.hh \ + platform.hh + LUAEXT_SOURCES = \ + vocab.hh vocab.cc vocab_terms.hh vocab_macros.hh \ + charset.cc charset.hh paths.cc paths.hh \ + interner.hh hash_map.hh \ lua.cc lua.hh mkstemp.cc mkstemp.hh file_io.cc file_io.hh \ globish.cc globish.hh basic_io.cc basic_io.hh MOST_SOURCES = \ - $(SANITY_CORE_SOURCES) $(LUAEXT_SOURCES) \ + $(SANITY_CORE_SOURCES) $(LUAEXT_SOURCES) platform-wrapped.hh \ app_state.cc app_state.hh \ commands.cc commands.hh $(CMD_SOURCES) \ diff_patch.cc diff_patch.hh \ ============================================================ --- app_state.cc da582b88452d7a7f2b94fc389ea0d402d12b81cc +++ app_state.cc b1bc0c4beed9227f28aa34bcddfe8a76ff9d9837 @@ -100,7 +100,7 @@ // The 'true' means that, e.g., if we're running checkout, // then it's okay for dumps to go into our starting working // dir's _MTN rather than the new workspace dir's _MTN. - global_sanity.filename = system_path(dump_path, false); + global_sanity.filename = system_path(dump_path, false).as_external(); } } load_rcfiles(); ============================================================ --- charset.cc f7b71f28c5f99965532a3fcac9580df7026d829c +++ charset.cc 9b101e3bf300e2dd4332aee282ffd38e5e7e0393 @@ -68,34 +68,6 @@ utf = out; } -size_t -display_width(utf8 const & utf) -{ - string const & u = utf(); - size_t sz = 0; - string::const_iterator i = u.begin(); - while (i != u.end()) - { - if (UNLIKELY(static_cast<u8>(*i) & static_cast<u8>(0x80))) - { - // A UTF-8 escape: consume the full escape. - ++i; - ++sz; - while (i != u.end() - && (static_cast<u8>(*i) & static_cast<u8>(0x80)) - && (!(static_cast<u8>(*i) & static_cast<u8>(0x40)))) - ++i; - } - else - { - // An ASCII-like character in the range 0..0x7F. - ++i; - ++sz; - } - } - return sz; -} - // Lots of gunk to avoid charset conversion as much as possible. Running // iconv over every element of every path in a 30,000 file manifest takes // multiple seconds, which then is a minimum bound on pretty much any ============================================================ --- charset.hh 25884bb58fda092bc5dc4a34ad2ad963ccda180a +++ charset.hh 5f90820ea70ef2c6e67aaf3ce1de0c4ca78e6638 @@ -25,9 +25,6 @@ void utf8_to_ace(utf8 const & utf, ace & a); bool utf8_validate(utf8 const & utf); -// Returns length in characters (not bytes). -size_t display_width(utf8 const & utf); - // Specific internal / external conversions for various vocab terms. void internalize_cert_name(utf8 const & utf, cert_name & c); void internalize_cert_name(external const & ext, cert_name & c); ============================================================ --- commands.cc 40263fe4929d57fb3a37a7c4efcbdd5dc45d588e +++ commands.cc 0d57c5fa77ac650ffb6115cb75a8b2e4c840dc10 @@ -10,11 +10,12 @@ #include <map> #include <algorithm> -#include "transforms.hh" +#include "cert.hh" +#include "inodeprint.hh" +#include "platform-wrapped.hh" #include "simplestring_xform.hh" -#include "charset.hh" -#include "inodeprint.hh" -#include "cert.hh" +#include "transforms.hh" +#include "ui.hh" #include "cmd.hh" @@ -178,7 +179,7 @@ size_t col2 = 0; for (size_t i = 0; i < sorted.size(); ++i) { - size_t cmp = display_width(utf8(safe_gettext(idx(sorted, i)->cmdgroup.c_str()))); + size_t cmp = display_width(safe_gettext(idx(sorted, i)->cmdgroup.c_str())); col2 = col2 > cmp ? col2 : cmp; } @@ -189,7 +190,7 @@ curr_group = idx(sorted, i)->cmdgroup; out << endl; out << " " << safe_gettext(idx(sorted, i)->cmdgroup.c_str()); - col = display_width(utf8(safe_gettext(idx(sorted, i)->cmdgroup.c_str()))) + 2; + col = display_width(safe_gettext(idx(sorted, i)->cmdgroup.c_str())) + 2; while (col++ < (col2 + 3)) out << ' '; } ============================================================ --- file_io.cc 420b99ba06117525c991c07c5ee45eb9e1908826 +++ file_io.cc da954957486c417075659279ffdd3dc4f3a293c9 @@ -20,7 +20,7 @@ #include "sanity.hh" #include "simplestring_xform.hh" #include "charset.hh" -#include "platform.hh" +#include "platform-wrapped.hh" #include "numeric_vocab.hh" // this file deals with talking to the filesystem, loading and ============================================================ --- localized_file_io.cc 848b7e4272312c3c2f2c14f660edae442f072515 +++ localized_file_io.cc 4cad41827577db94bbbaa0ce2966fee24eef9548 @@ -8,7 +8,7 @@ #include "simplestring_xform.hh" #include "charset.hh" #include "paths.hh" -#include "platform.hh" +#include "platform-wrapped.hh" using std::string; ============================================================ --- mkstemp.cc 5a022575a388280c876ebcf9c398765932d4d31d +++ mkstemp.cc a9c32c60895ce4375715348086be72968b41c453 @@ -16,7 +16,6 @@ #include <errno.h> #include <unistd.h> -#include "file_io.hh" #include "botan/botan.h" #ifndef O_BINARY ============================================================ --- mkstemp.hh 49272da85bf48976f23a1aa2356f2478f9a5f223 +++ mkstemp.hh 09d0fe618fa2247434b7995c3a736a5e706e2c6c @@ -1,6 +1,8 @@ #ifndef __MKSTEMP_HH__ #define __MKSTEMP_HH__ +#include <string> + int monotone_mkstemp(std::string &tmpl); ============================================================ --- monotone.cc 3ce745694b161a9c0e3a0d22af01a23f5db4a26c +++ monotone.cc 1006bd53670108b50985a73c1ec2cc0d3f084824 @@ -372,11 +372,11 @@ break; case OPT_DUMP: - global_sanity.filename = system_path(argstr); + global_sanity.filename = system_path(argstr).as_external(); break; case OPT_LOG: - ui.redirect_log_to(system_path(argstr)); + ui.redirect_log_to(system_path(argstr).as_external()); break; case OPT_DB_NAME: ============================================================ --- paths.cc 4c98560ebccf3c70cfa26b985403a0a3fd66fb90 +++ paths.cc 78f969042bfc3a796ff835b15d8c4cfcf09b03d4 @@ -17,7 +17,7 @@ #include "constants.hh" #include "paths.hh" -#include "platform.hh" +#include "platform-wrapped.hh" #include "sanity.hh" #include "interner.hh" #include "charset.hh" ============================================================ --- platform.hh 72407170e732b62141b8a384539242e5962ebdb7 +++ platform.hh bbfc7eea9a26a5a8d24ec268fc2a870308ebe5f5 @@ -17,9 +17,6 @@ #include <string> -#include "vocab.hh" -#include "paths.hh" - void read_password(std::string const & prompt, char * buf, size_t bufsz); void get_system_flavour(std::string & ident); bool is_executable(const char *path); @@ -49,7 +46,7 @@ // returns 'true' if it has generated a valid inodeprint; returns 'false' if // there was a problem, in which case we should act as if the inodeprint has // changed. -bool inodeprint_file(file_path const & file, hexenc<inodeprint> & ip); +bool inodeprint_file(std::string const & file, std::string & out); // for netsync 'serve' pidfile support pid_t get_process_id(); @@ -58,17 +55,17 @@ // FIXME: BUG: this returns a string in the filesystem charset/encoding std::string get_current_working_dir(); // calls N() if fails -void change_current_working_dir(any_path const & to); -utf8 tilde_expand(utf8 const & path); -system_path get_default_confdir(); -utf8 get_homedir(); +void change_current_working_dir(std::string const & to); +std::string tilde_expand(std::string const & path); +std::string get_default_confdir(); +std::string get_homedir(); namespace path { typedef enum { nonexistent, directory, file } status; }; -path::status get_path_status(any_path const & path); +path::status get_path_status(std::string const & path); -void rename_clobberingly(any_path const & from, any_path const & to); +void rename_clobberingly(std::string const & from, std::string const & to); // strerror wrapper for OS-specific errors (e.g. use FormatMessage on Win32) std::string os_strerror(os_err_t errnum); ============================================================ --- rcs_import.cc 661696993d2c2e824323ce3f060d7da35b6951e5 +++ rcs_import.cc 526b1b4b9a25b6c3dfbcfd4454dfb279695200de @@ -37,7 +37,7 @@ #include "keys.hh" #include "packet.hh" #include "paths.hh" -#include "platform.hh" +#include "platform-wrapped.hh" #include "rcs_file.hh" #include "revision.hh" #include "safe_map.hh" ============================================================ --- roster.cc 11db51bb0cfb000c9ae885ad56380534823fd56c +++ roster.cc 645cc0aed02ac3164d68bd76b232bf4bbd501c6e @@ -18,6 +18,7 @@ #include "basic_io.hh" #include "cset.hh" #include "inodeprint.hh" +#include "platform-wrapped.hh" #include "roster.hh" #include "revision.hh" #include "vocab.hh" ============================================================ --- sanity.cc 8f3a76c6b8fb31c61d396288e92de81edbea655f +++ sanity.cc ac14205ce27a5f5ac202b0538ee05e2ec64aad6b @@ -60,7 +60,7 @@ { if (!filename.empty()) { - ofstream out(filename.as_external().c_str()); + ofstream out(filename.c_str()); if (out) { copy(logbuf.begin(), logbuf.end(), ostream_iterator<char>(out)); ============================================================ --- sanity.hh c812da629224b2ebf80e0f576f6dee8aeb7afd2c +++ sanity.hh 3185cbfcd3b450d949cd44cd4ff996d52039d8fb @@ -22,7 +22,6 @@ #include "i18n.h" #include "mt-stdint.h" -#include "paths.hh" #include "quick_alloc.hh" // to get the QA() macro #ifdef __GNUC__ @@ -66,7 +65,7 @@ bool reallyquiet; bool relaxed; boost::circular_buffer<char> logbuf; - system_path filename; + std::string filename; std::string gasp_dump; bool already_dumping; bool clean_shutdown; @@ -482,6 +481,9 @@ #define MM(obj) /* */ #endif +template <typename T> +void dump(T const &, std::string &); + template <> void dump(std::string const & obj, std::string & out); ////////////////////////////////////////////////////////////////////////// ============================================================ --- ui.cc 0895d4dec27f70e997259a7a6f21b3a9df1c518f +++ ui.cc 6d441fc0d08866bff3407cfb4eeb989964d90e96 @@ -13,12 +13,11 @@ #include "config.h" +#include "constants.hh" #include "platform.hh" #include "sanity.hh" -#include "ui.hh" -#include "charset.hh" #include "simplestring_xform.hh" -#include "constants.hh" +#include "ui.hh" #include <iostream> #include <fstream> @@ -181,8 +180,8 @@ // pad out this field to that eventual size to avoid // spurious re-issuing of the tick titles as we expand to // the goal. - tick->set_count_size(display_width(utf8(compose_count(tick, - tick->total)))); + tick->set_count_size(display_width(compose_count(tick, + tick->total))); tick->previous_total = tick->total; } else @@ -192,15 +191,15 @@ // compose_count create the count string for that. Use the // size of the returned count string as an initial size for // this tick. - tick->set_count_size(display_width(utf8(compose_count(tick, - 1048575)))); + tick->set_count_size(display_width(compose_count(tick, + 1048575))); } } string count(compose_count(tick)); - size_t title_width = display_width(utf8(tick->name)); - size_t count_width = display_width(utf8(count)); + size_t title_width = display_width(tick->name); + size_t count_width = display_width(count); if (count_width > tick->count_size) { @@ -254,7 +253,7 @@ tickline2 += ui.tick_trailer; } - size_t curr_sz = display_width(utf8(tickline2)); + size_t curr_sz = display_width(tickline2); if (curr_sz < last_tick_len) tickline2.append(last_tick_len - curr_sz, ' '); last_tick_len = curr_sz; @@ -265,7 +264,7 @@ if (ui.last_write_was_a_tick) clog << "\n"; - if (tw && display_width(utf8(tickline1)) > tw) + if (tw && display_width(tickline1) > tw) { // FIXME: may chop off more than necessary (because we chop by // bytes, not by characters) @@ -273,7 +272,7 @@ } clog << tickline1 << "\n"; } - if (tw && display_width(utf8(tickline2)) > tw) + if (tw && display_width(tickline2) > tw) { // FIXME: may chop off more than necessary (because we chop by // bytes, not by characters) @@ -484,12 +483,12 @@ } void -user_interface::redirect_log_to(system_path const & filename) +user_interface::redirect_log_to(std::string const & filename) { static ofstream filestr; if (filestr.is_open()) filestr.close(); - filestr.open(filename.as_external().c_str(), ofstream::out | ofstream::app); + filestr.open(filename.c_str(), ofstream::out | ofstream::app); E(filestr.is_open(), F("failed to open log file '%s'") % filename); clog.rdbuf(filestr.rdbuf()); } @@ -513,6 +512,33 @@ return w; } +size_t +display_width(std::string const & u) +{ + size_t sz = 0; + string::const_iterator i = u.begin(); + while (i != u.end()) + { + if (UNLIKELY(static_cast<u8>(*i) & static_cast<u8>(0x80))) + { + // A UTF-8 escape: consume the full escape. + ++i; + ++sz; + while (i != u.end() + && (static_cast<u8>(*i) & static_cast<u8>(0x80)) + && (!(static_cast<u8>(*i) & static_cast<u8>(0x40)))) + ++i; + } + else + { + // An ASCII-like character in the range 0..0x7F. + ++i; + ++sz; + } + } + return sz; +} + const locale & get_user_locale() { ============================================================ --- ui.hh e9960fb439a4ab5f7d21b8ccda0346d290174c4e +++ ui.hh b8401231f681c6e18ef804329a13bc90d74b4bc0 @@ -97,7 +97,7 @@ void set_tick_trailer(std::string const & trailer); void set_tick_writer(tick_writer * t_writer); void ensure_clean_line(); - void redirect_log_to(system_path const & filename); + void redirect_log_to(std::string const & filename); void set_prog_name(std::string const & name); std::string output_prefix(); @@ -126,6 +126,9 @@ // (even if there is no terminal) unsigned int guess_terminal_width(); +// Returns length in characters (not bytes). +size_t display_width(std::string const & u); + // returns the a default user locale value const std::locale & get_user_locale(); ============================================================ --- unix/fs.cc 5833b5cb00e799e0560372454fe9fd80f424c4c2 +++ unix/fs.cc dd87db18852e89c3a51bb98b7f211208d321f819 @@ -19,6 +19,8 @@ #include "sanity.hh" #include "platform.hh" +namespace fs = boost::filesystem; + std::string get_current_working_dir() { @@ -29,22 +31,22 @@ } void -change_current_working_dir(any_path const & to) +change_current_working_dir(std::string const & to) { - E(!chdir(to.as_external().c_str()), + E(!chdir(to.c_str()), F("cannot change to directory %s: %s") % to % os_strerror(errno)); } -system_path +std::string get_default_confdir() { - return system_path(get_homedir()) / ".monotone"; + return get_homedir() + "/.monotone"; } // FIXME: BUG: this probably mangles character sets // (as in, we're treating system-provided data as utf8, but it's probably in // the filesystem charset) -utf8 +std::string get_homedir() { char * home = getenv("HOME"); @@ -56,19 +58,19 @@ return std::string(pw->pw_dir); } -utf8 -tilde_expand(utf8 const & in) +std::string +tilde_expand(std::string const & in) { - if (in().empty() || in()[0] != '~') + if (in.empty() || in[0] != '~') return in; - fs::path tmp(in(), fs::native); + fs::path tmp(in, fs::native); fs::path::iterator i = tmp.begin(); if (i != tmp.end()) { fs::path res; if (*i == "~") { - res /= get_homedir()(); + res /= get_homedir(); ++i; } else if (i->size() > 1 && i->at(0) == '~') @@ -92,11 +94,11 @@ } path::status -get_path_status(any_path const & path) +get_path_status(std::string const & path) { struct stat buf; int res; - res = stat(path.as_external().c_str(), &buf); + res = stat(path.c_str(), &buf); if (res < 0) { if (errno == ENOENT) @@ -116,8 +118,8 @@ } void -rename_clobberingly(any_path const & from, any_path const & to) +rename_clobberingly(std::string const & from, std::string const & to) { - E(!rename(from.as_external().c_str(), to.as_external().c_str()), + E(!rename(from.c_str(), to.c_str()), F("renaming '%s' to '%s' failed: %s") % from % to % os_strerror(errno)); } ============================================================ --- unix/inodeprint.cc 69978997d67e2cc2e60e4fc2c1ba0a6179348525 +++ unix/inodeprint.cc 4dcec3bb5d73edb593fc4d1118b99253edde7469 @@ -70,10 +70,10 @@ return difftime(now, then) > 0; } -bool inodeprint_file(file_path const & file, hexenc<inodeprint> & ip) +bool inodeprint_file(std::string const & file, std::string & out) { struct stat st; - if (stat(file.as_external().c_str(), &st) < 0) + if (stat(file.c_str(), &st) < 0) return false; time_t now; @@ -121,8 +121,6 @@ char digest[constants::sha1_digest_length]; hash.final(reinterpret_cast<Botan::byte *>(digest)); - std::string out(digest, constants::sha1_digest_length); - inodeprint ip_raw(out); - encode_hexenc(ip_raw, ip); + out = std::string(digest, constants::sha1_digest_length); return true; } ============================================================ --- win32/fs.cc 974c8e8ba333902ed1b4ce95f3a2a4e1089efb92 +++ win32/fs.cc fb7ab5fe20474c60f6c46622308276f23a0fbdb5 @@ -18,6 +18,8 @@ #include "sanity.hh" #include "platform.hh" +//namespace fs = boost::filesystem; + std::string get_current_working_dir() { @@ -31,13 +33,13 @@ } void -change_current_working_dir(any_path const & to) +change_current_working_dir(std::string const & to) { - E(!chdir(to.as_external().c_str()), + E(!chdir(to.c_str()), F("cannot change to directory %s: %s") % to % strerror(errno)); } -system_path +std::string get_default_confdir() { std::string base; @@ -52,13 +54,13 @@ base = szPath; } N(!base.empty(), F("could not determine configuration path")); - return system_path(base) / "monotone"; + return base + "\\monotone"); } // FIXME: BUG: this probably mangles character sets // (as in, we're treating system-provided data as utf8, but it's probably in // the filesystem charset) -utf8 +std::string get_homedir() { // Windows is fun! @@ -100,19 +102,19 @@ return std::string("C:"); } -utf8 -tilde_expand(utf8 const & in) +std::string +tilde_expand(std::string const & in) { - if (in().empty() || in()[0] != '~') + if (in.empty() || in[0] != '~') return in; - fs::path tmp(in(), fs::native); + fs::path tmp(in, fs::native); fs::path::iterator i = tmp.begin(); if (i != tmp.end()) { fs::path res; if (*i == "~" || i->size() > 1 && i->at(0) == '~') { - fs::path restmp(get_homedir()(), fs::native); + fs::path restmp(get_homedir(), fs::native); res /= restmp; ++i; } @@ -125,9 +127,9 @@ } path::status -get_path_status(any_path const & path) +get_path_status(std::string const & path) { - fs::path p(path.as_external(), fs::native); + fs::path p(path, fs::native); if (!fs::exists(p)) return path::nonexistent; else if (fs::is_directory(p)) @@ -173,7 +175,7 @@ } void -rename_clobberingly(any_path const & from, any_path const & to) +rename_clobberingly(std::string const & from, std::string const & to) { static const int renameAttempts = 16; DWORD sleepTime = 1; @@ -184,7 +186,7 @@ // around the common problem where another process (e.g. a virus checker) // will exclusive open a file you've just touched. for (int i = 0; i < renameAttempts; ++i) { - if (rename_clobberingly_impl(from.as_external().c_str(), to.as_external().c_str())) + if (rename_clobberingly_impl(from.c_str(), to.c_str())) return; lastError = GetLastError(); L(FL("attempted rename of '%s' to '%s' failed: (%s) %d") ============================================================ --- win32/inodeprint.cc 0c2f874048a2f4346078307114137aacd8a885be +++ win32/inodeprint.cc 8790ea958d2bc0088d72f2d7fb0aa0d062cae9f5 @@ -26,10 +26,10 @@ } }; -bool inodeprint_file(file_path const & file, hexenc<inodeprint> & ip) +bool inodeprint_file(std::string const & file, std::string & out) { struct _stati64 st; - if (_stati64(file.as_external().c_str(), &st) < 0) + if (_stati64(file.c_str(), &st) < 0) return false; Botan::SHA_160 hash; @@ -60,8 +60,6 @@ I(hash.OUTPUT_LENGTH == 20); char digest[20]; hash.final(reinterpret_cast<Botan::byte *>(digest)); - std::string out(digest, hash.OUTPUT_LENGTH); - inodeprint ip_raw(out); - encode_hexenc(ip_raw, ip); + out = std::string(digest, hash.OUTPUT_LENGTH); return true; } ============================================================ --- work.cc 05710dd0c0854ce19635a8e78178472d64491031 +++ work.cc acf08d2c3ad9a44e5ea090d2496a7de5f2971148 @@ -17,7 +17,7 @@ #include "basic_io.hh" #include "cset.hh" #include "localized_file_io.hh" -#include "platform.hh" +#include "platform-wrapped.hh" #include "restrictions.hh" #include "sanity.hh" #include "safe_map.hh"
_______________________________________________ Monotone-devel mailing list Monotone-devel@nongnu.org http://lists.nongnu.org/mailman/listinfo/monotone-devel