Constant for repo url

This commit is contained in:
2026-09-08 17:41:27 +00:00
parent 6c29a7a0cc
commit 973fd9fa93
3 changed files with 32 additions and 19 deletions
+10 -6
View File
@@ -3,7 +3,9 @@ import { existsSync } from "node:fs";
import { dirname, resolve } from "node:path";
import { fileURLToPath } from "node:url";
const UPDATE_REMOTE = "origin";
export const UPDATE_REMOTE_URL =
"https://git.harvmaster.com/Harvmaster/xo-cli.git";
const UPDATE_REF_NAMESPACE = "xo-updater";
const COMMAND_TIMEOUT_MS = 10_000;
export interface CommandResult {
@@ -99,8 +101,8 @@ export class GitUpdateService {
const fetchResult = await this.git([
"fetch",
"--quiet",
UPDATE_REMOTE,
`+refs/heads/${branch}:refs/remotes/${UPDATE_REMOTE}/${branch}`,
UPDATE_REMOTE_URL,
`+refs/heads/${branch}:refs/remotes/${UPDATE_REF_NAMESPACE}/${branch}`,
]);
if (fetchResult.code !== 0) {
return {
@@ -111,13 +113,13 @@ export class GitUpdateService {
const [headResult, targetResult, dirtyResult] = await Promise.all([
this.git(["rev-parse", "HEAD"]),
this.git(["rev-parse", `refs/remotes/${UPDATE_REMOTE}/${branch}`]),
this.git(["rev-parse", `refs/remotes/${UPDATE_REF_NAMESPACE}/${branch}`]),
this.git(["status", "--porcelain"]),
]);
if (headResult.code !== 0 || targetResult.code !== 0) {
return {
status: "unavailable",
reason: `The branch ${branch} is not available on ${UPDATE_REMOTE}.`,
reason: `The branch ${branch} is not available at the update repository.`,
};
}
@@ -145,7 +147,7 @@ export class GitUpdateService {
}
return {
status: "unavailable",
reason: `Local branch ${branch} has diverged from ${UPDATE_REMOTE}/${branch}; update it manually.`,
reason: `Local branch ${branch} has diverged from the update repository; update it manually.`,
};
}
@@ -191,6 +193,8 @@ export class GitUpdateService {
request.currentCommit,
"--to",
request.targetCommit,
"--target-ref",
`refs/remotes/${UPDATE_REF_NAMESPACE}/${request.branch}`,
"--parent",
String(process.pid),
];
+15 -7
View File
@@ -9,6 +9,7 @@ interface HelperOptions {
branch: string;
from: string;
to: string;
targetRef: string;
parent: number;
restart: boolean;
}
@@ -34,14 +35,25 @@ function parseOptions(args: string[]): HelperOptions {
const branch = values.get("--branch");
const from = values.get("--from");
const to = values.get("--to");
const targetRef = values.get("--target-ref");
const parent = Number(values.get("--parent"));
if (!repo || !branch || !from || !to || !Number.isInteger(parent)) {
if (
!repo ||
!branch ||
!from ||
!to ||
!targetRef ||
!Number.isInteger(parent)
) {
throw new Error("Missing updater helper arguments.");
}
if (!/^[0-9a-f]{40,64}$/u.test(from) || !/^[0-9a-f]{40,64}$/u.test(to)) {
throw new Error("Invalid updater commit identifiers.");
}
return { repo, branch, from, to, parent, restart };
if (targetRef !== `refs/remotes/xo-updater/${branch}`) {
throw new Error("Invalid updater target reference.");
}
return { repo, branch, from, to, targetRef, parent, restart };
}
function run(command: string, args: string[], cwd: string): Promise<void> {
@@ -129,11 +141,7 @@ async function main(): Promise<void> {
const [branch, head, target, status] = await Promise.all([
capture("git", ["branch", "--show-current"], options.repo),
capture("git", ["rev-parse", "HEAD"], options.repo),
capture(
"git",
["rev-parse", `refs/remotes/origin/${options.branch}`],
options.repo,
),
capture("git", ["rev-parse", options.targetRef], options.repo),
capture("git", ["status", "--porcelain"], options.repo),
]);
if (
+7 -6
View File
@@ -3,6 +3,7 @@ import { describe, expect, test } from "vitest";
import {
GitUpdateService,
UPDATE_REMOTE_URL,
type CommandResult,
type CommandRunner,
} from "../../src/updater/git-update-service.js";
@@ -24,11 +25,11 @@ describe("GitUpdateService", () => {
new Map([
["git branch --show-current", result("feature/demo\n")],
[
"git fetch --quiet origin +refs/heads/feature/demo:refs/remotes/origin/feature/demo",
`git fetch --quiet ${UPDATE_REMOTE_URL} +refs/heads/feature/demo:refs/remotes/xo-updater/feature/demo`,
result(),
],
["git rev-parse HEAD", result("aaa\n")],
["git rev-parse refs/remotes/origin/feature/demo", result("bbb\n")],
["git rev-parse refs/remotes/xo-updater/feature/demo", result("bbb\n")],
["git status --porcelain", result()],
["git merge-base --is-ancestor aaa bbb", result()],
["git log -1 --format=%s bbb", result("Useful update\n")],
@@ -52,11 +53,11 @@ describe("GitUpdateService", () => {
new Map([
["git branch --show-current", result("main\n")],
[
"git fetch --quiet origin +refs/heads/main:refs/remotes/origin/main",
`git fetch --quiet ${UPDATE_REMOTE_URL} +refs/heads/main:refs/remotes/xo-updater/main`,
result(),
],
["git rev-parse HEAD", result("aaa\n")],
["git rev-parse refs/remotes/origin/main", result("bbb\n")],
["git rev-parse refs/remotes/xo-updater/main", result("bbb\n")],
["git status --porcelain", result(" M src/example.ts\n")],
["git merge-base --is-ancestor aaa bbb", result()],
["git log -1 --format=%s bbb", result("Update\n")],
@@ -74,11 +75,11 @@ describe("GitUpdateService", () => {
new Map([
["git branch --show-current", result("main\n")],
[
"git fetch --quiet origin +refs/heads/main:refs/remotes/origin/main",
`git fetch --quiet ${UPDATE_REMOTE_URL} +refs/heads/main:refs/remotes/xo-updater/main`,
result(),
],
["git rev-parse HEAD", result("bbb\n")],
["git rev-parse refs/remotes/origin/main", result("aaa\n")],
["git rev-parse refs/remotes/xo-updater/main", result("aaa\n")],
["git status --porcelain", result()],
["git merge-base --is-ancestor bbb aaa", result("", 1)],
["git merge-base --is-ancestor aaa bbb", result()],