From e597645d3b60b9e65a8cfdc2bf05eaca2e257f0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E6=83=A0=E6=B0=91?= <9155544@qq.com> Date: Mon, 27 Apr 2026 15:45:44 +0800 Subject: [PATCH] fix(installer): preserve http protocol in custom module clone URLs Previously, parseSource() hardcoded 'https://' when building cloneUrl, forcing http:// Git URLs (e.g., internal LAN hosts) to upgrade to https. This broke cloning for self-hosted Git servers that only serve over HTTP. - Capture the protocol from the regex match instead of discarding it - Update JSDoc and inline comments to document HTTP support - Update install-custom-modules docs (EN, ZH, VN) to list HTTP URL type Fixes the --custom-source flag for http:// addresses. --- docs/how-to/install-custom-modules.md | 1 + docs/vi-vn/how-to/install-custom-modules.md | 1 + docs/zh-cn/how-to/install-custom-modules.md | 1 + tools/installer/modules/custom-module-manager.js | 13 +++++++------ 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/docs/how-to/install-custom-modules.md b/docs/how-to/install-custom-modules.md index 288415afa..c4a38d41d 100644 --- a/docs/how-to/install-custom-modules.md +++ b/docs/how-to/install-custom-modules.md @@ -68,6 +68,7 @@ Select **Yes**, then provide a source: | Input Type | Example | | --------------------- | ------------------------------------------------- | | HTTPS URL (any host) | `https://github.com/org/repo` | +| HTTP URL (any host) | `http://host/org/repo` | | HTTPS URL with subdir | `https://github.com/org/repo/tree/main/my-module` | | SSH URL | `git@github.com:org/repo.git` | | Local path | `/Users/me/projects/my-module` | diff --git a/docs/vi-vn/how-to/install-custom-modules.md b/docs/vi-vn/how-to/install-custom-modules.md index 59ca36560..0b4064f1c 100644 --- a/docs/vi-vn/how-to/install-custom-modules.md +++ b/docs/vi-vn/how-to/install-custom-modules.md @@ -68,6 +68,7 @@ Chọn **Yes**, rồi nhập nguồn: | Loại đầu vào | Ví dụ | | --------------------- | ------------------------------------------------- | | HTTPS URL trên bất kỳ host nào | `https://github.com/org/repo` | +| HTTP URL trên bất kỳ host nào | `http://host/org/repo` | | HTTPS URL trỏ vào một thư mục con | `https://github.com/org/repo/tree/main/my-module` | | SSH URL | `git@github.com:org/repo.git` | | Đường dẫn cục bộ | `/Users/me/projects/my-module` | diff --git a/docs/zh-cn/how-to/install-custom-modules.md b/docs/zh-cn/how-to/install-custom-modules.md index 6b35c5df0..00193a3ed 100644 --- a/docs/zh-cn/how-to/install-custom-modules.md +++ b/docs/zh-cn/how-to/install-custom-modules.md @@ -68,6 +68,7 @@ Would you like to install from a custom source (Git URL or local path)? | 输入类型 | 示例 | | -------- | ---- | | HTTPS URL(任意主机) | `https://github.com/org/repo` | +| HTTP URL(任意主机) | `http://host/org/repo` | | 带子目录的 HTTPS URL | `https://github.com/org/repo/tree/main/my-module` | | SSH URL | `git@github.com:org/repo.git` | | 本地路径 | `/Users/me/projects/my-module` | diff --git a/tools/installer/modules/custom-module-manager.js b/tools/installer/modules/custom-module-manager.js index f6a26ba37..9814fe107 100644 --- a/tools/installer/modules/custom-module-manager.js +++ b/tools/installer/modules/custom-module-manager.js @@ -24,8 +24,9 @@ class CustomModuleManager { /** * Parse a user-provided source input into a structured descriptor. - * Accepts local file paths, HTTPS Git URLs, and SSH Git URLs. - * For HTTPS URLs with deep paths (e.g., /tree/main/subdir), extracts the subdir. + * Accepts local file paths, HTTPS Git URLs, HTTP Git URLs, and SSH Git URLs. + * For HTTPS/HTTP URLs with deep paths (e.g., /tree/main/subdir), extracts the subdir. + * The original protocol (http or https) is preserved in the returned cloneUrl. * * @param {string} input - URL or local file path * @returns {Object} Parsed source descriptor: @@ -127,11 +128,11 @@ class CustomModuleManager { }; } - // HTTPS URL: https://host/owner/repo[/tree/branch/subdir][.git] - const httpsMatch = trimmed.match(/^https?:\/\/([^/]+)\/([^/]+)\/([^/.]+?)(?:\.git)?(\/.*)?$/); + // HTTPS/HTTP URL: https://host/owner/repo[/tree/branch/subdir][.git] + const httpsMatch = trimmed.match(/^(https?):\/\/([^/]+)\/([^/]+)\/([^/.]+?)(?:\.git)?(\/.*)?$/); if (httpsMatch) { - const [, host, owner, repo, remainder] = httpsMatch; - const cloneUrl = `https://${host}/${owner}/${repo}`; + const [, protocol, host, owner, repo, remainder] = httpsMatch; + const cloneUrl = `${protocol}://${host}/${owner}/${repo}`; let subdir = null; let urlRef = null; // branch/tag extracted from /tree//subdir