Date: Fri, 6 Jul 2007 14:20:08 GMT From: Lapo Luchini <lapo@lapo.it> To: freebsd-ports-bugs@FreeBSD.org Subject: Re: ports/114353: Fix to bug in devel/monotone with boost 1.34.0 Message-ID: <200707061420.l66EK8XE002294@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR ports/114353; it has been noted by GNATS. From: Lapo Luchini <lapo@lapo.it> To: bug-followup@FreeBSD.org, v.haisman@sh.cvut.cz Cc: Subject: Re: ports/114353: Fix to bug in devel/monotone with boost 1.34.0 Date: Fri, 06 Jul 2007 15:43:20 +0200 This is a multi-part message in MIME format. --------------010307010903030607040508 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Yes, that's the patch (generated with something like this I guess: `mtn diff -r 33bf29f0 -r 28c4c304 paths.cc`). The attached file (same patch, but done by `make update-patches`) is to be committed in /usr/ports/devel/monotone/files/ subdirectory. --------------010307010903030607040508 Content-Type: text/plain; name="patch-paths.cc" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="patch-paths.cc" --- paths.cc.orig Mon May 7 16:13:44 2007 +++ paths.cc Fri Jul 6 15:27:55 2007 @@ -10,6 +10,7 @@ #include <string> #include <sstream> +#include <boost/version.hpp> #include <boost/filesystem/operations.hpp> #include <boost/filesystem/convenience.hpp> @@ -249,6 +250,41 @@ internal_string_to_split_path(string con I(fully_normalized_path_split(path, true, sp)); } +// path::normalize() is deprecated in Boost 1.34, and also +// doesn't remove leading or trailing dots any more. +static fs::path +normalize_path(fs::path const & in) +{ +#if BOOST_VERSION < 103400 + return in.normalize(); +#else + fs::path out; + vector<string> stack; + for (fs::path::iterator i = in.begin(); i != in.end(); ++i) + { + // remove . elements + if (*i == ".") + continue; + // remove foo/.. element pairs + if (*i == "..") + { + if (!stack.empty()) + { + stack.pop_back(); + continue; + } + } + stack.push_back(*i); + } + for (vector<string>::const_iterator i = stack.begin(); + i != stack.end(); ++i) + { + out /= *i; + } + return out; +#endif +} + static void normalize_external_path(string const & path, string & normalized) { @@ -272,7 +308,7 @@ normalize_external_path(string const & p base = initial_rel_path.get(); // the fs::native is needed to get it to accept paths like ".foo". relative = fs::path(path, fs::native); - out = (base / relative).normalize(); + out = normalize_path(base / relative); } catch (exception &) { @@ -539,9 +575,9 @@ static string normalize_out_dots(string const & path) { #ifdef WIN32 - return fs::path(path, fs::native).normalize().string(); + return normalize_path(fs::path(path, fs::native)).string(); #else - return fs::path(path, fs::native).normalize().native_file_string(); + return normalize_path(fs::path(path, fs::native)).native_file_string(); #endif } @@ -679,9 +715,17 @@ find_bookdir(fs::path const & root, fs:: } // check for _MTN/. and _MTN/.. to see if mt dir is readable - if (!fs::exists(check / ".") || !fs::exists(check / "..")) + try + { + if (!fs::exists(check / ".") || !fs::exists(check / "..")) + { + L(FL("problems with '%s' (missing '.' or '..')") % check.string()); + return false; + } + } + catch(exception &) { - L(FL("problems with '%s' (missing '.' or '..')") % check.string()); + L(FL("problems with '%s' (cannot check for '.' or '..')") % check.string()); return false; } return true; --------------010307010903030607040508--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200707061420.l66EK8XE002294>