Code Monkey home page Code Monkey logo

mob's People

Contributors

al12rs avatar anyoldname3 avatar dakraid avatar erri120 avatar holt59 avatar isanae avatar lostdragonist avatar qudix avatar ryan-rsm-mckenzie avatar silarn avatar twinki14 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

mob's Issues

Auto-detect prefix in parent directories

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.

Add filters for msbuild compiler errors, redirect to stderr

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.

Refactor build loops

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.

Curl sometimes hangs

I've seen mob hang inside curl several times, not doing anything. No clue why.

Optional submodules

Add an option to avoid adding submodules for MO repos, would make things slightly faster.

Stop using global clean flags from tools

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.

Removing readonly flag can't be interrupted

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?

Fallback org and branch

Add or change options to allow for multiple org/branch pairs to try when checking out projects.

Allow single process builds

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.

Implement full release

The release command only supports devbuilds for now, add an option for a full release, including translations, installer, etc.

Delete all bypass files

Add an option to delete all bypass files for a task. Search for bypass_file, it's in third parties like pyqt and python.

Split logs

Add an option to split the logs into one file per task.

Refuse to have a prefix inside mob

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.

Warn if tools are x86

Using "Developer Command Prompt for VS 2019" sets the paths for x86. Detect it and warn.

Generic branch and commit hashes for git projects

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.

Can't build mob with VS2022 (v17.2.4)

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 tasks from the ini

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.

Unhandled exception in mob::for_each_ts()

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

Sort task names

When task names are given to build, sort them in the same order as in the main list.

Allow SSH Git URLs

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.

Nexus Info tab problem

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.

Make `super` an alias

super is currently a special case in mob, it should be possible to make it an alias instead.

Weird font(?) change when building `gtest`

When mob "build and install" gtest, I often (always?) get a weird font change (or something similar) in the console:

image

It always happens on the gtest task.


Reference font just to confirm:

image

Add --reconfigure

Separate --rebuild into a new --reconfigure options, which reruns cmake, openssl configure, etc.

Allow batch mod install

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.

Checkout for PRs

Add something like build --pr repo/123:

  1. Find the remote branch for the PR from the github API;
  2. Attempt to checkout this org and branch for all MO projects;
  3. Fall back on main org/branch if it's not found (see #13);

Add parsing errors on the command line

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.

Allow not creating the "super" git repository

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/

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.