WIP - adapt code to dream lock changes

This commit is contained in:
DavHau 2022-02-08 17:00:35 +07:00
parent 28c29947cd
commit f634038bbf
19 changed files with 116 additions and 104 deletions

View File

@ -181,12 +181,12 @@ class AddCommand(Command):
self.translate_from_source(specified_extra_args, sourcePath, translators)
# get package name and version from lock
mainPackageName = lock['_generic']['mainPackageName']
mainPackageVersion = lock['_generic']['mainPackageVersion']
defaultPackage = lock['_generic']['defaultPackage']
defaultPackageVersion = lock['_generic']['packages'][defaultPackage]
# calculate output directory and attribute name
main_package_dir_name = self.define_attribute_name(
mainPackageName,
defaultPackage,
existing_names,
)
@ -200,7 +200,7 @@ class AddCommand(Command):
self.extend_with_translator_info(lock, specified_extra_args, translator)
# add main package source
self.add_main_source(lock, mainPackageName, mainPackageVersion, sourceSpec)
self.add_main_source(lock, defaultPackage, defaultPackageVersion, sourceSpec)
# clean up dependency graph
if 'dependencies' in lock['_generic']:
@ -354,7 +354,7 @@ class AddCommand(Command):
lock['cyclicDependencies'][n_name][n_ver].append(removed)
print(cycles_text)
def add_main_source(self, lock, mainPackageName, mainPackageVersion, sourceSpec):
def add_main_source(self, lock, defaultPackage, defaultPackageVersion, sourceSpec):
mainSource = sourceSpec.copy()
if not mainSource:
mainSource = dict(
@ -364,12 +364,12 @@ class AddCommand(Command):
for key in ['pname', 'version']:
if key in mainSource:
del mainSource[key]
if mainPackageName not in lock['sources']:
lock['sources'][mainPackageName] = {
mainPackageVersion: mainSource
if defaultPackage not in lock['sources']:
lock['sources'][defaultPackage] = {
defaultPackageVersion: mainSource
}
else:
lock['sources'][mainPackageName][mainPackageVersion] = mainSource
lock['sources'][defaultPackage][defaultPackageVersion] = mainSource
def extend_with_translator_info(self, lock, specified_extra_args, translator):
t = translator
@ -422,14 +422,14 @@ class AddCommand(Command):
output = os.path.realpath(output)
return filesToCreate, output
def define_attribute_name(self, mainPackageName, existing_names):
def define_attribute_name(self, defaultPackage, existing_names):
# only respect --atttribute-name option for main package
if not existing_names:
attributeName = self.option('attribute-name')
if attributeName:
return attributeName
attributeName = mainPackageName.strip('@').replace('/', '-')
attributeName = defaultPackage.strip('@').replace('/', '-')
if attributeName in existing_names:
attributeName = attributeName + '-subpackage'
@ -619,10 +619,10 @@ class AddCommand(Command):
print(f"fetching source defined via existing dream-lock.json")
with open(sourcePath) as f:
sourceDreamLock = json.load(f)
sourceMainPackageName = sourceDreamLock['_generic']['mainPackageName']
sourceMainPackageVersion = sourceDreamLock['_generic']['mainPackageVersion']
sourceDefaultPackage = sourceDreamLock['_generic']['defaultPackage']
sourceDefaultPackageVersion = sourceDreamLock['_generic']['packages'][sourceDefaultPackage]
sourceSpec = \
sourceDreamLock['sources'][sourceMainPackageName][sourceMainPackageVersion]
sourceDreamLock['sources'][sourceDefaultPackage][sourceDefaultPackageVersion]
sourcePath = \
buildNixFunction("fetchers.fetchSource", source=sourceSpec, extract=True)
return sourcePath, sourceSpec

View File

@ -64,7 +64,8 @@ class UpdateCommand(Command):
print(f"updater module is: {updater}")
# find new version
old_version = lock['_generic']['mainPackageVersion']
oldPackage = lock['_generic']['defaultPackage']
old_version = lock['_generic']['packages'][oldPackage]
version = self.option('to-version')
if not version:
update_script = buildNixFunction(
@ -78,19 +79,19 @@ class UpdateCommand(Command):
cli_py = os.path.abspath(f"{__file__}/../../cli.py")
# delete the hash
mainPackageName = lock['_generic']['mainPackageName']
mainPackageVersion = lock['_generic']['mainPackageVersion']
mainPackageSource = lock['sources'][mainPackageName][mainPackageVersion]
defaultPackage = lock['_generic']['defaultPackage']
defaultPackageVersion = lock['_generic']['packages'][defaultPackage]
mainPackageSource = lock['sources'][defaultPackage][defaultPackageVersion]
mainPackageSource.update(dict(
pname = mainPackageName,
version = mainPackageVersion,
pname = defaultPackage,
version = defaultPackageVersion,
))
updatedSourceSpec = callNixFunction(
"fetchers.updateSource",
source=mainPackageSource,
newVersion=version,
)
lock['sources'][mainPackageName][mainPackageVersion] = updatedSourceSpec
lock['sources'][defaultPackage][defaultPackageVersion] = updatedSourceSpec
with tempfile.NamedTemporaryFile("w", suffix="dream-lock.json") as tmpDreamLock:
json.dump(lock, tmpDreamLock, indent=2)
tmpDreamLock.seek(0) # flushes write cache

View File

@ -46,8 +46,8 @@ in
sourcePathRelative,
}:
let
mainPackageName = dreamLock._generic.mainPackageName;
mainPackageVersion = dreamLock._generic.mainPackageVersion;
defaultPackage = dreamLock._generic.defaultPackage;
defaultPackageVersion = dreamLock._generic.packages."${defaultPackage}";
in
''
{
@ -63,9 +63,9 @@ in
dream2nix.riseAndShine {
source = ./dream-lock.json;
${lib.optionalString (dreamLock.sources."${mainPackageName}"."${mainPackageVersion}".type == "unknown") ''
${lib.optionalString (dreamLock.sources."${defaultPackage}"."${defaultPackageVersion}".type == "unknown") ''
sourceOverrides = oldSources: {
"${mainPackageName}"."${mainPackageVersion}" = ./${sourcePathRelative};
"${defaultPackage}"."${defaultPackageVersion}" = ./${sourcePathRelative};
};
''}
}

View File

@ -26,8 +26,8 @@
# Attributes
subsystemAttrs, # attrset
mainPackageName, # string
mainPackageVersion, # string
defaultPackageName, # string
defaultPackageVersion, # string
# attrset of pname -> versions,
# where versions is a list of version strings
@ -55,8 +55,8 @@ let
nodejsVersion = subsystemAttrs.nodejsVersion;
isMainPackage = name: version:
name == mainPackageName
&& version == mainPackageVersion;
name == defaultPackageName
&& version == defaultPackageVersion;
nodejs =
if args ? nodejs then
@ -70,7 +70,7 @@ let
mv node-* $out
'';
defaultPackage = packages."${mainPackageName}"."${mainPackageVersion}";
defaultPackage = packages."${defaultPackageName}"."${defaultPackageVersion}";
packages =
lib.mapAttrs

View File

@ -13,8 +13,8 @@
{
subsystemAttrs,
mainPackageName,
mainPackageVersion,
defaultPackageName,
defaultPackageVersion,
getCyclicDependencies,
getDependencies,
getSource,
@ -31,9 +31,9 @@ let
(args.getDependencies name version)
++ (args.getCyclicDependencies name version);
mainPackageKey = "${mainPackageName}#${mainPackageVersion}";
mainPackageKey = "${defaultPackageName}#${defaultPackageVersion}";
mainPackageDependencies = getAllDependencies mainPackageName mainPackageVersion;
mainPackageDependencies = getAllDependencies defaultPackageName defaultPackageVersion;
nodejsVersion = subsystemAttrs.nodejsVersion;
@ -72,26 +72,26 @@ let
callNode2Nix = funcName: args:
node2nixEnv."${funcName}" (rec {
name = utils.sanitizeDerivationName packageName;
packageName = mainPackageName;
version = mainPackageVersion;
packageName = defaultPackageName;
version = defaultPackageVersion;
dependencies = node2nixDependencies;
production = true;
bypassCache = true;
reconstructLock = true;
src = getSource mainPackageName mainPackageVersion;
src = getSource defaultPackageName defaultPackageVersion;
}
// args);
in
rec {
packages."${mainPackageName}"."${mainPackageVersion}" = defaultPackage;
packages."${defaultPackageName}"."${defaultPackageVersion}" = defaultPackage;
defaultPackage =
let
pkg = callNode2Nix "buildNodePackage" {};
in
utils.applyOverridesToPackage packageOverrides pkg mainPackageName;
utils.applyOverridesToPackage packageOverrides pkg defaultPackageName;
devShell = callNode2Nix "buildNodeShell" {};

View File

@ -20,16 +20,16 @@ let
else
python.pkgs.buildPythonPackage;
mainPackageName = dreamLock._generic.mainPackageName;
defaultPackage = dreamLock._generic.defaultPackage;
packageName =
if mainPackageName == null then
if defaultPackage == null then
if dreamLock._subsystem.application then
"application"
else
"environment"
else
mainPackageName;
defaultPackage;
defaultPackage = buildFunc {
name = packageName;

View File

@ -7,8 +7,8 @@
{
subsystemAttrs,
mainPackageName,
mainPackageVersion,
defaultPackageName,
defaultPackageVersion,
getCyclicDependencies,
getDependencies,
getSource,
@ -137,5 +137,5 @@ rec {
}) subsystemAttrs.packages
);
defaultPackage = packages."${mainPackageName}"."${mainPackageVersion}";
defaultPackage = packages."${defaultPackageName}"."${defaultPackageVersion}";
}

View File

@ -162,9 +162,9 @@ let
else
args.fetcher;
fetched = fetcher {
mainPackageName = dreamLock._generic.mainPackageName;
mainPackageVersion = dreamLock._generic.mainPackageVersion;
fetched = fetcher rec {
defaultPackage = dreamLock._generic.defaultPackage;
defaultPackageVersion = dreamLock._generic.packages."${defaultPackage}";
sources = dreamLock'.sources;
sourcesAggregatedHash = dreamLock'._generic.sourcesAggregatedHash;
};
@ -219,8 +219,13 @@ let
inputDirectories = [ source ];
});
dreamLock = lib.recursiveUpdate dreamLock' {
sources."${dreamLock'._generic.mainPackageName}"."${dreamLock'._generic.mainPackageVersion}" = {
dreamLock =
let
defaultPackage = dreamLock'._generic.defaultPackage;
defaultPackageVersion = dreamLock'._generic.packages."${defaultPackage}";
in
lib.recursiveUpdate dreamLock' {
sources."${defaultPackage}"."${defaultPackageVersion}" = {
type = "path";
path = "${source}";
};
@ -305,8 +310,9 @@ let
getSourceSpec
getDependencies
getCyclicDependencies
mainPackageName
mainPackageVersion
defaultPackageName
defaultPackageVersion
packages
packageVersions
;

View File

@ -8,8 +8,8 @@
}:
{
# sources attrset from dream lock
mainPackageName,
mainPackageVersion,
defaultPackage,
defaultPackageVersion,
sources,
...
}:
@ -31,7 +31,7 @@ let
source.path
# assume path relative to main package source
else
"${fetchedSources."${mainPackageName}"."${mainPackageVersion}"}/${source.path}"
"${fetchedSources."${defaultPackage}"."${defaultPackageVersion}"}/${source.path}"
else if fetchers.fetchers ? "${source.type}" then
fetchSource {
source = source // {

View File

@ -154,7 +154,7 @@
"type": "object",
"properties": {
"defaultPackage": { "type": ["string", "null"] },
"packages": { "type": "array" },
"packages": { "type": "object" },
"sourcesAggregatedHash": { "type": ["string", "null"] },
"subsystem": { "type": "string" },
"translatorParams": { "type": ["string", "null"] }

View File

@ -21,8 +21,8 @@
# Attributes
subsystemAttrs, # attrset
mainPackageName, # string
mainPackageVersion, # string
defaultPackageName, # string
defaultPackageVersion, # string
# attrset of pname -> versions,
# where versions is a list of version strings
@ -46,7 +46,7 @@ let
b = builtins;
# the main package
defaultPackage = packages."${mainPackageName}"."${mainPackageVersion}";
defaultPackage = packages."${defaultPackageName}"."${defaultPackageVersion}";
# manage pakcages in attrset to prevent duplicated evaluation
packages =

View File

@ -48,9 +48,9 @@
# transformed into a flat list.
inputData = ;
mainPackageName = ;
defaultPackageName = ;
mainPackageVersion = ;
defaultPackageVersion = ;
mainPackageDependencies =
lib.mapAttrsToList

View File

@ -24,13 +24,13 @@ let
inputData = parsed;
mainPackageName =
defaultPackage =
let
firstLine = (b.elemAt (lib.splitString "\n" (b.readFile "${cwd}/go.mod")) 0);
in
lib.last (lib.splitString "/" (b.elemAt (lib.splitString " " firstLine) 1));
mainPackageVersion = "unknown";
packages."${defaultPackage}" = "unknown";
subsystemName = "go";

View File

@ -112,7 +112,7 @@
# values
inputData = packageLockWithPinnedVersions;
mainPackageName =
defaultPackage =
if name != "{automatic}" then
name
else
@ -121,7 +121,7 @@
+ "Please specify extra argument 'name'"
));
mainPackageVersion = parsed.version or "unknown";
packages."${defaultPackage}" = parsed.version or "unknown";
mainPackageDependencies =
lib.mapAttrsToList

View File

@ -59,7 +59,7 @@
inputData = parsedLock;
mainPackageName =
defaultPackage =
if name != "{automatic}" then
name
else
@ -68,7 +68,7 @@
+ "Please specify extra argument 'name'"
));
mainPackageVersion = packageJSON.version or "unknown";
packages."${defaultPackage}" = packageJSON.version or "unknown";
subsystemName = "nodejs";

View File

@ -59,9 +59,10 @@ def main():
sources={},
_generic={
"subsystem": "python",
"mainPackageName": os.environ.get('NAME'),
"mainPackageVersion": os.environ.get('VERSION'),
"defaultPackage": os.environ.get('NAME'),
"packages": {
os.environ.get('NAME'): os.environ.get('VERSION'),
},
"sourcesAggregatedHash": None,
},
_subsystem={

View File

@ -149,9 +149,9 @@
# transformed into a flat list.
inputData = parsedDeps;
mainPackageName = package.name;
defaultPackage = package.name;
mainPackageVersion = package.version;
packages."${defaultPackage}" = package.version;
mainPackageDependencies =
let

View File

@ -60,9 +60,10 @@ let
readDreamLock
{ dreamLock = "${dir}/${d}/dream-lock.json"; });
packages = lock._generic.packages;
mainPackageName = lock._generic.mainPackageName;
mainPackageVersion = lock._generic.mainPackageVersion;
defaultPackageName = lock._generic.defaultPackage;
defaultPackageVersion = packages."${defaultPackageName}";
subsystemAttrs = lock._subsystem;
@ -96,12 +97,13 @@ let
interface = {
inherit
mainPackageName
mainPackageVersion
defaultPackageName
defaultPackageVersion
subsystemAttrs
getCyclicDependencies
getDependencies
getSourceSpec
packages
packageVersions
subDreamLocks
;
@ -110,11 +112,11 @@ let
getMainPackageSource = dreamLock:
dreamLock.sources
."${dreamLock._generic.mainPackageName}"
."${dreamLock._generic.mainPackageVersion}"
// {
pname = dreamLock._generic.mainPackageName;
version = dreamLock._generic.mainPackageVersion;
."${dreamLock._generic.defaultPackage}"
."${dreamLock._generic.packages."${dreamLock._generic.defaultPackage}"}"
// rec {
pname = dreamLock._generic.defaultPackage;
version = dreamLock._generic.packages."${pname}" ;
};
getSource = fetchedSources: pname: version:
@ -144,8 +146,10 @@ let
in
lock // {
_generic = lock._generic // {
mainPackageName = name;
mainPackageVersion = version;
defaultPackage = name;
packages = lock._generic.packages // {
"${name}" = version;
};
};
};

View File

@ -48,9 +48,9 @@ let
{
# values
inputData,
mainPackageName,
mainPackageVersion,
defaultPackage,
mainPackageDependencies,
packages,
subsystemName,
subsystemAttrs,
translatorName,
@ -119,8 +119,8 @@ let
allDependencies);
in
depGraph // {
"${mainPackageName}" = depGraph."${mainPackageName}" or {} // {
"${mainPackageVersion}" = mainPackageDependencies;
"${defaultPackage}" = depGraph."${defaultPackage}" or {} // {
"${packages."${defaultPackage}"}" = mainPackageDependencies;
};
};
@ -200,7 +200,7 @@ let
cyclesList =
findCycles
(utils.nameVersionPair mainPackageName mainPackageVersion)
(utils.nameVersionPair defaultPackage packages."${defaultPackage}")
{}
[];
in
@ -238,8 +238,8 @@ let
_generic =
{
inherit
mainPackageName
mainPackageVersion
defaultPackage
packages
;
subsystem = subsystemName;
sourcesAggregatedHash = null;