modorganizer2 / mob Goto Github PK
View Code? Open in Web Editor NEWMod Organizer Builder.
Mod Organizer Builder.
Make it easy to checkout different versions of just super, linked to common third parties.
The "super" git repository is kind of huge with all the submodules, and is not updated (as far as I can tell) when doing a simple mob build super
so when using git-enhanced command line such as posh-git
, doing anything in modorganizer_super
is very slow since the command line as to be updated each time.
Feature: Add an option (maybe under super
task) to not create the "main" repository.
On a side note, the following repository are not added as submodules currently, this might be a bug?
Untracked files:
(use "git add <file>..." to include in what will be committed)
fnistool/
form43_checker/
installer/
preview_dds/
tool_configurator/
Some tasks support branch names, other commits. Have a generic way of specifying either for all tasks that use git. Right now, googletest on master is failing and it'd be real nice to have a commit hash for it.
Add -I
to invocations. Should probably refactor all the python processes into a python
tool.
https://discord.com/channels/265929299490635777/295876323518185473/739837893186420756
Fails with the following error on a clean checkout of the QT6 branch
D:\dev\mob>bootstrap.bat
D:\dev\mob\src\utility\algo.h(148,63): error C2672: 'std::declval': no matching overloaded function found [D:\dev\mob\v
s\mob.vcxproj]
D:\dev\mob\src\utility\algo.h(148,46): error C2974: 'std::declval': invalid template argument for '_Ty', type expected
[D:\dev\mob\vs\mob.vcxproj]
D:\dev\mob\src\utility\algo.h(149,7): error C2976: 'std::vector': too few template arguments [D:\dev\mob\vs\mob.vcxproj
]
D:\dev\mob\src\utility\algo.h(147): error C2641: cannot deduce template arguments for 'std::vector' [D:\dev\mob\vs\mob.
vcxproj]
D:\dev\mob\src\utility\algo.h(147): error C2783: 'std::vector<_Ty,_Alloc> std::vector(void) noexcept(<expr>)': could no
t deduce template argument for '_Ty' [D:\dev\mob\vs\mob.vcxproj]
D:\dev\mob\src\utility\algo.h(147,1): error C2780: 'std::vector<_Ty,_Alloc> std::vector(std::vector<_Ty,_Alloc>)': expe
cts 1 arguments - 0 provided [D:\dev\mob\vs\mob.vcxproj]
D:\dev\mob\src\utility\algo.h(148,63): error C2672: 'std::declval': no matching overloaded function found [D:\dev\mob\v
s\mob.vcxproj]
D:\dev\mob\src\utility\algo.h(148,46): error C2974: 'std::declval': invalid template argument for '_Ty', type expected
[D:\dev\mob\vs\mob.vcxproj]
D:\dev\mob\src\utility\algo.h(149,7): error C2976: 'std::vector': too few template arguments [D:\dev\mob\vs\mob.vcxproj
]
D:\dev\mob\src\utility\algo.h(147): error C2641: cannot deduce template arguments for 'std::vector' [D:\dev\mob\vs\mob.
vcxproj]
D:\dev\mob\src\utility\algo.h(147): error C2783: 'std::vector<_Ty,_Alloc> std::vector(void) noexcept(<expr>)': could no
t deduce template argument for '_Ty' [D:\dev\mob\vs\mob.vcxproj]
D:\dev\mob\src\utility\algo.h(147,1): error C2780: 'std::vector<_Ty,_Alloc> std::vector(std::vector<_Ty,_Alloc>)': expe
cts 1 arguments - 0 provided [D:\dev\mob\vs\mob.vcxproj]
D:\dev\mob\src\core\env.cpp(197,23): error C2641: cannot deduce template arguments for 'std::vector' [D:\dev\mob\vs\mob
.vcxproj]
D:\dev\mob\src\core\env.cpp(198,53): error C2780: 'std::vector<conditional_t<std::_Is_from_primary<std::iterator_traits
<remove_cv<remove_reference<_Ty>::type>::type>>,std::indirectly_readable_traits<remove_cv<remove_reference<_Ty>::type>:
:type>,std::iterator_traits<remove_cv<remove_reference<_Ty>::type>::type>>::value_type,_Alloc> std::vector(_Iter,_Iter,
_Alloc)': expects 3 arguments - 1 provided [D:\dev\mob\vs\mob.vcxproj]
D:\dev\mob\src\core\env.cpp(198,53): error C2780: 'std::vector<_Ty,_Alloc> std::vector(std::vector<_Ty,_Alloc> &&,const
_Identity<_Alloc>::type &) noexcept(<expr>)': expects 2 arguments - 1 provided [D:\dev\mob\vs\mob.vcxproj]
D:\dev\mob\src\core\env.cpp(198,53): error C2784: 'std::vector<_Ty,_Alloc> std::vector(std::vector<_Ty,_Alloc> &&) noex
cept': could not deduce template argument for 'std::vector<_Ty,_Alloc> &&' from 'std::vector' [D:\dev\mob\vs\mob.vcxpro
j]
D:\dev\mob\src\core\env.cpp(198,53): error C2784: 'std::vector<_Ty,_Alloc> std::vector(std::vector<_Ty,_Alloc> &&) noex
cept': could not deduce template argument for 'std::vector<_Ty,_Alloc> &&' from 'std::vector' [D:\dev\mob\vs\mob.vcxpro
j]
D:\dev\mob\src\core\env.cpp(198,53): error C2780: 'std::vector<_Ty,_Alloc> std::vector(const std::vector<_Ty,_Alloc> &,
const _Identity<_Alloc>::type &)': expects 2 arguments - 1 provided [D:\dev\mob\vs\mob.vcxproj]
D:\dev\mob\src\core\env.cpp(198,53): error C2784: 'std::vector<_Ty,_Alloc> std::vector(const std::vector<_Ty,_Alloc> &)
': could not deduce template argument for 'const std::vector<_Ty,_Alloc> &' from 'std::vector' [D:\dev\mob\vs\mob.vcxpr
oj]
D:\dev\mob\src\core\env.cpp(198,53): error C2784: 'std::vector<_Ty,_Alloc> std::vector(const std::vector<_Ty,_Alloc> &)
': could not deduce template argument for 'const std::vector<_Ty,_Alloc> &' from 'std::vector' [D:\dev\mob\vs\mob.vcxpr
oj]
D:\dev\mob\src\core\env.cpp(198,53): error C2784: 'std::vector<_Ty,_Alloc> std::vector(std::initializer_list<_Elem>,con
st _Alloc &)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'std::vector' [D:\dev\mob\vs\
mob.vcxproj]
D:\dev\mob\src\core\env.cpp(198,53): error C2784: 'std::vector<_Ty,_Alloc> std::vector(std::initializer_list<_Elem>,con
st _Alloc &)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'std::vector' [D:\dev\mob\vs\
mob.vcxproj]
D:\dev\mob\src\core\env.cpp(198,53): error C2780: 'std::vector<_Ty,_Alloc> std::vector(_Iter,_Iter,const _Alloc &)': ex
pects 3 arguments - 1 provided [D:\dev\mob\vs\mob.vcxproj]
D:\dev\mob\src\core\env.cpp(198,53): error C2780: 'std::vector<_Ty,_Alloc> std::vector(const allocator_traits<allocator
_traits<_Alloc>::rebind_alloc<_Ty>>::size_type,const _Ty &,const _Alloc &)': expects 3 arguments - 1 provided [D:\dev\m
ob\vs\mob.vcxproj]
D:\dev\mob\src\core\env.cpp(198,53): error C2780: 'std::vector<_Ty,_Alloc> std::vector(void) noexcept(<expr>)': expects
0 arguments - 1 provided [D:\dev\mob\vs\mob.vcxproj]
D:\dev\mob\src\core\env.cpp(198,53): error C2784: 'std::vector<_Ty,_Alloc> std::vector(std::vector<_Ty,_Alloc>)': could
not deduce template argument for 'std::vector<_Ty,_Alloc>' from 'std::vector' [D:\dev\mob\vs\mob.vcxproj]
D:\dev\mob\src\core\env.cpp(198,53): error C2784: 'std::vector<_Ty,_Alloc> std::vector(std::vector<_Ty,_Alloc>)': could
not deduce template argument for 'std::vector<_Ty,_Alloc>' from 'std::vector' [D:\dev\mob\vs\mob.vcxproj]
D:\dev\mob\src\core\env.cpp(200,11): error C2672: 'join': no matching overloaded function found [D:\dev\mob\vs\mob.vcxp
roj]
D:\dev\mob\src\core\env.cpp(200,29): error C2784: 'auto mob::join(const std::vector<_Ty,std::allocator<_Ty>> &,const Se
p &,To)': could not deduce template argument for 'const std::vector<_Ty,std::allocator<_Ty>> &' from 'const std::vector
' [D:\dev\mob\vs\mob.vcxproj]
D:\dev\mob\src\utility\algo.h(148,63): error C2672: 'std::declval': no matching overloaded function found [D:\dev\mob\v
s\mob.vcxproj]
D:\dev\mob\src\utility\algo.h(148,46): error C2974: 'std::declval': invalid template argument for '_Ty', type expected
[D:\dev\mob\vs\mob.vcxproj]
D:\dev\mob\src\utility\algo.h(149,7): error C2976: 'std::vector': too few template arguments [D:\dev\mob\vs\mob.vcxproj
]
D:\dev\mob\src\utility\algo.h(147): error C2641: cannot deduce template arguments for 'std::vector' [D:\dev\mob\vs\mob.
vcxproj]
D:\dev\mob\src\utility\algo.h(147): error C2783: 'std::vector<_Ty,_Alloc> std::vector(void) noexcept(<expr>)': could no
t deduce template argument for '_Ty' [D:\dev\mob\vs\mob.vcxproj]
D:\dev\mob\src\utility\algo.h(147,1): error C2780: 'std::vector<_Ty,_Alloc> std::vector(std::vector<_Ty,_Alloc>)': expe
cts 1 arguments - 0 provided [D:\dev\mob\vs\mob.vcxproj]
D:\dev\mob\src\utility\algo.h(147): error C2783: 'std::vector<_Ty,_Alloc> std::vector(void) noexcept(<expr>)': could no
t deduce template argument for '_Ty' [D:\dev\mob\vs\mob.vcxproj]
D:\dev\mob\src\utility\algo.h(147,1): error C2780: 'std::vector<_Ty,_Alloc> std::vector(std::vector<_Ty,_Alloc>)': expe
cts 1 arguments - 0 provided [D:\dev\mob\vs\mob.vcxproj]
if (! $?) {
Write-Error "Build failed"
exit $LastExitCode
} : Build failed
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException
```
Add or change options to allow for multiple org/branch pairs to try when checking out projects.
This works:
.\mob -d C:\MO2-dev\build build --ini ..\another.ini
but this doesn't:
.\mob -d C:\MO2-dev\build build --ini ..\another.ini modorganizer
because once modorganizer
is added, --ini
becomes part of the build
command instead of the global options. clipp
doesn't seem to have anything good for reporting errors (this is actually parsed fine, but modorganizer
is considered "blocked", whatever that means).
Figure out better error reporting instead of just dumping a useless usage.
Add an option to disable all the multiprocess options given to various tools (there's a bunch). Appveyor in particular seems to get really starved.
Add all the comments to all the places.
Add an option to delete all bypass files for a task. Search for bypass_file
, it's in third parties like pyqt and python.
Sorry for my English. When I click on the Nexus Info tab (in mod information) my computer freezes, the screen starts to turn off and on. The task manager cannot be called. I have to reload via reset. The same thing happens when I press the button to sort plugins using LOOT (above the list of mods). If I run LOOT without MO there is no problem. There was nothing like this with other programs / games. I use MO for Skyrim LE, Fallout3 and NV.
Windows 7 SP1 64bit system. Videocard Asus HD7750.
Not handling non existing prefix with ignore_ts=true
.
.\mob --dry -d C:\MO2-dev\build --ini c:\dev\mob.ini build modorganizer
0.15 [modorganizer] running task
0.15 [modorganizer] fetching
mob has crashed
*****************************
unhandled exception: recursive_directory_iterator::recursive_directory_iterator: The system cannot find the path specified.: "C:\MO2-dev\build\build\modorganizer_super\modorganizer"
00007FF64699DEC7 C:\dev\projects\mob\src\utility.cpp:47 private: void __cdecl mob::process::read_pipes(bool) __ptr64
00007FF6469A6ABB C:\dev\projects\mob\src\utility.cpp:120 mob::terminate_handler
00007FF646C4895F minkernel\crts\ucrt\src\appcrt\misc\terminate.cpp:49 terminate
00007FF646BDC528 D:\agent\_work\5\s\src\vctools\crt\vcruntime\src\eh\frame.cpp:770 FindHandler<__FrameHandler4>
00007FF646BDDF13 D:\agent\_work\5\s\src\vctools\crt\vcruntime\src\eh\frame.cpp:350 __InternalCxxFrameHandler<__FrameHandler4>
00007FF646BD5C6B D:\agent\_work\5\s\src\vctools\crt\vcruntime\src\eh\risctrnsctrl.cpp:288 __CxxFrameHandler4
00007FFA8E4A11CF __chkstk
00007FFA8E46A209 RtlRaiseException
00007FFA8E469FC3 RtlRaiseException
00007FFA8B79A799 RaiseException
00007FF646BD3DF0 D:\agent\_work\5\s\src\vctools\crt\vcruntime\src\eh\throw.cpp:75 _CxxThrowException
00007FF64686CFD9 C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.27.28826\include\filesystem:1812 std::filesystem::_Throw_fs_error
00007FF646971A73 C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.27.28826\include\filesystem:2835 std::filesystem::recursive_directory_iterator::recursive_directory_iterator
00007FF646A2A58C C:\dev\projects\mob\src\tools\git.cpp:344 mob::for_each_ts<`mob::git::do_ignore_ts'::`2'::<lambda_1> >
00007FF646A3119F C:\dev\projects\mob\src\tools\git.cpp:374 mob::git::do_ignore_ts
00007FF646A30F79 C:\dev\projects\mob\src\tools\git.cpp:286 mob::git::do_clone
00007FF646A31102 C:\dev\projects\mob\src\tools\git.cpp:246 mob::git::do_clone_or_pull
00007FF646A3156B C:\dev\projects\mob\src\tools\git.cpp:199 mob::git::do_run
00007FF646A3FF66 C:\dev\projects\mob\src\tools\tools.cpp:46 mob::tool::run
00007FF646A0BF5E C:\dev\projects\mob\src\tasks\task.cpp:592 mob::task::run_tool_impl
00007FF6469B2DFE C:\dev\projects\mob\src\tasks\task.h:134 mob::task::run_tool<mob::git &>
00007FF6469CA845 C:\dev\projects\mob\src\tasks\modorganizer.cpp:90 `mob::modorganizer::do_fetch'::`2'::<lambda_2>::operator()
00007FF6469C9033 C:\dev\projects\mob\src\utility.h:177 mob::instrumentable<7>::instrument<1,`mob::modorganizer::do_fetch'::`2'::<lambda_2> >
00007FF6469CBF9E C:\dev\projects\mob\src\tasks\modorganizer.cpp:95 mob::modorganizer::do_fetch
00007FF646A00FE5 C:\dev\projects\mob\src\tasks\task.cpp:497 ``mob::task::fetch'::`2'::<lambda_1>::operator()'::`2'::<lambda_1>::operator()
00007FF6469FA7D2 C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.27.28826\include\type_traits:1597 std::invoke<``mob::task::fetch'::`2'::<lambda_1>::operator()'::`2'::<lambda_1> &>
00007FF6469F5162 C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.27.28826\include\type_traits:1641 std::_Invoker_ret<void,1>::_Call<``mob::task::fetch'::`2'::<lambda_1>::operator()'::`2'::<lambda_1> &>
00007FF646A03BF9 C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.27.28826\include\functional:907 std::_Func_impl_no_alloc<``mob::task::fetch'::`2'::<lambda_1>::operator()'::`2'::<lambda_1>,void>::_Do_call
00007FF646840FBC C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.27.28826\include\functional:955 std::_Func_class<void>::operator()
00007FF646A0C30D C:\dev\projects\mob\src\tasks\task.cpp:380 mob::task::threaded_run
00007FF646A01688 C:\dev\projects\mob\src\tasks\task.cpp:511 `mob::task::fetch'::`2'::<lambda_1>::operator()
00007FF646A00C6A C:\dev\projects\mob\src\utility.h:63 `mob::start_thread<`mob::task::fetch'::`2'::<lambda_1> >'::`2'::<lambda_1>::operator()
00007FF6469FA952 C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.27.28826\include\type_traits:1597 std::invoke<`mob::start_thread<`mob::task::fetch'::`2'::<lambda_1> >'::`2'::<lambda_1> >
00007FF6469F73DC C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.27.28826\include\thread:44 std::thread::_Invoke<std::tuple<`mob::start_thread<`mob::task::fetch'::`2'::<lambda_1> >'::`2'::<lambda_1> >,0>
00007FF646C48A4C minkernel\crts\ucrt\src\appcrt\startup\thread.cpp:97 thread_start<unsigned int (__cdecl*)(void *),1>
00007FFA8DCC7BD4 BaseThreadInitThunk
00007FFA8E46CE51 RtlUserThreadStart
Add something like build --pr repo/123
:
When task names are given to build
, sort them in the same order as in the main list.
When building fails because of compiler errors, msbuild will output a failure message to stderr, but the actual compiler error is in stdout, which is considered trace level. Add a filter for msbuild stdout that redirects error message (: error C\d+
or something) to stderr.
Right now, tools like git
will delete stuff themselves when flags like --redownload
are passed. It was initially convenient because a lot of tasks use git, but I don't like it. Make each task responsible for deleting their own stuff.
Add an option to split the logs into one file per task.
Right now, mob just builds tasks in a loop. I can probably just add an enabled
flag on tasks and turn that off for tasks that are not specified. This would also fix #24.
This can cause issues, especially since there's already a build
folder in mob. Maybe allow in a subfolder, but definitely not in the root.
Some developers like origin
and mine
instead of upstream
and origin
.
Add options for configuration types per task.
Using "Developer Command Prompt for VS 2019" sets the paths for x86. Detect it and warn.
Separate --rebuild
into a new --reconfigure
options, which reruns cmake, openssl configure, etc.
zlib will need to be updated to 1.3 since 1.2.13 is not available on the site anymore
When running mob
without a -d
, mob
looks for a .ini
in the current folder to check if it has a paths/prefix
entry, and use it.
It would be nice if mob
could look up the parent folders as well, so that one could typically do mob cmake ./vsbuild
within one of the MO2 projects.
super
is currently a special case in mob, it should be possible to make it an alias instead.
As the title says ;)
I tried to do it by adding a use_ssh
option, and it works for cloning (or the initial pull, don't really know how you do it).
Then I noticed it did not work for remote_XXX
, so I modified the git
code to handle remote_url
instead of org/name and then I noticed that git_command
heavily rely on this so I gave up since that would break a lots of things.
Add an option to avoid adding submodules for MO repos, would make things slightly faster.
I've seen mob hang inside curl several times, not doing anything. No clue why.
A couple of tasks are repeating operations in a loop because they might fail, mostly because of multiprocess builds with jom (nmm, openssl, etc.) Refactor this into something more general.
When mob tries to delete a directory but gets an access denied error, it assumes files in the directory are read-only. The 7z archive in particular has all files marked as read-only. So op::remove_readonly()
will go through all directory recursively and try to chmod every single file. With log level 5 (the default for the log file), this logs a line per file (maybe change the level to dump for this line?)
Since it's in a tight loop in op
, it can't be interrupted because the flag actually lives in task
. Find a way to propagate this flag to op
functions in general. Maybe also set it somewhere in context
?
The MOBINI
environment variable is currently handled at a higher priority than the mob.ini
inside the current directory.
Add modorganizer tasks from the ini, run them at the end of the build. The main problem is that tasks are currently added way before the ini is loaded.
Cut it.
The release
command only supports devbuilds for now, add an option for a full release, including translations, installer, etc.
At present MO2 only allows for a single mod to be installed at a time; this is fine if you are building your list 1 by 1 or over time, but if you have a copy of all your favorite mods downloaded and stored somewhere as their original archive files and there are say, 100+ of them, then doing this by hand 1 at a time manually is honestly a form of torture.
MO2 could really do with an option to either select multiple in the open file dialog, or a supplementary install multiple option in the file menu so that one can batch install a large collection of mods in one go.
I know it's possible to place the archives in the downloads folder, but again the downloads section on the right does not allow the selection of multiple items, so this does not really negate the aforementioned torture, it only swaps the open dialog step with a scroll and select step.
Handle mob build [
--version
should set the version for all .dll
s and .exe
s built.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.