- 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.
Skip adding an edge between a pair of plugins if all the following
conditions are met:
- the edge is to be added due to group membership
- adding the edge would introduce a cycle in the absence of any
other group membership edges.