aboutsummaryrefslogtreecommitdiff
path: root/src/libstore
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstore')
-rw-r--r--src/libstore/derivations.hh3
-rw-r--r--src/libstore/nar-info.cc2
-rw-r--r--src/libstore/path.hh14
-rw-r--r--src/libstore/store-api.cc15
-rw-r--r--src/libstore/store-api.hh5
5 files changed, 21 insertions, 18 deletions
diff --git a/src/libstore/derivations.hh b/src/libstore/derivations.hh
index 7222d25e5..f010318ce 100644
--- a/src/libstore/derivations.hh
+++ b/src/libstore/derivations.hh
@@ -22,6 +22,9 @@ struct DerivationOutput
, hashAlgo(std::move(hashAlgo))
, hash(std::move(hash))
{ }
+ DerivationOutput(const DerivationOutput &) = default;
+ DerivationOutput(DerivationOutput &&) = default;
+ DerivationOutput & operator = (const DerivationOutput &) = default;
void parseHashInfo(bool & recursive, Hash & hash) const;
};
diff --git a/src/libstore/nar-info.cc b/src/libstore/nar-info.cc
index 1375094b5..87b1b656b 100644
--- a/src/libstore/nar-info.cc
+++ b/src/libstore/nar-info.cc
@@ -4,7 +4,7 @@
namespace nix {
NarInfo::NarInfo(const Store & store, const std::string & s, const std::string & whence)
- : ValidPathInfo(StorePath::dummy.clone()) // FIXME: hack
+ : ValidPathInfo(StorePath::dummy) // FIXME: hack
{
auto corrupt = [&]() {
throw Error(format("NAR info file '%1%' is corrupt") % whence);
diff --git a/src/libstore/path.hh b/src/libstore/path.hh
index c90bb1fff..186976855 100644
--- a/src/libstore/path.hh
+++ b/src/libstore/path.hh
@@ -13,6 +13,7 @@ extern "C" {
void ffi_StorePath_drop(void *);
bool ffi_StorePath_less_than(const StorePath & a, const StorePath & b);
bool ffi_StorePath_eq(const StorePath & a, const StorePath & b);
+ void ffi_StorePath_clone_to(const StorePath & _other, StorePath & _this);
unsigned char * ffi_StorePath_hash_data(const StorePath & p);
}
@@ -43,6 +44,19 @@ struct StorePath : rust::Value<3 * sizeof(void *) + 24, ffi_StorePath_drop>
return !(*this == other);
}
+ StorePath(StorePath && that) = default;
+
+ StorePath(const StorePath & that)
+ {
+ ffi_StorePath_clone_to(that, *this);
+ }
+
+ void operator = (const StorePath & that)
+ {
+ (rust::Value<3 * sizeof(void *) + 24, ffi_StorePath_drop>::operator = (that));
+ ffi_StorePath_clone_to(that, *this);
+ }
+
StorePath clone() const;
/* Check whether a file name ends with the extension for
diff --git a/src/libstore/store-api.cc b/src/libstore/store-api.cc
index b9e894a9a..261afed49 100644
--- a/src/libstore/store-api.cc
+++ b/src/libstore/store-api.cc
@@ -687,21 +687,6 @@ void copyClosure(ref<Store> srcStore, ref<Store> dstStore,
}
-ValidPathInfo::ValidPathInfo(const ValidPathInfo & other)
- : path(other.path.clone())
- , deriver(other.deriver ? other.deriver->clone(): std::optional<StorePath>{})
- , narHash(other.narHash)
- , references(cloneStorePathSet(other.references))
- , registrationTime(other.registrationTime)
- , narSize(other.narSize)
- , id(other.id)
- , ultimate(other.ultimate)
- , sigs(other.sigs)
- , ca(other.ca)
-{
-}
-
-
std::optional<ValidPathInfo> decodeValidPathInfo(const Store & store, std::istream & str, bool hashGiven)
{
std::string path;
diff --git a/src/libstore/store-api.hh b/src/libstore/store-api.hh
index 0fa59be6a..0237d0b04 100644
--- a/src/libstore/store-api.hh
+++ b/src/libstore/store-api.hh
@@ -189,8 +189,9 @@ struct ValidPathInfo
Strings shortRefs() const;
- ValidPathInfo(StorePath && path) : path(std::move(path)) { }
- explicit ValidPathInfo(const ValidPathInfo & other);
+ ValidPathInfo(StorePath && path) : path(std::move(path)) { };
+ ValidPathInfo(const StorePath & path) : path(path) { };
+ ValidPathInfo(const ValidPathInfo & other) = default;
virtual ~ValidPathInfo() { }
};