@spences10/pi-git-ui 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/git.d.ts CHANGED
@@ -1,31 +1,7 @@
1
- export type FileState = 'staged' | 'changed' | 'mixed' | 'untracked' | 'conflicted';
2
- export interface GitFile {
3
- path: string;
4
- index_status: string;
5
- worktree_status: string;
6
- state: FileState;
7
- }
8
- export interface GitStatus {
9
- branch: string;
10
- upstream?: string;
11
- ahead: number;
12
- behind: number;
13
- files: GitFile[];
14
- }
15
- export interface DiffView {
16
- path: string;
17
- lines: string[];
18
- }
19
- export declare const EMPTY_STATUS: GitStatus;
20
- export declare function read_status(cwd: string): Promise<GitStatus>;
21
- export declare function parse_porcelain_z(raw: string): GitFile[];
22
- export declare function stage_file(cwd: string, file: GitFile): Promise<void>;
23
- export declare function unstage_file(cwd: string, file: GitFile): Promise<void>;
24
- export declare function toggle_file(cwd: string, file: GitFile): Promise<void>;
25
- export declare function stage_all(cwd: string): Promise<void>;
26
- export declare function unstage_all(cwd: string): Promise<void>;
27
- export declare function commit(cwd: string, message: string): Promise<void>;
28
- export declare function read_diff(cwd: string, file: GitFile): Promise<DiffView>;
29
- export declare function format_git_error(error: unknown): string;
30
- export declare function has_staged_changes(files: GitFile[]): boolean;
31
- export declare function staged_file_count(files: GitFile[]): number;
1
+ export { build_line_patch, changed_line_indexes, parse_diff_hunks, read_diff, stage_hunk, stage_line, unstage_hunk, unstage_line, } from './git/diff.js';
2
+ export { format_git_error } from './git/errors.js';
3
+ export { commit, discard_file, git_path, stage_all, stage_file, toggle_file, unstage_all, unstage_file, } from './git/operations.js';
4
+ export { read_repo_overview } from './git/overview.js';
5
+ export { has_staged_changes, parse_porcelain_z, read_status, staged_file_count, } from './git/status.js';
6
+ export { EMPTY_STATUS } from './git/types.js';
7
+ export type { DiffHunk, DiffSection, DiffView, FileState, GitFile, GitStatus, RepoOverview, } from './git/types.js';
package/dist/git.js CHANGED
@@ -1,163 +1,7 @@
1
- import { execFile } from 'node:child_process';
2
- import { promisify } from 'node:util';
3
- const exec_file = promisify(execFile);
4
- export const EMPTY_STATUS = {
5
- branch: 'unknown',
6
- ahead: 0,
7
- behind: 0,
8
- files: [],
9
- };
10
- async function git(args, cwd) {
11
- const { stdout } = await exec_file('git', args, {
12
- cwd,
13
- encoding: 'utf8',
14
- maxBuffer: 1024 * 1024 * 8,
15
- });
16
- return stdout;
17
- }
18
- export async function read_status(cwd) {
19
- const [branch, upstream, raw] = await Promise.all([
20
- git(['branch', '--show-current'], cwd).catch(() => 'detached'),
21
- git([
22
- 'rev-parse',
23
- '--abbrev-ref',
24
- '--symbolic-full-name',
25
- '@{upstream}',
26
- ], cwd).catch(() => ''),
27
- git(['status', '--porcelain=v1', '-z'], cwd),
28
- ]);
29
- const counts = upstream.trim()
30
- ? await read_ahead_behind(cwd)
31
- : { ahead: 0, behind: 0 };
32
- return {
33
- branch: branch.trim() || 'detached',
34
- upstream: upstream.trim() || undefined,
35
- ...counts,
36
- files: parse_porcelain_z(raw),
37
- };
38
- }
39
- async function read_ahead_behind(cwd) {
40
- const raw = await git(['rev-list', '--left-right', '--count', '@{upstream}...HEAD'], cwd).catch(() => '');
41
- const [behind = '0', ahead = '0'] = raw.trim().split(/\s+/);
42
- return { ahead: Number(ahead) || 0, behind: Number(behind) || 0 };
43
- }
44
- export function parse_porcelain_z(raw) {
45
- if (!raw)
46
- return [];
47
- const entries = raw.split('\0').filter(Boolean);
48
- const files = [];
49
- for (let i = 0; i < entries.length; i++) {
50
- const entry = entries[i];
51
- const index_status = entry[0] ?? ' ';
52
- const worktree_status = entry[1] ?? ' ';
53
- let path = entry.slice(3);
54
- if (index_status === 'R' || index_status === 'C') {
55
- const original = entries[++i];
56
- if (original)
57
- path = `${original} → ${path}`;
58
- }
59
- files.push({
60
- path,
61
- index_status,
62
- worktree_status,
63
- state: get_file_state(index_status, worktree_status),
64
- });
65
- }
66
- return files.sort((a, b) => state_rank(a.state) - state_rank(b.state) ||
67
- a.path.localeCompare(b.path));
68
- }
69
- function get_file_state(index_status, worktree_status) {
70
- if (index_status === '?' && worktree_status === '?')
71
- return 'untracked';
72
- if (index_status === 'U' ||
73
- worktree_status === 'U' ||
74
- (index_status === 'A' && worktree_status === 'A') ||
75
- (index_status === 'D' && worktree_status === 'D')) {
76
- return 'conflicted';
77
- }
78
- const has_index = index_status !== ' ';
79
- const has_worktree = worktree_status !== ' ';
80
- if (has_index && has_worktree)
81
- return 'mixed';
82
- if (has_index)
83
- return 'staged';
84
- return 'changed';
85
- }
86
- function state_rank(state) {
87
- return [
88
- 'conflicted',
89
- 'changed',
90
- 'untracked',
91
- 'mixed',
92
- 'staged',
93
- ].indexOf(state);
94
- }
95
- function git_path(file) {
96
- const arrow = ' → ';
97
- return file.path.includes(arrow)
98
- ? file.path.split(arrow).at(-1)
99
- : file.path;
100
- }
101
- export async function stage_file(cwd, file) {
102
- await git(['add', '--', git_path(file)], cwd);
103
- }
104
- export async function unstage_file(cwd, file) {
105
- await git(['restore', '--staged', '--', git_path(file)], cwd);
106
- }
107
- export async function toggle_file(cwd, file) {
108
- if (file.state === 'mixed') {
109
- throw new Error('Partial file: space is disabled. Use s to stage worktree changes or x to unstage staged changes.');
110
- }
111
- if (file.state === 'conflicted') {
112
- throw new Error('Conflicted file: resolve conflicts, then stage explicitly with s.');
113
- }
114
- if (file.state === 'staged')
115
- await unstage_file(cwd, file);
116
- else
117
- await stage_file(cwd, file);
118
- }
119
- export async function stage_all(cwd) {
120
- await git(['add', '--all'], cwd);
121
- }
122
- export async function unstage_all(cwd) {
123
- await git(['restore', '--staged', '--', ':/'], cwd);
124
- }
125
- export async function commit(cwd, message) {
126
- await git(['commit', '-m', message], cwd);
127
- }
128
- export async function read_diff(cwd, file) {
129
- const path = git_path(file);
130
- if (file.state === 'untracked') {
131
- return {
132
- path: file.path,
133
- lines: [
134
- 'Untracked file',
135
- '',
136
- 'Press space or s to stage it.',
137
- 'No diff is available until Git starts tracking the path.',
138
- ],
139
- };
140
- }
141
- const sections = [];
142
- const staged = await git(['diff', '--cached', '--', path], cwd).catch((error) => format_git_error(error));
143
- const unstaged = await git(['diff', '--', path], cwd).catch((error) => format_git_error(error));
144
- if (staged.trim())
145
- sections.push('STAGED', '', ...staged.split('\n'));
146
- if (staged.trim() && unstaged.trim())
147
- sections.push('', '');
148
- if (unstaged.trim())
149
- sections.push('UNSTAGED', '', ...unstaged.split('\n'));
150
- if (sections.length === 0)
151
- sections.push('No textual diff for this file.');
152
- return { path: file.path, lines: sections };
153
- }
154
- export function format_git_error(error) {
155
- return error instanceof Error ? error.message : String(error);
156
- }
157
- export function has_staged_changes(files) {
158
- return files.some((file) => file.index_status !== ' ' && file.index_status !== '?');
159
- }
160
- export function staged_file_count(files) {
161
- return files.filter((file) => file.index_status !== ' ' && file.index_status !== '?').length;
162
- }
1
+ export { build_line_patch, changed_line_indexes, parse_diff_hunks, read_diff, stage_hunk, stage_line, unstage_hunk, unstage_line, } from './git/diff.js';
2
+ export { format_git_error } from './git/errors.js';
3
+ export { commit, discard_file, git_path, stage_all, stage_file, toggle_file, unstage_all, unstage_file, } from './git/operations.js';
4
+ export { read_repo_overview } from './git/overview.js';
5
+ export { has_staged_changes, parse_porcelain_z, read_status, staged_file_count, } from './git/status.js';
6
+ export { EMPTY_STATUS } from './git/types.js';
163
7
  //# sourceMappingURL=git.js.map
package/dist/git.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,UAAU,EACV,YAAY,EACZ,YAAY,GACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EACN,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,UAAU,EACV,WAAW,EACX,WAAW,EACX,YAAY,GACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EACN,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,EACX,iBAAiB,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -8,7 +8,7 @@ async function show_git_ui(ctx) {
8
8
  await show_modal(ctx, {
9
9
  title: 'Source Control',
10
10
  subtitle: 'Review diffs, safely stage files, and commit staged changes',
11
- footer: '↑↓/jk move • ←→/hl scroll diff space safe toggle s stage • x unstage • c commit • a safe stage all • A force stage all • u unstage all • r refresh • esc/q close',
11
+ footer: '↑↓/jk move • enter actions? help • q close',
12
12
  overlay_options: {
13
13
  width: '92%',
14
14
  minWidth: 80,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,KAAK,UAAU,WAAW,CACzB,GAA4B;IAE5B,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACvD,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,mCAAmC,EAAE,SAAS,CAAC,CAAC;QAC9D,OAAO;IACR,CAAC;IAED,MAAM,UAAU,CACf,GAAG,EACH;QACC,KAAK,EAAE,gBAAgB;QACvB,QAAQ,EACP,6DAA6D;QAC9D,MAAM,EACL,sKAAsK;QACvK,eAAe,EAAE;YAChB,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,KAAK;SAChB;QACD,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE;KACpD,EACD,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;QACjC,MAAM,IAAI,GAAG,IAAI,YAAY,CAC5B,GAAG,CAAC,GAAG,EACP,KAAK,EACL,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,EAAE,EACzB,IAAI,CACJ,CAAC;QACF,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACb,CAAC,CACD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EAAgB;IACxD,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE;QAC5B,WAAW,EAAE,oCAAoC;QACjD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YAC7B,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;KACD,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,KAAK,UAAU,WAAW,CACzB,GAA4B;IAE5B,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACvD,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,mCAAmC,EAAE,SAAS,CAAC,CAAC;QAC9D,OAAO;IACR,CAAC;IAED,MAAM,UAAU,CACf,GAAG,EACH;QACC,KAAK,EAAE,gBAAgB;QACvB,QAAQ,EACP,6DAA6D;QAC9D,MAAM,EAAE,+CAA+C;QACvD,eAAe,EAAE;YAChB,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,KAAK;SAChB;QACD,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE;KACpD,EACD,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;QACjC,MAAM,IAAI,GAAG,IAAI,YAAY,CAC5B,GAAG,CAAC,GAAG,EACP,KAAK,EACL,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,EAAE,EACzB,IAAI,CACJ,CAAC;QACF,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACb,CAAC,CACD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EAAgB;IACxD,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE;QAC5B,WAAW,EAAE,oCAAoC;QACjD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YAC7B,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;KACD,CAAC,CAAC;AACJ,CAAC"}
@@ -1,4 +1,4 @@
1
- import { type Focusable } from '@earendil-works/pi-tui';
1
+ import type { Focusable } from '@earendil-works/pi-tui';
2
2
  import type { ModalBody, ModalTheme } from '@spences10/pi-tui-modal';
3
3
  export declare class GitStageBody implements ModalBody, Focusable {
4
4
  private readonly cwd;
@@ -7,12 +7,21 @@ export declare class GitStageBody implements ModalBody, Focusable {
7
7
  private readonly done;
8
8
  private selected;
9
9
  private diff_scroll;
10
+ private selected_hunk;
11
+ private selected_line_index;
10
12
  private status;
11
13
  private diff?;
12
14
  private diff_for_path;
13
15
  private busy;
14
16
  private message;
17
+ private filter_text;
18
+ private capturing_filter;
19
+ private actions?;
20
+ private selected_action;
21
+ private repo_overview?;
22
+ private show_help;
15
23
  private composer?;
24
+ private diff_request_id;
16
25
  private _focused;
17
26
  constructor(cwd: string, theme: ModalTheme, request_render: () => void, done: () => void);
18
27
  get focused(): boolean;
@@ -21,21 +30,33 @@ export declare class GitStageBody implements ModalBody, Focusable {
21
30
  render(width: number): string[];
22
31
  handleInput(data: string): void;
23
32
  invalidate(): void;
24
- private restore_selection;
25
- private render_header;
26
- private render_message;
27
- private render_workbench;
28
- private render_file_list;
29
- private render_diff;
30
- private format_diff_line;
33
+ private visible_files;
31
34
  private selected_file;
35
+ private restore_selection;
32
36
  private move_selection;
33
37
  private scroll_diff;
38
+ private start_filter;
39
+ private handle_filter_input;
40
+ private move_hunk;
41
+ private move_line;
42
+ private stageable_line_indexes;
43
+ private selected_line_hunk;
34
44
  private load_diff;
35
45
  private toggle_selected;
36
46
  private stage_selected;
37
- private stage_all_safely;
38
47
  private unstage_selected;
48
+ private selected_diff_hunk;
49
+ private stage_selected_hunk;
50
+ private unstage_selected_hunk;
51
+ private stage_selected_line;
52
+ private unstage_selected_line;
53
+ private stage_all_safely;
54
+ private open_action_menu;
55
+ private handle_action_input;
56
+ private show_conflict_help;
57
+ private open_repo_overview;
58
+ private open_discard_confirmation;
59
+ private discard_file;
39
60
  private open_commit_composer;
40
61
  private commit_staged;
41
62
  private run;