aboutsummaryrefslogtreecommitdiff
path: root/build2/version
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2019-04-09 09:00:29 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2019-04-09 09:00:29 +0200
commit79a760af92146a63e337c4399ec57134f56d8886 (patch)
tree1f576594fcfc987a6874533815cc6a20c60cd78d /build2/version
parentd2951ce7344dade96f78286cc311ed86c46d086e (diff)
Add dry-run support to install/uninstall rules
Diffstat (limited to 'build2/version')
-rw-r--r--build2/version/utility.cxx91
1 files changed, 47 insertions, 44 deletions
diff --git a/build2/version/utility.cxx b/build2/version/utility.cxx
index 4222fff..6c4d43e 100644
--- a/build2/version/utility.cxx
+++ b/build2/version/utility.cxx
@@ -18,61 +18,64 @@ namespace build2
auto_rmfile
fixup_manifest (const path& in, path out, const standard_version& v)
{
- auto_rmfile r (move (out));
+ auto_rmfile r (move (out), !dry_run /* active */);
- try
+ if (!dry_run)
{
- permissions perm (path_permissions (in));
-
- ifdstream ifs (in);
- manifest_parser p (ifs, in.string ());
+ try
+ {
+ permissions perm (path_permissions (in));
- auto_fd ofd (fdopen (r.path,
- fdopen_mode::out |
- fdopen_mode::create |
- fdopen_mode::exclusive |
- fdopen_mode::binary,
- perm));
+ ifdstream ifs (in);
+ manifest_parser p (ifs, in.string ());
- ofdstream ofs (move (ofd));
- manifest_serializer s (ofs, r.path.string ());
+ auto_fd ofd (fdopen (r.path,
+ fdopen_mode::out |
+ fdopen_mode::create |
+ fdopen_mode::exclusive |
+ fdopen_mode::binary,
+ perm));
- manifest_name_value nv (p.next ());
- assert (nv.name.empty () && nv.value == "1"); // We just loaded it.
- s.next (nv.name, nv.value);
-
- for (nv = p.next (); !nv.empty (); nv = p.next ())
- {
- if (nv.name == "version")
- nv.value = v.string ();
+ ofdstream ofs (move (ofd));
+ manifest_serializer s (ofs, r.path.string ());
+ manifest_name_value nv (p.next ());
+ assert (nv.name.empty () && nv.value == "1"); // We just loaded it.
s.next (nv.name, nv.value);
- }
- s.next (nv.name, nv.value); // End of manifest.
- s.next (nv.name, nv.value); // End of stream.
+ for (nv = p.next (); !nv.empty (); nv = p.next ())
+ {
+ if (nv.name == "version")
+ nv.value = v.string ();
- ofs.close ();
- ifs.close ();
+ s.next (nv.name, nv.value);
+ }
- return r;
- }
- catch (const manifest_parsing& e)
- {
- location l (&in, e.line, e.column);
- fail (l) << e.description << endf;
- }
- catch (const manifest_serialization& e)
- {
- location l (&r.path);
- fail (l) << e.description << endf;
- }
- catch (const io_error& e)
- {
- fail << "io error: " << e <<
- info << "while reading " << in <<
- info << "while writing " << r.path << endf;
+ s.next (nv.name, nv.value); // End of manifest.
+ s.next (nv.name, nv.value); // End of stream.
+
+ ofs.close ();
+ ifs.close ();
+ }
+ catch (const manifest_parsing& e)
+ {
+ location l (&in, e.line, e.column);
+ fail (l) << e.description;
+ }
+ catch (const manifest_serialization& e)
+ {
+ location l (&r.path);
+ fail (l) << e.description;
+ }
+ catch (const io_error& e)
+ {
+ fail << "io error: " << e <<
+ info << "while reading " << in <<
+ info << "while writing " << r.path;
+ }
}
+
+ return r;
}
}
}