It's very verbose to enforce this through masterlist metadata, and the data is available through libloadorder. Don't treat Update.esm for the original Skyrim as having a hardcoded position, as it doesn't even though it's implicitly active.
- Don't move LOOT's game folder around, to leave the filesystem in a more useful state if some part of Clone() fails
- If the target directory already exists, clone into a temporary directory, then move the contents into the game folder, replacing existing files/folders with the same names.
- Before moving repository files, free libgit2's repo handle, as it keeps a file handle open while it's allocated.
- Refactor all direct libgit2 usage into GitHelper.
- Simplify the masterlist update logic, don't bother trying to merge branches or checkout an up-to-date local branch if the working copy has edits, just delete the branch and checkout a new copy from the remote.
Fixes#22. If a cycle is found in group-isolation, ignore the source plugin when adding edges for plugins in the all the groups that form paths between the source and target plugins in the cycle, instead of just that pair of plugins.
I've filed rust-lang/cargo#5518 about this as the previous command worked as expected in Rust 1.25.0. It's probably not a bad idea to be more specific though.