mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-03-30 13:43:26 +08:00
fix(ck): preserve display names and harden git helpers
This commit is contained in:
@@ -79,7 +79,7 @@ if (isInit) {
|
|||||||
|
|
||||||
// Update projects.json
|
// Update projects.json
|
||||||
projects[projectPath] = {
|
projects[projectPath] = {
|
||||||
name: contextDir,
|
name,
|
||||||
contextDir,
|
contextDir,
|
||||||
lastUpdated: today(),
|
lastUpdated: today(),
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync } from 'fs';
|
import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync } from 'fs';
|
||||||
import { resolve, basename } from 'path';
|
import { resolve, basename } from 'path';
|
||||||
import { homedir } from 'os';
|
import { homedir } from 'os';
|
||||||
import { execSync } from 'child_process';
|
import { spawnSync } from 'child_process';
|
||||||
import { randomBytes } from 'crypto';
|
import { randomBytes } from 'crypto';
|
||||||
|
|
||||||
// ─── Paths ────────────────────────────────────────────────────────────────────
|
// ─── Paths ────────────────────────────────────────────────────────────────────
|
||||||
@@ -144,11 +144,13 @@ export function shortId() {
|
|||||||
|
|
||||||
function runGit(args, cwd) {
|
function runGit(args, cwd) {
|
||||||
try {
|
try {
|
||||||
return execSync(`git -C "${cwd}" ${args}`, {
|
const result = spawnSync('git', ['-C', cwd, ...args], {
|
||||||
timeout: 3000,
|
timeout: 3000,
|
||||||
stdio: 'pipe',
|
stdio: 'pipe',
|
||||||
encoding: 'utf8',
|
encoding: 'utf8',
|
||||||
}).trim();
|
});
|
||||||
|
if (result.status !== 0) return null;
|
||||||
|
return result.stdout.trim();
|
||||||
} catch {
|
} catch {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -156,7 +158,7 @@ function runGit(args, cwd) {
|
|||||||
|
|
||||||
export function gitLogSince(projectPath, sinceDate) {
|
export function gitLogSince(projectPath, sinceDate) {
|
||||||
if (!sinceDate) return null;
|
if (!sinceDate) return null;
|
||||||
return runGit(`log --oneline --since="${sinceDate}"`, projectPath);
|
return runGit(['log', '--oneline', `--since=${sinceDate}`], projectPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function gitSummary(projectPath, sinceDate) {
|
export function gitSummary(projectPath, sinceDate) {
|
||||||
@@ -166,9 +168,9 @@ export function gitSummary(projectPath, sinceDate) {
|
|||||||
if (commits === 0) return null;
|
if (commits === 0) return null;
|
||||||
|
|
||||||
// Count unique files changed: use a separate runGit call to avoid nested shell substitution
|
// Count unique files changed: use a separate runGit call to avoid nested shell substitution
|
||||||
const countStr = runGit(`rev-list --count HEAD --since="${sinceDate}"`, projectPath);
|
const countStr = runGit(['rev-list', '--count', 'HEAD', `--since=${sinceDate}`], projectPath);
|
||||||
const revCount = countStr ? parseInt(countStr, 10) : commits;
|
const revCount = countStr ? parseInt(countStr, 10) : commits;
|
||||||
const diff = runGit(`diff --shortstat HEAD~${Math.min(revCount, 50)}..HEAD`, projectPath);
|
const diff = runGit(['diff', '--shortstat', `HEAD~${Math.min(revCount, 50)}..HEAD`], projectPath);
|
||||||
|
|
||||||
if (diff) {
|
if (diff) {
|
||||||
const filesMatch = diff.match(/(\d+) file/);
|
const filesMatch = diff.match(/(\d+) file/);
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
import { readFileSync, writeFileSync, existsSync } from 'fs';
|
import { readFileSync, writeFileSync, existsSync } from 'fs';
|
||||||
import { resolve } from 'path';
|
import { resolve } from 'path';
|
||||||
import { homedir } from 'os';
|
import { homedir } from 'os';
|
||||||
import { execSync } from 'child_process';
|
import { spawnSync } from 'child_process';
|
||||||
|
|
||||||
const CK_HOME = resolve(homedir(), '.claude', 'ck');
|
const CK_HOME = resolve(homedir(), '.claude', 'ck');
|
||||||
const PROJECTS_FILE = resolve(CK_HOME, 'projects.json');
|
const PROJECTS_FILE = resolve(CK_HOME, 'projects.json');
|
||||||
@@ -47,10 +47,14 @@ function stalenessIcon(dateStr) {
|
|||||||
function gitLogSince(projectPath, sinceDate) {
|
function gitLogSince(projectPath, sinceDate) {
|
||||||
if (!sinceDate || !existsSync(resolve(projectPath, '.git'))) return null;
|
if (!sinceDate || !existsSync(resolve(projectPath, '.git'))) return null;
|
||||||
try {
|
try {
|
||||||
const result = execSync(`git -C "${projectPath}" log --oneline --since="${sinceDate}"`, {
|
const result = spawnSync(
|
||||||
timeout: 3000, stdio: 'pipe', encoding: 'utf8',
|
'git',
|
||||||
}).trim();
|
['-C', projectPath, 'log', '--oneline', `--since=${sinceDate}`],
|
||||||
const commits = result.split('\n').filter(Boolean).length;
|
{ timeout: 3000, stdio: 'pipe', encoding: 'utf8' },
|
||||||
|
);
|
||||||
|
if (result.status !== 0) return null;
|
||||||
|
const output = result.stdout.trim();
|
||||||
|
const commits = output.split('\n').filter(Boolean).length;
|
||||||
return commits > 0 ? `${commits} commit${commits !== 1 ? 's' : ''} since last session` : null;
|
return commits > 0 ? `${commits} commit${commits !== 1 ? 's' : ''} since last session` : null;
|
||||||
} catch { return null; }
|
} catch { return null; }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user