aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/filesystem.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2020-08-17 12:04:33 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2020-08-17 12:04:33 +0200
commit5521a0edd9a2ba8429f7d2e48f754c9d6f66cc3b (patch)
treeec1922b3c804fbd472b8cc977f332ad0f5a4355a /libbuild2/filesystem.cxx
parent534ca7619a62a74bce8e4b30931aaf99f9c3beb6 (diff)
Add mvfile() filesystem utility function
Diffstat (limited to 'libbuild2/filesystem.cxx')
-rw-r--r--libbuild2/filesystem.cxx21
1 files changed, 21 insertions, 0 deletions
diff --git a/libbuild2/filesystem.cxx b/libbuild2/filesystem.cxx
index 259de26..0072408 100644
--- a/libbuild2/filesystem.cxx
+++ b/libbuild2/filesystem.cxx
@@ -102,6 +102,27 @@ namespace build2
return ms;
}
+ void
+ mvfile (const path& f, const path& t, uint16_t v)
+ {
+ if (verb >= v)
+ text << "mv " << f << ' ' << t;
+
+ try
+ {
+ butl::mvfile (f, t, (cpflags::overwrite_content |
+ cpflags::overwrite_permissions));
+ }
+ catch (const io_error& e)
+ {
+ fail << "unable to overwrite " << t << " with " << f << ": " << e;
+ }
+ catch (const system_error& e) // EACCES, etc.
+ {
+ fail << "unable to move " << f << " to " << t << ": " << e;
+ }
+ }
+
fs_status<rmfile_status>
rmsymlink (context& ctx, const path& p, bool d, uint16_t v)
{