@oh-gc/cli 0.4.4 → 0.4.5

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/README.md CHANGED
@@ -96,6 +96,9 @@ oh-gc repo:set-remote upstream
96
96
  | `oh-gc pr:list --author alice` | Filter by author |
97
97
  | `oh-gc pr:list --reviewer bob` | Filter by reviewer |
98
98
  | `oh-gc pr:view <number>` | Show PR detail |
99
+ | `oh-gc pr:diff <number>` | View changes in a PR |
100
+ | `oh-gc pr:diff <number> --name-only` | Show only changed file names |
101
+ | `oh-gc pr:diff <number> --json` | Output raw JSON |
99
102
  | `oh-gc pr:create` | Create PR interactively |
100
103
  | `oh-gc pr:create --title "..." --base main` | Create PR with flags |
101
104
  | `oh-gc pr:create --repo owner/repo --head feature` | Create cross-repo PR |
package/dist/api/prs.d.ts CHANGED
@@ -76,3 +76,28 @@ export declare function commentPR(token: string, owner: string, repo: string, nu
76
76
  path?: string;
77
77
  position?: number;
78
78
  }): Promise<PRComment>;
79
+ export interface PRFile {
80
+ sha: string;
81
+ filename: string;
82
+ status: string;
83
+ additions: number;
84
+ deletions: number;
85
+ changes?: number;
86
+ blob_url: string;
87
+ raw_url: string;
88
+ patch?: {
89
+ diff: string;
90
+ old_path: string;
91
+ new_path: string;
92
+ a_mode: string;
93
+ b_mode: string;
94
+ new_file: boolean;
95
+ renamed_file: boolean;
96
+ deleted_file: boolean;
97
+ too_large: boolean;
98
+ added_lines: number;
99
+ removed_lines: number;
100
+ };
101
+ too_large?: boolean;
102
+ }
103
+ export declare function getPRFiles(token: string, owner: string, repo: string, number: number): Promise<PRFile[]>;
package/dist/api/prs.js CHANGED
@@ -5,6 +5,7 @@ exports.getPR = getPR;
5
5
  exports.createPR = createPR;
6
6
  exports.mergePR = mergePR;
7
7
  exports.commentPR = commentPR;
8
+ exports.getPRFiles = getPRFiles;
8
9
  const client_1 = require("./client");
9
10
  async function listPRs(token, owner, repo, params = {}) {
10
11
  return (0, client_1.apiRequest)(`/repos/${owner}/${repo}/pulls`, token, {
@@ -31,4 +32,7 @@ async function commentPR(token, owner, repo, number, body, options) {
31
32
  requestBody.position = options.position;
32
33
  return (0, client_1.apiRequest)(`/repos/${owner}/${repo}/pulls/${number}/comments`, token, { method: 'POST', body: requestBody });
33
34
  }
35
+ async function getPRFiles(token, owner, repo, number) {
36
+ return (0, client_1.apiRequest)(`/repos/${owner}/${repo}/pulls/${number}/files`, token);
37
+ }
34
38
  //# sourceMappingURL=prs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prs.js","sourceRoot":"","sources":["../../src/api/prs.ts"],"names":[],"mappings":";;AAuCA,0BASC;AAED,sBAOC;AAWD,4BAUC;AAED,0BAYC;AAUD,8BAiBC;AAvHD,qCAAqC;AAuC9B,KAAK,UAAU,OAAO,CAC3B,KAAa,EACb,KAAa,EACb,IAAY,EACZ,SAAwB,EAAE;IAE1B,OAAO,IAAA,mBAAU,EAAO,UAAU,KAAK,IAAI,IAAI,QAAQ,EAAE,KAAK,EAAE;QAC9D,KAAK,EAAE,MAAqD;KAC7D,CAAC,CAAA;AACJ,CAAC;AAEM,KAAK,UAAU,KAAK,CACzB,KAAa,EACb,KAAa,EACb,IAAY,EACZ,MAAc;IAEd,OAAO,IAAA,mBAAU,EAAK,UAAU,KAAK,IAAI,IAAI,UAAU,MAAM,EAAE,EAAE,KAAK,CAAC,CAAA;AACzE,CAAC;AAWM,KAAK,UAAU,QAAQ,CAC5B,KAAa,EACb,KAAa,EACb,IAAY,EACZ,MAAsB;IAEtB,OAAO,IAAA,mBAAU,EAAK,UAAU,KAAK,IAAI,IAAI,QAAQ,EAAE,KAAK,EAAE;QAC5D,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,MAAM;KACb,CAAC,CAAA;AACJ,CAAC;AAEM,KAAK,UAAU,OAAO,CAC3B,KAAa,EACb,KAAa,EACb,IAAY,EACZ,MAAc,EACd,SAA0E,EAAE;IAE5E,OAAO,IAAA,mBAAU,EACf,UAAU,KAAK,IAAI,IAAI,UAAU,MAAM,QAAQ,EAC/C,KAAK,EACL,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAChC,CAAA;AACH,CAAC;AAUM,KAAK,UAAU,SAAS,CAC7B,KAAa,EACb,KAAa,EACb,IAAY,EACZ,MAAc,EACd,IAAY,EACZ,OAA8C;IAE9C,MAAM,WAAW,GAAgD,EAAE,IAAI,EAAE,CAAA;IACzE,IAAI,OAAO,EAAE,IAAI;QAAE,WAAW,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;IAClD,IAAI,OAAO,EAAE,QAAQ,KAAK,SAAS;QAAE,WAAW,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;IAE5E,OAAO,IAAA,mBAAU,EACf,UAAU,KAAK,IAAI,IAAI,UAAU,MAAM,WAAW,EAClD,KAAK,EACL,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CACtC,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"prs.js","sourceRoot":"","sources":["../../src/api/prs.ts"],"names":[],"mappings":";;AAuCA,0BASC;AAED,sBAOC;AAWD,4BAUC;AAED,0BAYC;AAUD,8BAiBC;AA2BD,gCAOC;AAzJD,qCAAqC;AAuC9B,KAAK,UAAU,OAAO,CAC3B,KAAa,EACb,KAAa,EACb,IAAY,EACZ,SAAwB,EAAE;IAE1B,OAAO,IAAA,mBAAU,EAAO,UAAU,KAAK,IAAI,IAAI,QAAQ,EAAE,KAAK,EAAE;QAC9D,KAAK,EAAE,MAAqD;KAC7D,CAAC,CAAA;AACJ,CAAC;AAEM,KAAK,UAAU,KAAK,CACzB,KAAa,EACb,KAAa,EACb,IAAY,EACZ,MAAc;IAEd,OAAO,IAAA,mBAAU,EAAK,UAAU,KAAK,IAAI,IAAI,UAAU,MAAM,EAAE,EAAE,KAAK,CAAC,CAAA;AACzE,CAAC;AAWM,KAAK,UAAU,QAAQ,CAC5B,KAAa,EACb,KAAa,EACb,IAAY,EACZ,MAAsB;IAEtB,OAAO,IAAA,mBAAU,EAAK,UAAU,KAAK,IAAI,IAAI,QAAQ,EAAE,KAAK,EAAE;QAC5D,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,MAAM;KACb,CAAC,CAAA;AACJ,CAAC;AAEM,KAAK,UAAU,OAAO,CAC3B,KAAa,EACb,KAAa,EACb,IAAY,EACZ,MAAc,EACd,SAA0E,EAAE;IAE5E,OAAO,IAAA,mBAAU,EACf,UAAU,KAAK,IAAI,IAAI,UAAU,MAAM,QAAQ,EAC/C,KAAK,EACL,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAChC,CAAA;AACH,CAAC;AAUM,KAAK,UAAU,SAAS,CAC7B,KAAa,EACb,KAAa,EACb,IAAY,EACZ,MAAc,EACd,IAAY,EACZ,OAA8C;IAE9C,MAAM,WAAW,GAAgD,EAAE,IAAI,EAAE,CAAA;IACzE,IAAI,OAAO,EAAE,IAAI;QAAE,WAAW,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;IAClD,IAAI,OAAO,EAAE,QAAQ,KAAK,SAAS;QAAE,WAAW,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;IAE5E,OAAO,IAAA,mBAAU,EACf,UAAU,KAAK,IAAI,IAAI,UAAU,MAAM,WAAW,EAClD,KAAK,EACL,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CACtC,CAAA;AACH,CAAC;AA2BM,KAAK,UAAU,UAAU,CAC9B,KAAa,EACb,KAAa,EACb,IAAY,EACZ,MAAc;IAEd,OAAO,IAAA,mBAAU,EAAW,UAAU,KAAK,IAAI,IAAI,UAAU,MAAM,QAAQ,EAAE,KAAK,CAAC,CAAA;AACrF,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { BaseCommand } from '../../base-command';
2
+ export default class PRDiff extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ number: import("@oclif/core/lib/interfaces").Arg<number, {
7
+ max?: number | undefined;
8
+ min?: number | undefined;
9
+ }>;
10
+ };
11
+ static flags: {
12
+ 'name-only': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
13
+ color: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
14
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
15
+ };
16
+ run(): Promise<void>;
17
+ private getStatusIcon;
18
+ private getStatusText;
19
+ }
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_command_1 = require("../../base-command");
5
+ const index_1 = require("../../config/index");
6
+ const index_2 = require("../../git/index");
7
+ const prs_1 = require("../../api/prs");
8
+ const client_1 = require("../../api/client");
9
+ const index_3 = require("../../ui/index");
10
+ class PRDiff extends base_command_1.BaseCommand {
11
+ async run() {
12
+ const { args, flags } = await this.parse(PRDiff);
13
+ const token = (0, index_1.getToken)();
14
+ if (!token)
15
+ this.error('Not logged in. Run: gc auth login');
16
+ let owner, repo;
17
+ try {
18
+ ;
19
+ ({ owner, repo } = (0, index_2.resolveRepo)());
20
+ }
21
+ catch (err) {
22
+ this.error(err.message);
23
+ }
24
+ try {
25
+ const files = await (0, prs_1.getPRFiles)(token, owner, repo, args.number);
26
+ if (flags.json) {
27
+ (0, index_3.printJson)(files);
28
+ return;
29
+ }
30
+ if (flags['name-only']) {
31
+ for (const file of files) {
32
+ const statusIcon = this.getStatusIcon(file.status);
33
+ this.log(`${statusIcon} ${file.filename}`);
34
+ }
35
+ return;
36
+ }
37
+ // Output full diff
38
+ for (const file of files) {
39
+ this.log(`diff --git a/${file.filename} b/${file.filename}`);
40
+ const statusText = this.getStatusText(file.status);
41
+ this.log(`status: ${statusText} | +${file.additions} -${file.deletions}`);
42
+ this.log('---');
43
+ // The diff content is in file.patch.diff
44
+ if (file.patch?.diff) {
45
+ this.log(file.patch.diff);
46
+ }
47
+ else if (file.too_large) {
48
+ this.log('(File too large to display)');
49
+ }
50
+ this.log('');
51
+ }
52
+ }
53
+ catch (err) {
54
+ if (err instanceof client_1.GitCodeError)
55
+ this.error(err.message);
56
+ this.error('Could not connect to GitCode. Check your internet connection.');
57
+ }
58
+ }
59
+ getStatusIcon(status) {
60
+ switch (status) {
61
+ case 'added':
62
+ return 'A';
63
+ case 'deleted':
64
+ return 'D';
65
+ case 'modified':
66
+ return 'M';
67
+ case 'renamed':
68
+ return 'R';
69
+ default:
70
+ return '?';
71
+ }
72
+ }
73
+ getStatusText(status) {
74
+ switch (status) {
75
+ case 'added':
76
+ return 'new file';
77
+ case 'deleted':
78
+ return 'deleted';
79
+ case 'modified':
80
+ return 'modified';
81
+ case 'renamed':
82
+ return 'renamed';
83
+ default:
84
+ return status;
85
+ }
86
+ }
87
+ }
88
+ PRDiff.description = 'View changes in a pull request';
89
+ PRDiff.examples = [
90
+ '<%= config.bin %> pr diff 5',
91
+ '<%= config.bin %> pr diff 5 --name-only',
92
+ '<%= config.bin %> pr diff 5 --color never',
93
+ ];
94
+ PRDiff.args = {
95
+ number: core_1.Args.integer({ description: 'PR number', required: true }),
96
+ };
97
+ PRDiff.flags = {
98
+ ...base_command_1.BaseCommand.baseFlags,
99
+ 'name-only': core_1.Flags.boolean({
100
+ description: 'Display only names of changed files',
101
+ default: false,
102
+ }),
103
+ color: core_1.Flags.string({
104
+ description: 'Use color in diff output: {always|never|auto}',
105
+ default: 'auto',
106
+ options: ['always', 'never', 'auto'],
107
+ }),
108
+ };
109
+ exports.default = PRDiff;
110
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/commands/pr/diff.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oh-gc/cli",
3
- "version": "0.4.4",
3
+ "version": "0.4.5",
4
4
  "description": "GitCode CLI — manage issues and PRs from the terminal",
5
5
  "license": "MIT",
6
6
  "author": "guozejun",