forked from lix-project/lix
950b46821f
The attributes previously stored in TreeInfo (narHash, revCount, lastModified) are now stored in Input. This makes it less arbitrary what attributes are stored where. As a result, the lock file format has changed. An entry like "info": { "lastModified": 1585405475, "narHash": "sha256-bESW0n4KgPmZ0luxvwJ+UyATrC6iIltVCsGdLiphVeE=" }, "locked": { "owner": "NixOS", "repo": "nixpkgs", "rev": "b88ff468e9850410070d4e0ccd68c7011f15b2be", "type": "github" }, is now stored as "locked": { "owner": "NixOS", "repo": "nixpkgs", "rev": "b88ff468e9850410070d4e0ccd68c7011f15b2be", "type": "github", "lastModified": 1585405475, "narHash": "sha256-bESW0n4KgPmZ0luxvwJ+UyATrC6iIltVCsGdLiphVeE=" }, The 'Input' class is now a dumb set of attributes. All the fetcher implementations subclass InputScheme, not Input. This simplifies the API. Also, fix substitution of flake inputs. This was broken since lazy flake fetching started using fetchTree internally.
54 lines
1.3 KiB
C++
54 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include "types.hh"
|
|
#include "hash.hh"
|
|
#include "fetchers.hh"
|
|
|
|
#include <variant>
|
|
|
|
namespace nix {
|
|
|
|
class Store;
|
|
|
|
typedef std::string FlakeId;
|
|
|
|
struct FlakeRef
|
|
{
|
|
fetchers::Input input;
|
|
|
|
Path subdir;
|
|
|
|
bool operator==(const FlakeRef & other) const;
|
|
|
|
FlakeRef(fetchers::Input && input, const Path & subdir)
|
|
: input(std::move(input)), subdir(subdir)
|
|
{ }
|
|
|
|
// FIXME: change to operator <<.
|
|
std::string to_string() const;
|
|
|
|
fetchers::Attrs toAttrs() const;
|
|
|
|
FlakeRef resolve(ref<Store> store) const;
|
|
|
|
static FlakeRef fromAttrs(const fetchers::Attrs & attrs);
|
|
|
|
std::pair<fetchers::Tree, FlakeRef> fetchTree(ref<Store> store) const;
|
|
};
|
|
|
|
std::ostream & operator << (std::ostream & str, const FlakeRef & flakeRef);
|
|
|
|
FlakeRef parseFlakeRef(
|
|
const std::string & url, const std::optional<Path> & baseDir = {}, bool allowMissing = false);
|
|
|
|
std::optional<FlakeRef> maybeParseFlake(
|
|
const std::string & url, const std::optional<Path> & baseDir = {});
|
|
|
|
std::pair<FlakeRef, std::string> parseFlakeRefWithFragment(
|
|
const std::string & url, const std::optional<Path> & baseDir = {}, bool allowMissing = false);
|
|
|
|
std::optional<std::pair<FlakeRef, std::string>> maybeParseFlakeRefWithFragment(
|
|
const std::string & url, const std::optional<Path> & baseDir = {});
|
|
|
|
}
|