move src to src/, make packagable
This commit is contained in:
parent
99f4220a67
commit
55c5bc489c
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
*.swp
|
||||
Pipfile.lock
|
29
README.md
29
README.md
@ -1,4 +1,4 @@
|
||||
# Minecraft Plugin Sync
|
||||
# Minecraft Plugin Manager
|
||||
|
||||
mpm is a tool used to maintain the various servers and their plugins on
|
||||
play.malloc.gg.
|
||||
@ -22,16 +22,24 @@ be able to work in other systems where:
|
||||
- You're trying to upgrade a network to a new minecraft release but can't bring
|
||||
all the servers and their plugins along at the same time
|
||||
|
||||
## Installation
|
||||
|
||||
# pip install .
|
||||
|
||||
## Usage
|
||||
|
||||
To use, you'll need to create a `plugins.yml` file, using the same structure as
|
||||
the one in this repository. Then, create a versions/ directory Inside each
|
||||
server's plugins/ directory. For example, if your server.jar lives at
|
||||
`/srv/minecraft/server/`, you'll create
|
||||
`/srv/minecraft/server/plugins/versions/`. Plugin files are not automatically
|
||||
synchronized between each server's versions directory, though this would be the
|
||||
next direction for this tool to go. Versions are managed using simple symlinks,
|
||||
- Create a new plugin repository: `mpm repo add`
|
||||
- List repositories: `mpm repo list`
|
||||
- Import a package to a repository: `mpm repo import`
|
||||
|
||||
- Add a server to mpm: `mpm server add`
|
||||
- List your servers: `mpm server list`
|
||||
- Add a plugin to a server: `mpm server add-plugin`
|
||||
- Commit your changes: `mpm server sync`
|
||||
|
||||
Documentation is scarce. Sorry about that. Pull requests and wiki editors appreciated.
|
||||
|
||||
Versions are managed using simple symlinks,
|
||||
and they require that the actual .jar files use Semver naming. Any deviation
|
||||
from Semver can result in some really goofy behavior, but for the most part, the
|
||||
majority of plugins available on spigot.org include a compatible string in the
|
||||
@ -45,8 +53,7 @@ for good measure if you run into this.
|
||||
|
||||
## Known Bugs
|
||||
|
||||
- Sometimes you'll end up with a mismatch between where the symlink goes and the
|
||||
version'd filename, usually when you've got a version that goes beyond the
|
||||
traditional $MAJOR.$MINOR.$PATCH tuple. Just rename your files, I guess.
|
||||
- Bad documentation
|
||||
- 'mpm' is not an uncommon name
|
||||
|
||||
Maybe you'll find this useful too. Batteries not included.
|
||||
|
12
pyproject.toml
Normal file
12
pyproject.toml
Normal file
@ -0,0 +1,12 @@
|
||||
[build-system]
|
||||
requires = ["setuptools", "wheel", "setuptools-pipfile"]
|
||||
build-backend = "setuptools.build_meta"
|
||||
|
||||
[tool.setuptools-pipfile]
|
||||
|
||||
[project]
|
||||
name = "minecraft-package-manager"
|
||||
version = "0.0.1"
|
||||
|
||||
[project.scripts]
|
||||
mpm = "mpm.main:main"
|
0
src/mpm/__init__.py
Normal file
0
src/mpm/__init__.py
Normal file
@ -5,9 +5,9 @@ import sys
|
||||
import yaml
|
||||
import os
|
||||
|
||||
from repo import Repo
|
||||
from server import Server
|
||||
from model import *
|
||||
from mpm.repo import Repo
|
||||
from mpm.server import Server
|
||||
from mpm.model import *
|
||||
|
||||
try:
|
||||
from yaml import CLoader as Loader, CDumper as Dumper
|
||||
@ -23,7 +23,7 @@ class Config():
|
||||
|
||||
def __init__(self, path):
|
||||
if path is None:
|
||||
path = './mpm.yaml'
|
||||
path = os.path.expanduser('~/mpm.yaml')
|
||||
self.path = path
|
||||
with open(path, 'r') as fd:
|
||||
self.yaml = yaml.load(fd, Loader=Loader)
|
@ -3,8 +3,6 @@ from functools import total_ordering
|
||||
import os
|
||||
import re
|
||||
|
||||
#version_pattern = re.compile('^(?P<name>.*)-(?P<version>[^-]+)(?P<extra>-[^-]+)?\.jar$')
|
||||
version_pattern = re.compile('^(?P<name>.*)-(?P<version>[^-]+(?:-[^-]+)?)\.jar$')
|
||||
version_pattern = re.compile('^(?P<name>.+)-(?P<version>(?:\.?\d+)+).+jar$')
|
||||
|
||||
@total_ordering
|
73
src/mpm/plugin-sync.py
Executable file
73
src/mpm/plugin-sync.py
Executable file
@ -0,0 +1,73 @@
|
||||
#!/bin/env python
|
||||
import yaml
|
||||
import os
|
||||
import sys
|
||||
from model import *
|
||||
|
||||
try:
|
||||
from yaml import CLoader as Loader, CDumper as Dumper
|
||||
except ImportError:
|
||||
from yaml import Loader, Dumper
|
||||
|
||||
conf = yaml.load(open('plugins.yml', 'r'), Loader=Loader)
|
||||
|
||||
for (serverName,server) in conf['servers'].items():
|
||||
changeset = []
|
||||
if len(sys.argv) > 1 and serverName not in sys.argv[1:]:
|
||||
continue
|
||||
if 'pluginPath' not in server:
|
||||
continue
|
||||
if not os.path.exists(server['pluginPath']):
|
||||
print("Missing plugin path for {}: {}".format(serverName, server['pluginPath']))
|
||||
else:
|
||||
print("=== Updating server {}".format(serverName))
|
||||
pluginSpecs = {}
|
||||
for inherited in server.get('inherit', ()):
|
||||
for inheritedPlugin in conf['servers'][inherited]['plugins']:
|
||||
pluginSpecs[inheritedPlugin['name']] = PluginSpec(inheritedPlugin['name'], str(inheritedPlugin.get('version', '*')))
|
||||
|
||||
for pluginConf in server.get('plugins', ()):
|
||||
pluginSpecs[pluginConf['name']] = PluginSpec(pluginConf['name'], str(pluginConf.get('version', '*')))
|
||||
|
||||
repo = Repo(server['pluginPath'], pluginSpecs.values())
|
||||
outdatedLinks = []
|
||||
missing = []
|
||||
installed = []
|
||||
unmanaged = []
|
||||
conflicts = []
|
||||
for state in repo.pluginStates():
|
||||
if isinstance(state, OutdatedSymlink):
|
||||
outdatedLinks.append(state)
|
||||
elif isinstance(state, Installed):
|
||||
installed.append(state)
|
||||
elif isinstance(state, MissingVersions):
|
||||
missing.append(state)
|
||||
elif isinstance(state, UnmanagedFile):
|
||||
unmanaged.append(state)
|
||||
elif isinstance(state, SymlinkConflict):
|
||||
conflicts.append(state)
|
||||
|
||||
print("Installed plugins:")
|
||||
for state in sorted(installed):
|
||||
print("\t{} {}: {}".format(state.plugin.name, state.plugin.versionSpec, state.currentVersion))
|
||||
print("Oudated symlinks:")
|
||||
for state in sorted(outdatedLinks):
|
||||
print("\t{} {}: Current: {} Wanted: {}".format(state.plugin.name, state.plugin.versionSpec, state.currentVersion, state.wantedVersion))
|
||||
print("Missing plugins:")
|
||||
for state in sorted(missing):
|
||||
print("\t{}: {}".format(state.plugin.name, state.plugin.versionSpec))
|
||||
print("Unmanaged files:")
|
||||
for state in sorted(unmanaged):
|
||||
print("\t{}".format(state.filename))
|
||||
print("Symlink Conflicts:")
|
||||
for state in sorted(conflicts):
|
||||
print("\t{}.jar".format(state.plugin.name))
|
||||
|
||||
if len(outdatedLinks) > 0:
|
||||
print("Apply changes? [y/N]")
|
||||
answer = input().lower()
|
||||
if answer == "y":
|
||||
for state in outdatedLinks:
|
||||
repo.updateSymlinkForPlugin(state.plugin, state.wantedVersion)
|
||||
else:
|
||||
print("Not applying changes.")
|
@ -1,5 +1,5 @@
|
||||
import os
|
||||
from model import *
|
||||
from mpm.model import *
|
||||
import shutil
|
||||
|
||||
class Repo:
|
@ -1,4 +1,4 @@
|
||||
from model import *
|
||||
from mpm.model import *
|
||||
import shutil
|
||||
|
||||
class Server:
|
Loading…
Reference in New Issue
Block a user