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.
This commit is contained in:
关惠民 2026-04-27 15:45:44 +08:00
parent 6ff74ba662
commit e597645d3b
4 changed files with 10 additions and 6 deletions

View File

@ -68,6 +68,7 @@ Select **Yes**, then provide a source:
| Input Type | Example | | Input Type | Example |
| --------------------- | ------------------------------------------------- | | --------------------- | ------------------------------------------------- |
| HTTPS URL (any host) | `https://github.com/org/repo` | | 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` | | HTTPS URL with subdir | `https://github.com/org/repo/tree/main/my-module` |
| SSH URL | `git@github.com:org/repo.git` | | SSH URL | `git@github.com:org/repo.git` |
| Local path | `/Users/me/projects/my-module` | | Local path | `/Users/me/projects/my-module` |

View File

@ -68,6 +68,7 @@ Chọn **Yes**, rồi nhập nguồn:
| Loại đầu vào | Ví dụ | | Loại đầu vào | Ví dụ |
| --------------------- | ------------------------------------------------- | | --------------------- | ------------------------------------------------- |
| HTTPS URL trên bất kỳ host nào | `https://github.com/org/repo` | | 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` | | 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` | | SSH URL | `git@github.com:org/repo.git` |
| Đường dẫn cục bộ | `/Users/me/projects/my-module` | | Đường dẫn cục bộ | `/Users/me/projects/my-module` |

View File

@ -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` | | HTTPS URL任意主机 | `https://github.com/org/repo` |
| HTTP URL任意主机 | `http://host/org/repo` |
| 带子目录的 HTTPS URL | `https://github.com/org/repo/tree/main/my-module` | | 带子目录的 HTTPS URL | `https://github.com/org/repo/tree/main/my-module` |
| SSH URL | `git@github.com:org/repo.git` | | SSH URL | `git@github.com:org/repo.git` |
| 本地路径 | `/Users/me/projects/my-module` | | 本地路径 | `/Users/me/projects/my-module` |

View File

@ -24,8 +24,9 @@ class CustomModuleManager {
/** /**
* Parse a user-provided source input into a structured descriptor. * Parse a user-provided source input into a structured descriptor.
* Accepts local file paths, HTTPS Git URLs, and SSH Git URLs. * Accepts local file paths, HTTPS Git URLs, HTTP Git URLs, and SSH Git URLs.
* For HTTPS URLs with deep paths (e.g., /tree/main/subdir), extracts the subdir. * 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 * @param {string} input - URL or local file path
* @returns {Object} Parsed source descriptor: * @returns {Object} Parsed source descriptor:
@ -127,11 +128,11 @@ class CustomModuleManager {
}; };
} }
// HTTPS URL: https://host/owner/repo[/tree/branch/subdir][.git] // HTTPS/HTTP URL: https://host/owner/repo[/tree/branch/subdir][.git]
const httpsMatch = trimmed.match(/^https?:\/\/([^/]+)\/([^/]+)\/([^/.]+?)(?:\.git)?(\/.*)?$/); const httpsMatch = trimmed.match(/^(https?):\/\/([^/]+)\/([^/]+)\/([^/.]+?)(?:\.git)?(\/.*)?$/);
if (httpsMatch) { if (httpsMatch) {
const [, host, owner, repo, remainder] = httpsMatch; const [, protocol, host, owner, repo, remainder] = httpsMatch;
const cloneUrl = `https://${host}/${owner}/${repo}`; const cloneUrl = `${protocol}://${host}/${owner}/${repo}`;
let subdir = null; let subdir = null;
let urlRef = null; // branch/tag extracted from /tree/<ref>/subdir let urlRef = null; // branch/tag extracted from /tree/<ref>/subdir