aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/profiles.hh
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2015-05-21 15:42:59 +0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2015-05-21 15:42:59 +0200
commit22b1a8d43f0dea4f85bce2e79b1b986ecd8ba7f6 (patch)
tree5d64634fb4c398e52b8ac45772b43ff0f4a94798 /src/libstore/profiles.hh
parent13493ef97c01a9839c340cbe4e99baae65b20e15 (diff)
Move profiles.{cc,hh} to libstore
Diffstat (limited to 'src/libstore/profiles.hh')
-rw-r--r--src/libstore/profiles.hh55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/libstore/profiles.hh b/src/libstore/profiles.hh
new file mode 100644
index 000000000..30d2376d9
--- /dev/null
+++ b/src/libstore/profiles.hh
@@ -0,0 +1,55 @@
+#pragma once
+
+#include "types.hh"
+#include "pathlocks.hh"
+
+#include <time.h>
+
+
+namespace nix {
+
+
+struct Generation
+{
+ int number;
+ Path path;
+ time_t creationTime;
+ Generation()
+ {
+ number = -1;
+ }
+ operator bool() const
+ {
+ return number != -1;
+ }
+};
+
+typedef list<Generation> Generations;
+
+
+/* Returns the list of currently present generations for the specified
+ profile, sorted by generation number. */
+Generations findGenerations(Path profile, int & curGen);
+
+Path createGeneration(Path profile, Path outPath);
+
+void deleteGeneration(const Path & profile, unsigned int gen);
+
+void switchLink(Path link, Path target);
+
+/* Ensure exclusive access to a profile. Any command that modifies
+ the profile first acquires this lock. */
+void lockProfile(PathLocks & lock, const Path & profile);
+
+/* Optimistic locking is used by long-running operations like `nix-env
+ -i'. Instead of acquiring the exclusive lock for the entire
+ duration of the operation, we just perform the operation
+ optimistically (without an exclusive lock), and check at the end
+ whether the profile changed while we were busy (i.e., the symlink
+ target changed). If so, the operation is restarted. Restarting is
+ generally cheap, since the build results are still in the Nix
+ store. Most of the time, only the user environment has to be
+ rebuilt. */
+string optimisticLockProfile(const Path & profile);
+
+}