diff --git a/.gitignore b/.gitignore index 9395ce9..a9059ea 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +**/.git +.manager/* +!.manager/.gitkeep cache/ files/*.log diff --git a/.manager/.gitkeep b/.manager/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/README.md b/README.md index d566597..2e9f794 100644 --- a/README.md +++ b/README.md @@ -60,10 +60,21 @@ icc/ # ICC 色彩配置文件 ## 更新流程 -1. 在 mpv 中按 `M` 触发 manager.lua,观察控制台输出,确认无 `FAILED` 条目 -2. 更新完成后删除 manager 在子目录留下的嵌套 `.git`(否则 `git add` 会失败): +1. 在 mpv 中按 `M` 触发 manager.lua,观察控制台输出,确认无 `FAILED` 条目。可能会有其他报错如 `[manager] Fehler: externes Repository manager existiert bereits.`,这是正常的。只需要确保不出现全大写的 `FAILED` 即可。 +2. 将 manager.lua 在 dest 目录产生的嵌套 `.git` 目录迁移到仓库内的 `.manager/`(避免根仓库误判为 submodule,幂等可重复执行): ```bash - find -L ~/.config/mpv -mindepth 2 -name .git -type d | sort -r | xargs rm -rf + REPO=$(git -C ~/.config/mpv rev-parse --show-toplevel) + GITSTORE="$REPO/.manager" + mkdir -p "$GITSTORE" + find -L ~/.config/mpv -mindepth 2 -name .git -type d | while read gitdir; do + dest="${gitdir%/.git}" + rel="${dest#$REPO/}" + name=$(echo "$rel" | tr '/' '-') + mv "$gitdir" "$GITSTORE/$name" + depth=$(echo "$rel" | tr -cd '/' | wc -c) + ups=$(printf '../%.0s' $(seq 1 $((depth + 1)))) + echo "gitdir: ${ups}.manager/$name" > "$dest/.git" + done ``` 3. 重启 mpv,检查控制台有无 `unknown key` 或脚本加载失败的警告 4. 若有 `unknown key` 警告,说明对应脚本的配置项发生变化,找 `script-opts/` 下同名 `.conf` 对照脚本源码更新 diff --git a/manager.json b/manager.json index 85321bf..c759388 100644 --- a/manager.json +++ b/manager.json @@ -1,120 +1,120 @@ [ - { - "git": "https://github.com/po5/mpv_manager", - "branch": "main", - "whitelist": "manager%.lua$", - "dest": "~~/scripts" - }, - { - "git": "https://github.com/po5/evafast", - "branch": "rewrite", - "whitelist": "%.lua$", - "dest": "~~/scripts" - }, - { - "git": "https://github.com/stax76/mpv-scripts", - "branch": "main", - "whitelist": "delete_current_file%.lua$", - "dest": "~~/scripts" - }, - { - "git": "https://github.com/dyphire/mpv-scripts", - "branch": "main", - "blacklist": "license|%.md$|drcbox%.lua$|.-%-list%.lua$|mpv-torrserver.lua", - "dest": "~~/scripts" - }, - { - "git": "https://github.com/dyphire/mpv-playlistmanager", - "branch": "dev", - "whitelist": "playlistmanager%.lua$", - "dest": "~~/scripts" - }, - { - "git": "https://github.com/dyphire/mpv-sub-assrt", - "whitelist": "%.lua$", - "dest": "~~/scripts" - }, - { - "git": "https://github.com/dyphire/chapterskip", - "branch": "dev", - "whitelist": "%.lua$", - "dest": "~~/scripts" - }, - { - "git": "https://github.com/dyphire/Eisa01_mpv-scripts", - "branch": "dev", - "whitelist": "undoredo%.lua$|simplehistory%.lua$", - "dest": "~~/scripts" - }, - { - "git": "https://github.com/dyphire/autosubsync-mpv", - "branch": "v0.33_CM", - "whitelist": "readme%.md$|%.lua$", - "dest": "~~/scripts/autosubsync" - }, - { - "git": "https://github.com/christoph-heinrich/mpv-quality-menu", - "whitelist": "quality%-menu%.lua$", - "dest": "~~/scripts" - }, - { - "git": "https://github.com/tomasklaen/uosc", - "branch": "main", - "whitelist": "src/uosc/", - "dest": "~~/scripts/uosc" - }, - { - "git": "https://github.com/Tony15246/uosc_danmaku", - "branch": "main", - "blacklist": "^%.", - "dest": "~~/scripts/uosc_danmaku" - }, - { - "git": "https://github.com/CogentRedTester/mpv-sub-select", - "whitelist": "sub%-select%.lua$", - "dest": "~~/scripts" - }, - { - "git": "https://github.com/CogentRedTester/mpv-scripts", - "whitelist": "cycle%-commands%.lua$", - "dest": "~~/scripts" - }, - { - "git": "https://gist.github.com/igv/8a77e4eb8276753b54bb94c1c50c317e", - "whitelist": "%.glsl$", - "dest": "~~/shaders/igv" - }, - { - "git": "https://gist.github.com/igv/a015fc885d5c22e6891820ad89555637", - "whitelist": "%.glsl$", - "dest": "~~/shaders/igv" - }, - { - "git": "https://gist.github.com/igv/2364ffa6e81540f29cb7ab4c9bc05b6b", - "whitelist": "%.glsl$", - "dest": "~~/shaders/igv" - }, - { - "git": "https://gist.github.com/igv/36508af3ffc84410fe39761d6969be10", - "whitelist": "%.glsl$", - "dest": "~~/shaders/igv" - }, - { - "git": "https://github.com/Artoriuz/glsl-joint-bilateral", - "branch": "main", - "whitelist": "jointbilateral%.glsl$", - "dest": "~~/shaders/other" - }, - { - "git": "https://github.com/Artoriuz/glsl-pixel-clipper", - "branch": "main", - "whitelist": "%.glsl$", - "dest": "~~/shaders/other" - }, - { - "git": "https://github.com/bloc97/Anime4K", - "whitelist": "%.md$|%.glsl$", - "blacklist": "tensorflow", - "dest": "~~/shaders/Anime4K" - } + { + "git": "https://github.com/po5/mpv_manager", + "branch": "master", + "whitelist": "manager%.lua$", + "dest": "~~/scripts" + }, + { + "git": "https://github.com/po5/evafast", + "branch": "rewrite", + "whitelist": "%.lua$", + "dest": "~~/scripts" + }, + { + "git": "https://github.com/stax76/mpv-scripts", + "branch": "main", + "whitelist": "delete_current_file%.lua$", + "dest": "~~/scripts" + }, + { + "git": "https://github.com/dyphire/mpv-scripts", + "branch": "main", + "blacklist": "license|%.md$|drcbox%.lua$|.-%-list%.lua$|mpv-torrserver.lua", + "dest": "~~/scripts" + }, + { + "git": "https://github.com/dyphire/mpv-playlistmanager", + "branch": "dev", + "whitelist": "playlistmanager%.lua$", + "dest": "~~/scripts" + }, + { + "git": "https://github.com/dyphire/mpv-sub-assrt", + "whitelist": "%.lua$", + "dest": "~~/scripts" + }, + { + "git": "https://github.com/dyphire/chapterskip", + "branch": "dev", + "whitelist": "%.lua$", + "dest": "~~/scripts" + }, + { + "git": "https://github.com/dyphire/Eisa01_mpv-scripts", + "branch": "dev", + "whitelist": "undoredo%.lua$|simplehistory%.lua$", + "dest": "~~/scripts" + }, + { + "git": "https://github.com/dyphire/autosubsync-mpv", + "branch": "v0.33_CM", + "whitelist": "readme%.md$|%.lua$", + "dest": "~~/scripts/autosubsync" + }, + { + "git": "https://github.com/christoph-heinrich/mpv-quality-menu", + "whitelist": "quality%-menu%.lua$", + "dest": "~~/scripts" + }, + { + "git": "https://github.com/tomasklaen/uosc", + "branch": "main", + "whitelist": "src/uosc/", + "dest": "~~/scripts/uosc" + }, + { + "git": "https://github.com/Tony15246/uosc_danmaku", + "branch": "main", + "blacklist": "^%.|^\"", + "dest": "~~/scripts/uosc_danmaku" + }, + { + "git": "https://github.com/CogentRedTester/mpv-sub-select", + "whitelist": "sub%-select%.lua$", + "dest": "~~/scripts" + }, + { + "git": "https://github.com/CogentRedTester/mpv-scripts", + "whitelist": "cycle%-commands%.lua$", + "dest": "~~/scripts" + }, + { + "git": "https://gist.github.com/igv/8a77e4eb8276753b54bb94c1c50c317e", + "whitelist": "%.glsl$", + "dest": "~~/shaders/igv" + }, + { + "git": "https://gist.github.com/igv/a015fc885d5c22e6891820ad89555637", + "whitelist": "%.glsl$", + "dest": "~~/shaders/igv" + }, + { + "git": "https://gist.github.com/igv/2364ffa6e81540f29cb7ab4c9bc05b6b", + "whitelist": "%.glsl$", + "dest": "~~/shaders/igv" + }, + { + "git": "https://gist.github.com/igv/36508af3ffc84410fe39761d6969be10", + "whitelist": "%.glsl$", + "dest": "~~/shaders/igv" + }, + { + "git": "https://github.com/Artoriuz/glsl-joint-bilateral", + "branch": "main", + "whitelist": "jointbilateral%.glsl$", + "dest": "~~/shaders/other" + }, + { + "git": "https://github.com/Artoriuz/glsl-pixel-clipper", + "branch": "main", + "whitelist": "%.glsl$", + "dest": "~~/shaders/other" + }, + { + "git": "https://github.com/bloc97/Anime4K", + "whitelist": "%.md$|%.glsl$", + "blacklist": "tensorflow", + "dest": "~~/shaders/Anime4K" + } ] diff --git a/scripts/manager.lua b/scripts/manager.lua index 15a9373..26b9302 100644 --- a/scripts/manager.lua +++ b/scripts/manager.lua @@ -1,4 +1,3 @@ -local msg = require "mp.msg" local utils = require "mp.utils" local legacy = mp.command_native_async == nil local config = {} @@ -45,55 +44,22 @@ function apply_defaults(info) return info end -local function build_directory_string(dir, repo) - local str = "" - local contents = utils.readdir(dir) - if not contents then return msg.error("could not access local repo:", repo) end - for _, item in ipairs(contents) do - local path = dir..'/'..item - if utils.file_info(path).is_dir then - if item ~= ".git" then str = str..'/'..build_directory_string(path, repo)..'\n' end - else - str = str..(path:sub(repo:len()+2))..'\n' - end - end - return str -end - -local function get_file_list(info) - if not info.local_repo then - return run({"git", "-C", info.edist, "ls-tree", "-r", "--name-only", "remotes/manager/"..info.branch}).stdout - else - return build_directory_string(info.local_repo, info.local_repo) - end -end - function update(info) info = apply_defaults(info) if not info then return false end local base = nil - - info.edist = string.match(mp.command_native({"expand-path", info.dest}), "(.-)[/\\]?$") - mkdir(info.edist) - + + local e_dest = string.match(mp.command_native({"expand-path", info.dest}), "(.-)[/\\]?$") + mkdir(e_dest) + local files = {} - - if info.local_repo then - info.local_repo = mp.command_native({"expand-path", info.local_repo}) - if not utils.file_info(info.local_repo) then - info.local_repo = false - msg.warn("local repo not found - falling back to git") - end - end - - if not info.local_repo then - run({"git", "-C", info.edist, "remote", "add", "manager", info.git}) - run({"git", "-C", info.edist, "remote", "set-url", "manager", info.git}) - run({"git", "-C", info.edist, "fetch", "manager", info.branch}) - end - - for file in string.gmatch(get_file_list(info), "[^\r\n]+") do + + run({"git", "-C", e_dest, "remote", "add", "manager", info.git}) + run({"git", "-C", e_dest, "remote", "set-url", "manager", info.git}) + run({"git", "-C", e_dest, "fetch", "manager", info.branch}) + + for file in string.gmatch(run({"git", "-C", e_dest, "ls-tree", "-r", "--name-only", "remotes/manager/"..info.branch}).stdout, "[^\r\n]+") do local l_file = string.lower(file) if info.whitelist == "" or match(l_file, info.whitelist) then if info.blacklist == "" or not match(l_file, info.blacklist) then @@ -107,29 +73,20 @@ function update(info) end end end - + if base == nil then return false end - + if base ~= "" then base = base.."/" end - + if next(files) == nil then print("no files matching patterns") else for _, file in ipairs(files) do local based = string.sub(file, string.len(base)+1) local p_based = parent(based) - if p_based and not info.flatten_folders then mkdir(info.edist.."/"..p_based) end - - local c = "" - if info.local_repo then - local source = io.open(info.local_repo..'/'..file) - c = source:read("*a") - source:close() - else - c = string.match(run({"git", "-C", info.edist, "--no-pager", "show", "remotes/manager/"..info.branch..":"..file}).stdout, "(.-)[\r\n]?$") - end - - local f = io.open(info.edist.."/"..(info.flatten_folders and file:match("[^/]+$") or based), "w") + if p_based and not info.flatten_folders then mkdir(e_dest.."/"..p_based) end + local c = string.match(run({"git", "-C", e_dest, "--no-pager", "show", "remotes/manager/"..info.branch..":"..file}).stdout, "(.-)[\r\n]?$") + local f = io.open(e_dest.."/"..(info.flatten_folders and file:match("[^/]+$") or based), "w") f:write(c) f:close() end @@ -150,10 +107,8 @@ function update_all() end for i, info in ipairs(config) do - print("updating", (info.git:match("([^/]+)%.git$") or info.git).."...") - if not update(info) then msg.error("FAILED") end + print("update"..i, update(info)) end - print("all files updated") end -mp.add_key_binding(nil, "manager-update-all", update_all) +mp.add_key_binding(nil, "manager-update-all", update_all) \ No newline at end of file diff --git a/scripts/uosc_danmaku/README.md b/scripts/uosc_danmaku/README.md index a154e6e..de50f5a 100644 --- a/scripts/uosc_danmaku/README.md +++ b/scripts/uosc_danmaku/README.md @@ -754,7 +754,7 @@ fallback_server 想要使用此选项,请在mpv配置文件夹下的 `script-opts`中创建 `uosc_danmaku.conf`文件并自定义如下内容: ``` -fallback_server= https://api.danmu.icu +fallback_server=https://api.danmu.icu ```