Age | Commit message (Collapse) | Author |
|
The speedup we might get is not too important, but the smaller binary
size is nice to have (currently, down from ~15 MiB to ~8 MiB).
|
|
We introduced the change to make MineMod compatible with mods that do
not have a mod.conf, but we forgot that read_conf()? will just make the
function return early in that case - and the fallback value is never
used.
This change makes it so that read_conf() is only called when a mod.conf
exists, which has the benefit that we get the legacy name resolution for
mods without mod.conf, but if there are I/O errors while reading the
config, we will still propagate them properly (same as dependencies()).
|
|
|
|
The user_choice() function was a bit weird because it needed a
"formatted" item for every item to select (not using the Display of the
item), but it also didn't support colored output. This change fixes that
by introducing a new trait that does colored output and by making
user_choice() use that trait to output the lines.
|
|
This allows mods to be installed via a git repository URL, such as
git+https://gitlab.com/...
|
|
Key-Value-Stores are not always as easy as every line containing a
key-value pair, there is also the variant that a value spans multiple
lines and is enclosed in """ (e.g. the description of some mods).
This also changes the API slightly, as we want to separate the parsing
code from the code that reads the file. This makes it easier to do
testing or to re-use the code for data that is already in-memory.
Therefore, kvstore::write now takes a writer and kvstore::save provides
the functionality that the old kvstore::write had.
|
|
|
|
Those mods might not have a mod.conf and instead define their
dependencies in depends.txt. A lot of mods in mineclone2 for example
still do that.
|
|
|
|
Especially SubcommandRequired is helpful, as without one, we're not
doing all that much.
|
|
|
|
Previously, install_mod was a huge function that did a lot of things at
once. Not only did it do the actual mod copying, it also had the
dependency resolution, user interaction, ...
Now, we've split the code and made it more re-usable. The dependency
resolution is done in Baas::install, with special "hooks" being given in
baas::Installer that allow a consumer to customize the installation and
embed the user interaction there.
The code itself is pretty much the same, it is just split up now.
|
|
|
|
This uses the workspace feature of cargo, with the benefit that
1) We can more cleanly group the binary (user facing) code from the
library
2) We can have dependencies that apply to the binary only
The first point could've been achieved without workspaces (Cargo
supports both binaries and libraries in a crate), but the second point
is what really makes this approach a lot better.
|
|
|
|
On second thought, we're just calling chown, so let's call it that.
|
|
|
|
This is useful if you run modderbaas as root but want the resulting
directories to be owned by the right uid/gid.
|
|
The function that we needed from there is very small and easily
implemented ourselves. On the other hand, fs_extra seemed to have some
weird options going on and implemented the copy in a bit of a roundabout
manner.
|
|
Apparently, the default world of minetest-server does not have a name
set (which is kind of okay because it is the only existing world
anyway). But ModderBaas needs to deal with this situation properly. In
this case, we simply take the directory name, similar to games.
|
|
Some mods do not come bundled in a separate directory, so we also
support archives that do not contain an inner directory now (e.g. the
"charcoal" mod).
|
|
|
|
|
|
This is the inital commit of a somewhat working version.
|