@gitkraken/core-gitlens 0.7.2 → 0.9.0

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.
Files changed (192) hide show
  1. package/CHANGELOG.md +72 -1
  2. package/dist/git/cache.d.ts +29 -5
  3. package/dist/git/cache.js +52 -11
  4. package/dist/git/cache.js.map +1 -1
  5. package/dist/git/context.d.ts +6 -1
  6. package/dist/git/context.js.map +1 -1
  7. package/dist/git/errors.d.ts +28 -1
  8. package/dist/git/errors.js +45 -1
  9. package/dist/git/errors.js.map +1 -1
  10. package/dist/git/features.d.ts +1 -1
  11. package/dist/git/features.js +1 -0
  12. package/dist/git/features.js.map +1 -1
  13. package/dist/git/models/reflog.d.ts +6 -0
  14. package/dist/git/models/reflog.js.map +1 -1
  15. package/dist/git/models/revision.d.ts +0 -1
  16. package/dist/git/models/revision.js +1 -2
  17. package/dist/git/models/revision.js.map +1 -1
  18. package/dist/git/providers/branches.d.ts +5 -1
  19. package/dist/git/providers/commits.d.ts +44 -2
  20. package/dist/git/providers/config.d.ts +7 -1
  21. package/dist/git/providers/operations.d.ts +19 -0
  22. package/dist/git/providers/provider.d.ts +29 -2
  23. package/dist/git/providers/refs.d.ts +48 -3
  24. package/dist/git/providers/revision.d.ts +7 -1
  25. package/dist/git/providers/staging.d.ts +13 -0
  26. package/dist/git/providers/stash.d.ts +3 -2
  27. package/dist/git/providers/status.d.ts +4 -0
  28. package/dist/git/providers/worktrees.d.ts +23 -3
  29. package/dist/git/run.types.d.ts +22 -0
  30. package/dist/git-cli/cliGitProvider.d.ts +39 -2
  31. package/dist/git-cli/cliGitProvider.js +109 -11
  32. package/dist/git-cli/cliGitProvider.js.map +1 -1
  33. package/dist/git-cli/exec/commandClassifier.d.ts +31 -0
  34. package/dist/git-cli/exec/commandClassifier.js +391 -0
  35. package/dist/git-cli/exec/commandClassifier.js.map +1 -0
  36. package/dist/git-cli/exec/git.d.ts +36 -5
  37. package/dist/git-cli/exec/git.js +163 -28
  38. package/dist/git-cli/exec/git.js.map +1 -1
  39. package/dist/git-cli/exec/gitQueue.d.ts +4 -1
  40. package/dist/git-cli/exec/gitQueue.js +1 -1
  41. package/dist/git-cli/exec/gitQueue.js.map +1 -1
  42. package/dist/git-cli/parsers/reflogParser.d.ts +7 -0
  43. package/dist/git-cli/parsers/reflogParser.js +11 -1
  44. package/dist/git-cli/parsers/reflogParser.js.map +1 -1
  45. package/dist/git-cli/providers/branches.d.ts +10 -1
  46. package/dist/git-cli/providers/branches.js +31 -22
  47. package/dist/git-cli/providers/branches.js.map +1 -1
  48. package/dist/git-cli/providers/commits.d.ts +27 -3
  49. package/dist/git-cli/providers/commits.js +112 -12
  50. package/dist/git-cli/providers/commits.js.map +1 -1
  51. package/dist/git-cli/providers/config.js +2 -1
  52. package/dist/git-cli/providers/config.js.map +1 -1
  53. package/dist/git-cli/providers/diff.js +4 -4
  54. package/dist/git-cli/providers/diff.js.map +1 -1
  55. package/dist/git-cli/providers/operations.d.ts +13 -0
  56. package/dist/git-cli/providers/operations.js +64 -5
  57. package/dist/git-cli/providers/operations.js.map +1 -1
  58. package/dist/git-cli/providers/patch.js +21 -45
  59. package/dist/git-cli/providers/patch.js.map +1 -1
  60. package/dist/git-cli/providers/refs.d.ts +20 -3
  61. package/dist/git-cli/providers/refs.js +140 -10
  62. package/dist/git-cli/providers/refs.js.map +1 -1
  63. package/dist/git-cli/providers/remotes.js +3 -2
  64. package/dist/git-cli/providers/remotes.js.map +1 -1
  65. package/dist/git-cli/providers/revision.d.ts +5 -1
  66. package/dist/git-cli/providers/revision.js +20 -5
  67. package/dist/git-cli/providers/revision.js.map +1 -1
  68. package/dist/git-cli/providers/staging.d.ts +9 -0
  69. package/dist/git-cli/providers/staging.js +63 -6
  70. package/dist/git-cli/providers/staging.js.map +1 -1
  71. package/dist/git-cli/providers/stash.d.ts +3 -2
  72. package/dist/git-cli/providers/stash.js +34 -22
  73. package/dist/git-cli/providers/stash.js.map +1 -1
  74. package/dist/git-cli/providers/status.d.ts +2 -0
  75. package/dist/git-cli/providers/status.js +27 -9
  76. package/dist/git-cli/providers/status.js.map +1 -1
  77. package/dist/git-cli/providers/worktrees.d.ts +31 -2
  78. package/dist/git-cli/providers/worktrees.js +75 -7
  79. package/dist/git-cli/providers/worktrees.js.map +1 -1
  80. package/dist/plus/git-github/api/github.d.ts +64 -3
  81. package/dist/plus/git-github/api/github.js +237 -24
  82. package/dist/plus/git-github/api/github.js.map +1 -1
  83. package/dist/plus/git-github/providers/github/branches.d.ts +3 -1
  84. package/dist/plus/git-github/providers/github/branches.js +2 -1
  85. package/dist/plus/git-github/providers/github/branches.js.map +1 -1
  86. package/dist/plus/git-github/providers/github/commits.d.ts +4 -2
  87. package/dist/plus/git-github/providers/github/commits.js +3 -1
  88. package/dist/plus/git-github/providers/github/commits.js.map +1 -1
  89. package/dist/plus/git-github/providers/github/refs.d.ts +10 -3
  90. package/dist/plus/git-github/providers/github/refs.js +4 -4
  91. package/dist/plus/git-github/providers/github/refs.js.map +1 -1
  92. package/dist/plus/git-github/providers/github/revision.d.ts +4 -1
  93. package/dist/plus/git-github/providers/github/revision.js +6 -1
  94. package/dist/plus/git-github/providers/github/revision.js.map +1 -1
  95. package/dist/plus/integrations/index.d.ts +5 -2
  96. package/dist/plus/integrations/index.js.map +1 -1
  97. package/dist/plus/integrations/integrationService.d.ts +35 -9
  98. package/dist/plus/integrations/integrationService.js +16 -3
  99. package/dist/plus/integrations/integrationService.js.map +1 -1
  100. package/dist/plus/integrations/manager.d.ts +107 -37
  101. package/dist/plus/integrations/models/gitHostIntegration.d.ts +128 -13
  102. package/dist/plus/integrations/models/gitHostIntegration.js +130 -17
  103. package/dist/plus/integrations/models/gitHostIntegration.js.map +1 -1
  104. package/dist/plus/integrations/models/integration.d.ts +51 -3
  105. package/dist/plus/integrations/models/integration.js +125 -18
  106. package/dist/plus/integrations/models/integration.js.map +1 -1
  107. package/dist/plus/integrations/models/issuesIntegration.d.ts +18 -5
  108. package/dist/plus/integrations/models/issuesIntegration.js +40 -10
  109. package/dist/plus/integrations/models/issuesIntegration.js.map +1 -1
  110. package/dist/plus/integrations/providers/azure/azure.d.ts +1 -1
  111. package/dist/plus/integrations/providers/azure/azure.js +13 -17
  112. package/dist/plus/integrations/providers/azure/azure.js.map +1 -1
  113. package/dist/plus/integrations/providers/azure/models.d.ts +29 -0
  114. package/dist/plus/integrations/providers/azure/models.js +112 -1
  115. package/dist/plus/integrations/providers/azure/models.js.map +1 -1
  116. package/dist/plus/integrations/providers/azureDevOps.d.ts +54 -2
  117. package/dist/plus/integrations/providers/azureDevOps.js +80 -2
  118. package/dist/plus/integrations/providers/azureDevOps.js.map +1 -1
  119. package/dist/plus/integrations/providers/azureDevOpsServer.js +2 -1
  120. package/dist/plus/integrations/providers/azureDevOpsServer.js.map +1 -1
  121. package/dist/plus/integrations/providers/bitbucket/bitbucket.d.ts +61 -0
  122. package/dist/plus/integrations/providers/bitbucket/bitbucket.js +165 -23
  123. package/dist/plus/integrations/providers/bitbucket/bitbucket.js.map +1 -1
  124. package/dist/plus/integrations/providers/bitbucket/models.d.ts +6 -1
  125. package/dist/plus/integrations/providers/bitbucket/models.js +4 -3
  126. package/dist/plus/integrations/providers/bitbucket/models.js.map +1 -1
  127. package/dist/plus/integrations/providers/bitbucket-server/pullRequestSearch.js +1 -1
  128. package/dist/plus/integrations/providers/bitbucket-server/pullRequestSearch.js.map +1 -1
  129. package/dist/plus/integrations/providers/bitbucket-server.d.ts +38 -1
  130. package/dist/plus/integrations/providers/bitbucket-server.js +33 -1
  131. package/dist/plus/integrations/providers/bitbucket-server.js.map +1 -1
  132. package/dist/plus/integrations/providers/bitbucket.d.ts +36 -1
  133. package/dist/plus/integrations/providers/bitbucket.js +29 -1
  134. package/dist/plus/integrations/providers/bitbucket.js.map +1 -1
  135. package/dist/plus/integrations/providers/github.d.ts +48 -4
  136. package/dist/plus/integrations/providers/github.js +101 -6
  137. package/dist/plus/integrations/providers/github.js.map +1 -1
  138. package/dist/plus/integrations/providers/gitlab/gitlab.d.ts +35 -0
  139. package/dist/plus/integrations/providers/gitlab/gitlab.js +132 -15
  140. package/dist/plus/integrations/providers/gitlab/gitlab.js.map +1 -1
  141. package/dist/plus/integrations/providers/gitlab/models.d.ts +1 -0
  142. package/dist/plus/integrations/providers/gitlab/models.js +1 -1
  143. package/dist/plus/integrations/providers/gitlab/models.js.map +1 -1
  144. package/dist/plus/integrations/providers/gitlab.d.ts +48 -1
  145. package/dist/plus/integrations/providers/gitlab.js +79 -3
  146. package/dist/plus/integrations/providers/gitlab.js.map +1 -1
  147. package/dist/plus/integrations/providers/jira-server.d.ts +3 -3
  148. package/dist/plus/integrations/providers/jira-server.js +3 -3
  149. package/dist/plus/integrations/providers/jira-server.js.map +1 -1
  150. package/dist/plus/integrations/providers/models.d.ts +12 -1
  151. package/dist/plus/integrations/providers/models.js +11 -1
  152. package/dist/plus/integrations/providers/models.js.map +1 -1
  153. package/dist/plus/integrations/providers/providerErrors.d.ts +9 -1
  154. package/dist/plus/integrations/providers/providerErrors.js +10 -1
  155. package/dist/plus/integrations/providers/providerErrors.js.map +1 -1
  156. package/dist/plus/integrations/providers/providersApi.d.ts +59 -0
  157. package/dist/plus/integrations/providers/providersApi.js +136 -1
  158. package/dist/plus/integrations/providers/providersApi.js.map +1 -1
  159. package/dist/plus/integrations/providers/utils/providerPaging.d.ts +42 -0
  160. package/dist/plus/integrations/providers/utils/providerPaging.js +58 -1
  161. package/dist/plus/integrations/providers/utils/providerPaging.js.map +1 -1
  162. package/dist/plus/integrations/providers/utils.d.ts +1 -1
  163. package/dist/plus/integrations/reads/currentAccount.d.ts +35 -0
  164. package/dist/plus/integrations/reads/currentAccount.js +46 -0
  165. package/dist/plus/integrations/reads/currentAccount.js.map +1 -0
  166. package/dist/plus/integrations/reads/drains.d.ts +4 -1
  167. package/dist/plus/integrations/reads/drains.js +7 -3
  168. package/dist/plus/integrations/reads/drains.js.map +1 -1
  169. package/dist/plus/integrations/reads/issueBatch.d.ts +72 -12
  170. package/dist/plus/integrations/reads/issueBatch.js +193 -48
  171. package/dist/plus/integrations/reads/issueBatch.js.map +1 -1
  172. package/dist/plus/integrations/reads/pullRequestBatch.d.ts +57 -0
  173. package/dist/plus/integrations/reads/pullRequestBatch.js +80 -0
  174. package/dist/plus/integrations/reads/pullRequestBatch.js.map +1 -0
  175. package/dist/plus/integrations/reads/pullRequestBranches.d.ts +58 -0
  176. package/dist/plus/integrations/reads/pullRequestBranches.js +111 -0
  177. package/dist/plus/integrations/reads/pullRequestBranches.js.map +1 -0
  178. package/dist/plus/integrations/reads/pullRequests.js +3 -3
  179. package/dist/plus/integrations/reads/pullRequests.js.map +1 -1
  180. package/dist/plus/integrations/reads/sweeps.js +3 -3
  181. package/dist/plus/integrations/reads/sweeps.js.map +1 -1
  182. package/dist/plus/integrations/results.d.ts +5 -2
  183. package/dist/plus/integrations/results.js.map +1 -1
  184. package/dist/utils/env/node/exec.js +1 -1
  185. package/dist/utils/env/node/exec.js.map +1 -1
  186. package/docs/integrations.md +90 -36
  187. package/docs/kepler-git-write-api-parity.md +365 -0
  188. package/docs/kepler-read-api-parity.md +75 -28
  189. package/package.json +1 -1
  190. package/dist/plus/integrations/reads/trackerIssue.d.ts +0 -33
  191. package/dist/plus/integrations/reads/trackerIssue.js +0 -60
  192. package/dist/plus/integrations/reads/trackerIssue.js.map +0 -1
@@ -8,8 +8,9 @@ import { fileUri, joinUriPath, toFsPath } from "../../utils/uri.js";
8
8
  import { isFolderGlob, normalizePath, splitPath, stripFolderGlob } from "../../utils/path.js";
9
9
  import { isRevisionRange, isSha, isUncommitted, isUncommittedStaged } from "../../git/utils/revision.utils.js";
10
10
  import __decorate from "../../_virtual/@oxc-project+runtime/helpers/esm/decorate.js";
11
+ import { SigningError } from "../../git/errors.js";
11
12
  import { createDisposable } from "../../utils/disposable.js";
12
- import { GitErrors, gitConfigsLog, gitConfigsLogWithFiles } from "../exec/git.js";
13
+ import { GitErrors, classifySigningError, gitConfigsLog, gitConfigsLogWithFiles } from "../exec/git.js";
13
14
  import { GitFileChange } from "../../git/models/fileChange.js";
14
15
  import { createUncommittedChangesCommit } from "../../git/utils/commit.utils.js";
15
16
  import { GitCommit, GitCommitIdentity } from "../../git/models/commit.js";
@@ -29,6 +30,53 @@ const emptyPromise = Promise.resolve(void 0);
29
30
  const reflogCommands = ["merge", "pull"];
30
31
  /** Keeps `filterUnpublishedShas` well inside Windows' ~32K command-line cap (40 hex chars + separator each). */
31
32
  const maxShasPerRevListSpawn = 500;
33
+ const refExclusionNamespaces = [
34
+ [
35
+ "branches",
36
+ "refs/heads/",
37
+ "--branches"
38
+ ],
39
+ [
40
+ "remotes",
41
+ "refs/remotes/",
42
+ "--remotes"
43
+ ],
44
+ [
45
+ "tags",
46
+ "refs/tags/",
47
+ "--tags"
48
+ ]
49
+ ];
50
+ /**
51
+ * Each `except` entry is emitted in its short form right before its own namespace's pseudo-ref: git matches
52
+ * `--exclude` against the short name and applies it only to the next pseudo-ref, so `--exclude=refs/heads/x
53
+ * --branches` excludes nothing.
54
+ */
55
+ function getRefExclusionArgs(excluding) {
56
+ if (excluding == null) return [];
57
+ const args = [];
58
+ for (const [key, prefix, flag] of refExclusionNamespaces) {
59
+ if (!excluding[key]) continue;
60
+ for (const ref of excluding.except ?? []) if (ref.startsWith(prefix)) args.push(`--exclude=${ref.slice(prefix.length)}`);
61
+ args.push(flag);
62
+ }
63
+ if (excluding.refs?.length) args.push(...excluding.refs);
64
+ return args.length ? ["--not", ...args] : [];
65
+ }
66
+ function getRefExclusionsKey(excluding) {
67
+ const { branches, remotes, tags, refs, except } = excluding;
68
+ return JSON.stringify([
69
+ branches,
70
+ remotes,
71
+ tags,
72
+ refs,
73
+ except
74
+ ]);
75
+ }
76
+ function getCommitCountKey(rev, excluding) {
77
+ if (excluding == null) return rev;
78
+ return `${rev}\0${getRefExclusionsKey(excluding)}`;
79
+ }
32
80
  var CommitsGitSubProvider = class {
33
81
  context;
34
82
  git;
@@ -40,12 +88,60 @@ var CommitsGitSubProvider = class {
40
88
  this.cache = cache;
41
89
  this.provider = provider;
42
90
  }
43
- async createUnreachableCommitFromTree(repoPath, tree, parent, message, cancellation) {
44
- return (await this.git.run({
45
- cwd: repoPath,
46
- cancellation,
47
- errors: "throw"
48
- }, "commit-tree", tree, "-p", parent, "-m", message)).stdout.trim();
91
+ /**
92
+ * Creates a commit object from a tree via `commit-tree`, with explicit (zero or more) parents and an
93
+ * optional explicit author/committer — e.g. for merge commits assembled from multiple parents, or a
94
+ * commit authored on behalf of someone else. Writes the commit object only; it updates no ref, so the
95
+ * result is unreachable until a caller points a branch/ref at it. Fires no ref-change hooks — an
96
+ * unreachable object changes no ref, so there's nothing for a cache or watcher to invalidate yet.
97
+ */
98
+ async createCommitFromTree(repoPath, tree, options, cancellation) {
99
+ const args = ["commit-tree", tree];
100
+ for (const parent of options.parents) args.push("-p", parent);
101
+ let format = "gpg";
102
+ if (options.sign) {
103
+ format = (await this.provider.config.getSigningConfig?.(repoPath))?.format ?? "gpg";
104
+ args.push("-S");
105
+ }
106
+ args.push("-F", "-");
107
+ const env = {};
108
+ if (options.author) {
109
+ env.GIT_AUTHOR_NAME = options.author.name;
110
+ env.GIT_AUTHOR_EMAIL = options.author.email;
111
+ if (options.author.date != null) env.GIT_AUTHOR_DATE = typeof options.author.date === "string" ? options.author.date : options.author.date.toISOString();
112
+ }
113
+ if (options.committer) {
114
+ env.GIT_COMMITTER_NAME = options.committer.name;
115
+ env.GIT_COMMITTER_EMAIL = options.committer.email;
116
+ if (options.committer.date != null) env.GIT_COMMITTER_DATE = typeof options.committer.date === "string" ? options.committer.date : options.committer.date.toISOString();
117
+ }
118
+ try {
119
+ const sha = (await this.git.run({
120
+ cwd: repoPath,
121
+ cancellation,
122
+ errors: "throw",
123
+ env,
124
+ stdin: !options.message || options.message.endsWith("\n") ? options.message : `${options.message}\n`,
125
+ stdinEncoding: "utf8"
126
+ }, ...args)).stdout.trim();
127
+ if (options.sign) this.context.hooks?.commits?.onSigned?.(format, options.source);
128
+ return sha;
129
+ } catch (ex) {
130
+ if (options.sign) {
131
+ const reason = classifySigningError(ex);
132
+ if (reason != null) {
133
+ this.context.hooks?.commits?.onSigningFailed?.(reason, format, options.source);
134
+ throw new SigningError({
135
+ reason,
136
+ gitCommand: {
137
+ repoPath,
138
+ args: ["commit-tree"]
139
+ }
140
+ }, ex);
141
+ }
142
+ }
143
+ throw ex;
144
+ }
49
145
  }
50
146
  async getCommit(repoPath, rev, cancellation) {
51
147
  if (isUncommitted(rev, true)) return createUncommittedChangesCommit(repoPath, rev, /* @__PURE__ */ new Date(), await this.provider.config.getCurrentUser(repoPath));
@@ -53,13 +149,14 @@ var CommitsGitSubProvider = class {
53
149
  if (log == null) return void 0;
54
150
  return log.commits.get(rev) ?? first(log.commits.values());
55
151
  }
56
- getCommitCount(repoPath, rev, cancellation) {
57
- return this.cache.commitCount.getOrCreate(repoPath, rev, async (cacheable, signal) => {
152
+ getCommitCount(repoPath, rev, options, cancellation) {
153
+ const excludeArgs = getRefExclusionArgs(options?.excluding);
154
+ return this.cache.commitCount.getOrCreate(repoPath, getCommitCountKey(rev, options?.excluding), async (cacheable, signal) => {
58
155
  const result = await this.git.run({
59
156
  cwd: repoPath,
60
157
  cancellation: signal ?? cancellation,
61
158
  errors: "ignore"
62
- }, "rev-list", "--count", rev, "--");
159
+ }, "rev-list", "--count", rev, ...excludeArgs, "--");
63
160
  if (result.completion.status === "cancelled" || signal?.aborted) throw new CancellationError();
64
161
  if (result.completion.status !== "exited" || result.exitCode !== 0) {
65
162
  cacheable.invalidate();
@@ -676,7 +773,10 @@ var CommitsGitSubProvider = class {
676
773
  const similarityThreshold = options.similarityThreshold;
677
774
  args.push(`-M${similarityThreshold == null ? "" : `${similarityThreshold}%`}`);
678
775
  }
776
+ const excludeArgs = getRefExclusionArgs(options.excluding);
679
777
  if (rev && !isUncommittedStaged(rev)) args.push(rev);
778
+ else if (excludeArgs.length) args.push("HEAD");
779
+ args.push(...excludeArgs);
680
780
  args.push("--");
681
781
  if (pathspec) args.push(pathspec);
682
782
  const result = await this.git.run({
@@ -692,7 +792,7 @@ var CommitsGitSubProvider = class {
692
792
  return [];
693
793
  }
694
794
  };
695
- if (!options.pathOrUri && !options.authors?.length && !options.reverse && !options.all) return this.cache.logShas.getOrCreate(repoPath, `${rev ?? ""}:${options.ordering ?? ""}:${options.limit}:${options.merges}:${options.since ?? ""}`, () => getCore());
795
+ if (!options.pathOrUri && !options.authors?.length && !options.reverse && !options.all) return this.cache.logShas.getOrCreate(repoPath, `${rev ?? ""}:${options.ordering ?? ""}:${options.limit}:${options.merges}:${options.since ?? ""}${options.excluding == null ? "" : `:${getRefExclusionsKey(options.excluding)}`}`, () => getCore());
696
796
  return getCore();
697
797
  }
698
798
  async getOldestUnpushedShaForPath(repoPath, pathOrUri, cancellation) {
@@ -916,7 +1016,7 @@ var CommitsGitSubProvider = class {
916
1016
  return result;
917
1017
  }
918
1018
  };
919
- __decorate([debug()], CommitsGitSubProvider.prototype, "createUnreachableCommitFromTree", null);
1019
+ __decorate([debug()], CommitsGitSubProvider.prototype, "createCommitFromTree", null);
920
1020
  __decorate([debug()], CommitsGitSubProvider.prototype, "getCommit", null);
921
1021
  __decorate([debug({ exit: true })], CommitsGitSubProvider.prototype, "getCommitCount", null);
922
1022
  __decorate([debug({ exit: true })], CommitsGitSubProvider.prototype, "hasUnpublishedCommits", null);