| Time | 
            Nick | 
            Message | 
        
        
	| 02:25 | 
	 | 
	queria joined #minetest-dev | 
        
	| 03:00 | 
	 | 
	specing_ joined #minetest-dev | 
        
	| 03:47 | 
	 | 
	Kimapr joined #minetest-dev | 
        
	| 04:40 | 
	 | 
	Kimapr1 joined #minetest-dev | 
        
	| 05:50 | 
	 | 
	ssieb joined #minetest-dev | 
        
	| 07:10 | 
	 | 
	longerstaff13 joined #minetest-dev | 
        
	| 07:17 | 
	 | 
	entuland joined #minetest-dev | 
        
	| 07:17 | 
	 | 
	YuGiOhJCJ joined #minetest-dev | 
        
	| 07:51 | 
	 | 
	YuGiOhJCJ joined #minetest-dev | 
        
	| 07:55 | 
	 | 
	tech_exorcist joined #minetest-dev | 
        
	| 09:02 | 
	 | 
	queria joined #minetest-dev | 
        
	| 09:33 | 
	 | 
	calcul0n__ joined #minetest-dev | 
        
	| 10:10 | 
	 | 
	appguru joined #minetest-dev | 
        
	| 11:13 | 
	 | 
	calcul0n__ joined #minetest-dev | 
        
	| 11:21 | 
	 | 
	appguru joined #minetest-dev | 
        
	| 12:01 | 
	 | 
	appguru joined #minetest-dev | 
        
	| 12:03 | 
	appguru | 
	Krock: Here's a Lua PoC for hard dependency load order using DFS as mentioned by ruben: https://gist.github.com/appgurueu/b323dc18c3e99f05bb98318d3ab335ae | 
        
	| 12:04 | 
	appguru | 
	That also generates useful error messages for circular dependencies using a singly linked list | 
        
	| 12:05 | 
	appguru | 
	Soft dependencies unfortunately aren't as easy. Ruben's proposal of just silently ignoring cycles doesn't work. | 
        
	| 12:08 | 
	appguru | 
	Well it does work, but I'm pretty sure it doesn't guarantee maximization of fulfilled soft dependencies. | 
        
	| 12:42 | 
	 | 
	MTDiscord3 joined #minetest-dev | 
        
	| 12:53 | 
	 | 
	appguru joined #minetest-dev | 
        
	| 12:59 | 
	 | 
	twoelk joined #minetest-dev | 
        
	| 14:09 | 
	rubenwardy | 
	I didn't say silently ignore cycles? | 
        
	| 14:09 | 
	rubenwardy | 
	Soft dependencies should act like hard dependencies if the depended on mod is present and enabled | 
        
	| 14:17 | 
	sfan5 | 
	that sounds reasonable | 
        
	| 14:17 | 
	sfan5 | 
	do a pass before resolving dependencies where soft deps that exist are turned into hard deps and the rest thrown away | 
        
	| 14:44 | 
	 | 
	Fixer joined #minetest-dev | 
        
	| 15:00 | 
	 | 
	specing_ joined #minetest-dev | 
        
	| 15:18 | 
	 | 
	nrz joined #minetest-dev | 
        
	| 16:01 | 
	sfan5 | 
	pushing http://sprunge.us/fVwSFv?diff in 5m | 
        
	| 16:04 | 
	sfan5 | 
	uh somehow that's missing part of the changes | 
        
	| 16:05 | 
	sfan5 | 
	just imagine the diff goes on and adds an elseif | 
        
	| 16:34 | 
	 | 
	tech_exorcist joined #minetest-dev | 
        
	| 18:06 | 
	Krock | 
	<rubenwardy> Soft dependencies should act like hard dependencies if the depended on mod is present and enabled | 
        
	| 18:06 | 
	Krock | 
	and this caused problems when a mod couldn't be laoded | 
        
	| 18:06 | 
	Krock | 
	and the entire soft-dependency chain would collapse as well | 
        
	| 18:07 | 
	rubenwardy | 
	it doesn't - because now the game stops loading rather than silently disabling mods | 
        
	| 18:07 | 
	rubenwardy | 
	so the user can disable the soft depended on mods that can't load | 
        
	| 18:07 | 
	Krock | 
	but stopping there for each mod is tiring. an entire list of dependency issues is much more favourable | 
        
	| 18:08 | 
	Krock | 
	i.e. when multiple hard dependencies are missing | 
        
	| 18:08 | 
	rubenwardy | 
	rather than Minetest itself disabling the mod softed depended mods and other mods that soft depend on it | 
        
	| 18:08 | 
	Krock | 
	otherwise it's a try&error&repeat cycle | 
        
	| 18:08 | 
	rubenwardy | 
	yeah that's possible without any graph stuff - just look for the existence of mods | 
        
	| 18:08 | 
	Krock | 
	yes of course. the current approach is not good either | 
        
	| 18:09 | 
	Krock | 
	yet that existence check does not ensure logical integrity | 
        
	| 18:09 | 
	Krock | 
	such as loops | 
        
	| 18:09 | 
	rubenwardy | 
	which is why you can do graph logic to check for loops | 
        
	| 18:10 | 
	Krock | 
	ah. you're speaking of two checks. one for missing dependencies, and another for loops, as demonstrated in your code | 
        
	| 18:10 | 
	Krock | 
	what I want is a list of erroneous mods | 
        
	| 18:11 | 
	MTDiscord | 
	<appguru> the code I provided does exactly that, Krock | 
        
	| 18:11 | 
	Krock | 
	checking rn | 
        
	| 18:11 | 
	MTDiscord | 
	<appguru> by keeping the path (the cycle) as a linked list | 
        
	| 18:11 | 
	MTDiscord | 
	<appguru> note that a soft dependency cycle should not trigger an error however | 
        
	| 18:12 | 
	rubenwardy | 
	it should | 
        
	| 18:12 | 
	rubenwardy | 
	soft dependencies require that the dependency loads before a depender | 
        
	| 18:12 | 
	rubenwardy | 
	it's soft because the dependency doesn't need to exist. But if it does, it should load before | 
        
	| 18:12 | 
	rubenwardy | 
	so cycles with soft dependencies should cause an error | 
        
	| 18:13 | 
	rubenwardy | 
	as said "soft dependencies should act like hard dependencies if the depended on mod is present and enabled" | 
        
	| 18:13 | 
	rubenwardy | 
	there's no meaning for a soft dependency where the mod doesn't need to load before | 
        
	| 18:13 | 
	Krock | 
	they're soft because they're optional | 
        
	| 18:13 | 
	rubenwardy | 
	yeah | 
        
	| 18:13 | 
	rubenwardy | 
	that's a better term sorry | 
        
	| 18:14 | 
	rubenwardy | 
	the opposite of optional is required though, and required dependency sounds silly | 
        
	| 18:14 | 
	Krock | 
	which again means that the dependencies are not necessary met | 
        
	| 18:14 | 
	rubenwardy | 
	There is some usefulness in having hard deps which don't need to load before - perhaps you don't need them at load time, and want to avoid cycles | 
        
	| 18:15 | 
	Krock | 
	hmm | 
        
	| 18:15 | 
	Krock | 
	currently there's no way to indicate that | 
        
	| 18:16 | 
	rubenwardy | 
	I'd also like to add "provides" as well. For example, it's too late for mobs redo but really its mod name should be `mobs_redo` and it should "provide" the `mobs` name | 
        
	| 18:16 | 
	Krock | 
	and I haven't seen any such problem so far | 
        
	| 18:16 | 
	rubenwardy | 
	and then mods could depend on `mobs_redo` specifically, or `mobs` generally | 
        
	| 18:17 | 
	Krock | 
	that's what "name = xxx" does | 
        
	| 18:17 | 
	rubenwardy | 
	that's a bit messy though, you can't install multiple at a time and it gets hard for ContentDB to resolve | 
        
	| 18:17 | 
	rubenwardy | 
	you also can't specifically say you want a fork or versions like a fork | 
        
	| 18:17 | 
	Krock | 
	depending on a group of mods is an easy cause for compatibility issues | 
        
	| 18:18 | 
	Krock | 
	they would have to be API-compatible which is hardly possible IMO | 
        
	| 18:19 | 
	rubenwardy | 
	we already have this situation with mod names, but worse as mods then must share a name | 
        
	| 18:19 | 
	rubenwardy | 
	also this is sidetracking massively | 
        
	| 18:39 | 
	 | 
	behalebabo joined #minetest-dev | 
        
	| 19:04 | 
	pgimeno | 
	isn't there a need for a mod to specify "I depend on this mod, but it does not necessarily need to be loaded before me"? | 
        
	| 19:04 | 
	MTDiscord | 
	<Jonathon> No? | 
        
	| 19:05 | 
	MTDiscord | 
	<Jonathon> More like i need one mod or another | 
        
	| 19:05 | 
	MTDiscord | 
	<Jonathon> Because right now the best solution is to put them both as optional and then check to see if either or exists | 
        
	| 19:06 | 
	Krock | 
	pgimeno: that's what technically optional dependencies should do IMO. but there's a little conflict of interests | 
        
	| 19:07 | 
	pgimeno | 
	it looks like this was never given enough thought and we've ended up with a mess | 
        
	| 19:09 | 
	Krock | 
	yes | 
        
	| 19:15 | 
	pgimeno | 
	I'm not sure I agree with rubenwardy. In case a circular dependency is found and an optional dependency is part of the chain, there's always the option of treating the depended mod as absent and go on. | 
        
	| 19:16 | 
	pgimeno | 
	I don't see it as an error, but as a warning. | 
        
	| 19:19 | 
	pgimeno | 
	"Warning: mod x depends on mod y, but it may not be able to take advantage of it due to a circular dependency" | 
        
	| 19:38 | 
	rubenwardy | 
	That's invalid, because in that case a mod will load before it's dependency | 
        
	| 19:38 | 
	rubenwardy | 
	It needs to throw an error, or disable mods like it does now | 
        
	| 19:39 | 
	rubenwardy | 
	Otherwise you will break guarantees | 
        
	| 19:40 | 
	rubenwardy | 
	How optional dependencies works does make sense | 
        
	| 19:40 | 
	rubenwardy | 
	But it would be nice to have a way to make dependencies without forcing orders, to help avoid cycles | 
        
	| 19:41 | 
	rubenwardy | 
	Optional dependencies without requiring they load first has no meaning at all, other than a recommendation to the user | 
        
	| 19:41 | 
	Krock | 
	the order would be nice to have | 
        
	| 19:41 | 
	Krock | 
	either the dependency (i.e. order) is fulfilled or not | 
        
	| 19:42 | 
	pgimeno | 
	yes, I've been thinking about "informational dependencies" too. Kinda like Debian's "suggests" | 
        
	| 19:43 | 
	pgimeno | 
	a way of informing the user that "this mod can make use of this other mod if installed" | 
        
	| 19:43 | 
	rubenwardy | 
	Say you optionally depend on the stairs mod - you need it to load first if it is installed, otherwise the API won't be available at load time | 
        
	| 19:43 | 
	pgimeno | 
	that's right, but what happens when not? | 
        
	| 19:44 | 
	rubenwardy | 
	It will crash if the mod is enabled and not loaded first | 
        
	| 19:44 | 
	pgimeno | 
	crash? | 
        
	| 19:44 | 
	rubenwardy | 
	If the mod isn't enabled then it will skip registering stairs | 
        
	| 19:44 | 
	pgimeno | 
	it's optional, it should work without it | 
        
	| 19:44 | 
	rubenwardy | 
	Mods use Minetest.get_modpath to check whether a mod is available | 
        
	| 19:45 | 
	pgimeno | 
	isn't that a mod bug? | 
        
	| 19:45 | 
	rubenwardy | 
	No | 
        
	| 19:45 | 
	rubenwardy | 
	Also, if you require them to check for globals, you know have a UX problem | 
        
	| 19:45 | 
	rubenwardy | 
	Because they have enabled the dependency mod, but due to a mod cycle another mod isn't registering stairs | 
        
	| 19:46 | 
	rubenwardy | 
	Optional dependencies must load before the depender, this is guaranteed by the Lua API | 
        
	| 19:46 | 
	rubenwardy | 
	But we can add new depend types that don't enforce ordering | 
        
	| 19:47 | 
	pgimeno | 
	I mean, the decision of whether to use an optional mod should be made at initialization, and stick to it during normal runtime; I consider doing otherwise a mod bug | 
        
	| 19:47 | 
	rubenwardy | 
	Still a UX issue, and breaks guarantees | 
        
	| 19:47 | 
	rubenwardy | 
	You want 3 or 4 depend types here | 
        
	| 19:48 | 
	rubenwardy | 
	(required, optional) * (sorted, unsorted) | 
        
	| 19:49 | 
	pgimeno | 
	optional unsorted is purely informational | 
        
	| 19:49 | 
	rubenwardy | 
	yeah | 
        
	| 19:49 | 
	rubenwardy | 
	optional unsorted would be essentially be "suggested" | 
        
	| 19:50 | 
	rubenwardy | 
	required unsorted would be useful for avoiding cycle issues when you don't need to use the mod at load time | 
        
	| 19:50 | 
	pgimeno | 
	yes, that's the reason for my earlier question (that Jonathon responded negatively) | 
        
	| 19:53 | 
	rubenwardy | 
	anyway, back to the new mod order algorithm - there's a potential API breakage: where a game includes hard dependencies. Sometimes this is a bug, other times it's done to enable functionality when a third-party mod is installed | 
        
	| 19:55 | 
	sfan5 | 
	reminder #11287 | 
        
	| 19:55 | 
	ShadowBot | 
	https://github.com/minetest/minetest/issues/11287 -- Take advantage of IrrlichtMt target by JosiahWI | 
        
	| 19:57 | 
	pgimeno | 
	hmm, come to think about it, a game could be one "root" mod plus a list of dependencies (made available in the game directory) | 
        
	| 19:57 | 
	pgimeno | 
	maybe it's that way already, I haven't paid enough attention to that part | 
        
	| 19:59 | 
	pgimeno | 
	it's not difficult to establish a loading order, look up 'topological sorting' | 
        
	| 20:00 | 
	MTDiscord | 
	<appguru> what ruben described is effectively topological sorting | 
        
	| 20:01 | 
	pgimeno | 
	that's what you use when you have a partial order (like that of "X must be loaded before Y" when not all mods specify that) | 
        
	| 20:01 | 
	pgimeno | 
	yeah | 
        
	| 21:50 | 
	 | 
	Extex joined #minetest-dev | 
        
	| 23:57 | 
	 | 
	Alias2 joined #minetest-dev |