Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9823b580bb | |||
| 2c34cca1a8 | |||
| 0d05df8591 | |||
| ae91c8f23d |
@@ -1,5 +1,20 @@
|
||||
# Changelog
|
||||
|
||||
## 2026-06-06 - 2.19.8
|
||||
|
||||
### Fixes
|
||||
|
||||
- stream `gitzone tools update` package rows while fetching versions
|
||||
- Prints each installed package row as soon as its latest version lookup completes.
|
||||
|
||||
## 2026-06-05 - 2.19.7
|
||||
|
||||
### Fixes
|
||||
|
||||
- make global tool self-updates verify and use pnpm's update path
|
||||
- Uses `pnpm update -g <package> --latest` before falling back to install for latest-version updates.
|
||||
- Verifies installed package versions through `pnpm list -g` so pnpm v11 hash roots are handled correctly.
|
||||
|
||||
## 2026-06-05 - 2.19.6
|
||||
|
||||
### Fixes
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@git.zone/cli",
|
||||
"private": false,
|
||||
"version": "2.19.6",
|
||||
"version": "2.19.8",
|
||||
"description": "A comprehensive CLI tool for enhancing and managing local development workflows with gitzone utilities, focusing on project setup, version control, code formatting, and template management.",
|
||||
"main": "dist_ts/index.js",
|
||||
"typings": "dist_ts/index.d.ts",
|
||||
|
||||
@@ -3,6 +3,6 @@
|
||||
*/
|
||||
export const commitinfo = {
|
||||
name: '@git.zone/cli',
|
||||
version: '2.19.6',
|
||||
version: '2.19.8',
|
||||
description: 'A comprehensive CLI tool for enhancing and managing local development workflows with gitzone utilities, focusing on project setup, version control, code formatting, and template management.'
|
||||
}
|
||||
|
||||
@@ -425,14 +425,48 @@ export class PackageManagerUtil {
|
||||
return false;
|
||||
}
|
||||
|
||||
const packageSpecifier = `${packageName}@${version}`;
|
||||
console.log(` Installing ${packageSpecifier} via pnpm...`);
|
||||
let effectiveVersion = version;
|
||||
if (version === "latest") {
|
||||
const latestVersion = await this.getLatestMatureVersion(packageName);
|
||||
console.log(` Updating ${packageName} via pnpm...`);
|
||||
try {
|
||||
const updateResult = await this.shell.exec(
|
||||
`${pnpmCommand} update -g ${shellQuote(packageName)} --latest`,
|
||||
);
|
||||
const installedVersion = await this.getCurrentInstalledPackageVersion(
|
||||
packageName,
|
||||
);
|
||||
if (
|
||||
updateResult.exitCode === 0 &&
|
||||
installedVersion &&
|
||||
(!latestVersion || installedVersion === latestVersion)
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
} catch {
|
||||
// Missing globals need an add instead of update.
|
||||
}
|
||||
|
||||
effectiveVersion = latestVersion || version;
|
||||
}
|
||||
|
||||
const packageSpecifier = `${packageName}@${effectiveVersion}`;
|
||||
console.log(` Installing ${packageSpecifier} via pnpm...`);
|
||||
try {
|
||||
const result = await this.shell.exec(
|
||||
`${pnpmCommand} add -g ${shellQuote(packageSpecifier)}`,
|
||||
);
|
||||
return result.exitCode === 0;
|
||||
if (result.exitCode !== 0) {
|
||||
return false;
|
||||
}
|
||||
if (effectiveVersion === "latest") {
|
||||
return true;
|
||||
}
|
||||
|
||||
const installedVersion = await this.getCurrentInstalledPackageVersion(
|
||||
packageName,
|
||||
);
|
||||
return installedVersion === effectiveVersion;
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
@@ -636,6 +670,15 @@ export class PackageManagerUtil {
|
||||
return Array.from(packageMap.values());
|
||||
}
|
||||
|
||||
private async getCurrentInstalledPackageVersion(
|
||||
packageName: string,
|
||||
): Promise<string | null> {
|
||||
const installedPackage = (await this.getCurrentInstalledPackages()).find(
|
||||
(packageInfo) => packageInfo.name === packageName,
|
||||
);
|
||||
return installedPackage?.version || null;
|
||||
}
|
||||
|
||||
private async inspectGlobalRoot(
|
||||
globalDir: string,
|
||||
current: boolean,
|
||||
|
||||
+20
-10
@@ -86,14 +86,17 @@ async function runUpdate(argvArg: any, mode: ICliMode): Promise<void> {
|
||||
}
|
||||
|
||||
const installedPackages = await pmUtil.getInstalledPackages();
|
||||
const packageInfos = await getPackageUpdateInfos(pmUtil, installedPackages);
|
||||
const managedInstalledPackages = installedPackages.filter((packageInfo) =>
|
||||
GITZONE_PACKAGES.includes(packageInfo.name),
|
||||
);
|
||||
let packageInfos: IPackageUpdateInfo[] = [];
|
||||
const legacyRoots = await pmUtil.getLegacyGlobalRoots();
|
||||
const legacyCleanupRoots = legacyRoots.filter(
|
||||
(legacyRoot) => legacyRoot.safeToDelete,
|
||||
);
|
||||
const legacyCleanupNeeded = legacyCleanupRoots.length > 0;
|
||||
|
||||
if (packageInfos.length === 0) {
|
||||
if (managedInstalledPackages.length === 0) {
|
||||
console.log("No managed @git.zone packages found installed globally.");
|
||||
} else {
|
||||
console.log("Installed @git.zone packages:\n");
|
||||
@@ -103,11 +106,11 @@ async function runUpdate(argvArg: any, mode: ICliMode): Promise<void> {
|
||||
console.log(
|
||||
" ------------------------------------------------------------",
|
||||
);
|
||||
for (const packageInfo of packageInfos) {
|
||||
console.log(
|
||||
` ${packageInfo.name.padEnd(28)}${packageInfo.currentVersion.padEnd(12)}${packageInfo.latestVersion.padEnd(12)}${getPackageStatus(packageInfo)}`,
|
||||
);
|
||||
}
|
||||
packageInfos = await getPackageUpdateInfos(
|
||||
pmUtil,
|
||||
managedInstalledPackages,
|
||||
true,
|
||||
);
|
||||
console.log("");
|
||||
|
||||
await printMissingPackages(pmUtil, installedPackages);
|
||||
@@ -328,7 +331,7 @@ async function handleSelfUpdate(
|
||||
return false;
|
||||
}
|
||||
|
||||
const success = await pmUtil.installLatest("@git.zone/cli", latestVersion);
|
||||
const success = await pmUtil.installLatest("@git.zone/cli");
|
||||
if (!success) {
|
||||
console.log(
|
||||
"\ngitzone self-update failed. Continuing with the current version.\n",
|
||||
@@ -347,6 +350,7 @@ async function handleSelfUpdate(
|
||||
async function getPackageUpdateInfos(
|
||||
pmUtil: PackageManagerUtil,
|
||||
installedPackages: IInstalledPackage[],
|
||||
logRows = false,
|
||||
): Promise<IPackageUpdateInfo[]> {
|
||||
const packageInfos: IPackageUpdateInfo[] = [];
|
||||
for (const installedPackage of installedPackages) {
|
||||
@@ -356,7 +360,7 @@ async function getPackageUpdateInfos(
|
||||
const latestVersion = await pmUtil.getLatestMatureVersion(
|
||||
installedPackage.name,
|
||||
);
|
||||
packageInfos.push({
|
||||
const packageInfo: IPackageUpdateInfo = {
|
||||
name: installedPackage.name,
|
||||
currentVersion: installedPackage.version,
|
||||
latestVersion: latestVersion || "unknown",
|
||||
@@ -365,7 +369,13 @@ async function getPackageUpdateInfos(
|
||||
: false,
|
||||
needsMigration: installedPackage.legacy === true,
|
||||
globalDir: installedPackage.globalDir,
|
||||
});
|
||||
};
|
||||
packageInfos.push(packageInfo);
|
||||
if (logRows) {
|
||||
console.log(
|
||||
` ${packageInfo.name.padEnd(28)}${packageInfo.currentVersion.padEnd(12)}${packageInfo.latestVersion.padEnd(12)}${getPackageStatus(packageInfo)}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
return packageInfos;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user