@procedures/git 0.2.3 → 0.3.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.
- package/CHANGELOG.md +51 -0
- package/README.md +77 -12
- package/dist/.tsbuildinfo +1 -1
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +312 -2
- package/dist/module.js.map +1 -1
- package/dist/procedures/git/blame.d.ts +17 -0
- package/dist/procedures/git/blame.d.ts.map +1 -0
- package/dist/procedures/git/blame.js +69 -0
- package/dist/procedures/git/blame.js.map +1 -0
- package/dist/procedures/git/branch/add.d.ts +12 -0
- package/dist/procedures/git/branch/add.d.ts.map +1 -0
- package/dist/procedures/git/branch/add.js +21 -0
- package/dist/procedures/git/branch/add.js.map +1 -0
- package/dist/procedures/git/branch/delete.d.ts +13 -0
- package/dist/procedures/git/branch/delete.d.ts.map +1 -0
- package/dist/procedures/git/branch/delete.js +24 -0
- package/dist/procedures/git/branch/delete.js.map +1 -0
- package/dist/procedures/git/branch/list.d.ts +13 -0
- package/dist/procedures/git/branch/list.d.ts.map +1 -0
- package/dist/procedures/git/branch/list.js +37 -0
- package/dist/procedures/git/branch/list.js.map +1 -0
- package/dist/procedures/git/branch.d.ts +8 -2
- package/dist/procedures/git/branch.d.ts.map +1 -1
- package/dist/procedures/git/branch.js +18 -37
- package/dist/procedures/git/branch.js.map +1 -1
- package/dist/procedures/git/commit.d.ts.map +1 -1
- package/dist/procedures/git/commit.js +9 -11
- package/dist/procedures/git/commit.js.map +1 -1
- package/dist/procedures/git/index.d.ts +19 -0
- package/dist/procedures/git/index.d.ts.map +1 -1
- package/dist/procedures/git/index.js +19 -0
- package/dist/procedures/git/index.js.map +1 -1
- package/dist/procedures/git/init.d.ts +6 -2
- package/dist/procedures/git/init.d.ts.map +1 -1
- package/dist/procedures/git/init.js +8 -4
- package/dist/procedures/git/init.js.map +1 -1
- package/dist/procedures/git/merge/abort.d.ts +14 -0
- package/dist/procedures/git/merge/abort.d.ts.map +1 -0
- package/dist/procedures/git/merge/abort.js +18 -0
- package/dist/procedures/git/merge/abort.js.map +1 -0
- package/dist/procedures/git/merge.d.ts +16 -0
- package/dist/procedures/git/merge.d.ts.map +1 -0
- package/dist/procedures/git/merge.js +41 -0
- package/dist/procedures/git/merge.js.map +1 -0
- package/dist/procedures/git/push.d.ts.map +1 -1
- package/dist/procedures/git/push.js +4 -2
- package/dist/procedures/git/push.js.map +1 -1
- package/dist/procedures/git/rebase/abort.d.ts +13 -0
- package/dist/procedures/git/rebase/abort.d.ts.map +1 -0
- package/dist/procedures/git/rebase/abort.js +17 -0
- package/dist/procedures/git/rebase/abort.js.map +1 -0
- package/dist/procedures/git/rebase/continue.d.ts +13 -0
- package/dist/procedures/git/rebase/continue.d.ts.map +1 -0
- package/dist/procedures/git/rebase/continue.js +23 -0
- package/dist/procedures/git/rebase/continue.js.map +1 -0
- package/dist/procedures/git/rebase.d.ts +22 -0
- package/dist/procedures/git/rebase.d.ts.map +1 -0
- package/dist/procedures/git/rebase.js +46 -0
- package/dist/procedures/git/rebase.js.map +1 -0
- package/dist/procedures/git/refs.d.ts +31 -0
- package/dist/procedures/git/refs.d.ts.map +1 -0
- package/dist/procedures/git/refs.js +52 -0
- package/dist/procedures/git/refs.js.map +1 -0
- package/dist/procedures/git/reset.d.ts +13 -0
- package/dist/procedures/git/reset.d.ts.map +1 -0
- package/dist/procedures/git/reset.js +31 -0
- package/dist/procedures/git/reset.js.map +1 -0
- package/dist/procedures/git/restore.d.ts +13 -0
- package/dist/procedures/git/restore.d.ts.map +1 -0
- package/dist/procedures/git/restore.js +26 -0
- package/dist/procedures/git/restore.js.map +1 -0
- package/dist/procedures/git/revParse.d.ts +13 -0
- package/dist/procedures/git/revParse.d.ts.map +1 -0
- package/dist/procedures/git/revParse.js +23 -0
- package/dist/procedures/git/revParse.js.map +1 -0
- package/dist/procedures/git/run.d.ts +2 -0
- package/dist/procedures/git/run.d.ts.map +1 -1
- package/dist/procedures/git/run.js +1 -0
- package/dist/procedures/git/run.js.map +1 -1
- package/dist/procedures/git/show.d.ts +15 -0
- package/dist/procedures/git/show.d.ts.map +1 -0
- package/dist/procedures/git/show.js +49 -0
- package/dist/procedures/git/show.js.map +1 -0
- package/dist/procedures/git/tag/add.d.ts +12 -0
- package/dist/procedures/git/tag/add.d.ts.map +1 -0
- package/dist/procedures/git/tag/add.js +25 -0
- package/dist/procedures/git/tag/add.js.map +1 -0
- package/dist/procedures/git/tag/delete.d.ts +12 -0
- package/dist/procedures/git/tag/delete.d.ts.map +1 -0
- package/dist/procedures/git/tag/delete.js +19 -0
- package/dist/procedures/git/tag/delete.js.map +1 -0
- package/dist/procedures/git/tag/list.d.ts +12 -0
- package/dist/procedures/git/tag/list.d.ts.map +1 -0
- package/dist/procedures/git/tag/list.js +34 -0
- package/dist/procedures/git/tag/list.js.map +1 -0
- package/dist/procedures/git/worktree/add.d.ts +13 -0
- package/dist/procedures/git/worktree/add.d.ts.map +1 -0
- package/dist/procedures/git/worktree/add.js +35 -0
- package/dist/procedures/git/worktree/add.js.map +1 -0
- package/dist/procedures/git/worktree/list.d.ts +17 -0
- package/dist/procedures/git/worktree/list.d.ts.map +1 -0
- package/dist/procedures/git/worktree/list.js +52 -0
- package/dist/procedures/git/worktree/list.js.map +1 -0
- package/dist/procedures/git/worktree/remove.d.ts +13 -0
- package/dist/procedures/git/worktree/remove.d.ts.map +1 -0
- package/dist/procedures/git/worktree/remove.js +20 -0
- package/dist/procedures/git/worktree/remove.js.map +1 -0
- package/dist/types.d.ts +308 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +265 -0
- package/dist/types.js.map +1 -1
- package/package.json +4 -4
- package/src/module.ts +411 -2
- package/src/procedures/git/blame.ts +68 -0
- package/src/procedures/git/branch/add.ts +24 -0
- package/src/procedures/git/branch/delete.ts +29 -0
- package/src/procedures/git/branch/list.ts +40 -0
- package/src/procedures/git/branch.ts +19 -40
- package/src/procedures/git/commit.ts +9 -11
- package/src/procedures/git/index.ts +19 -0
- package/src/procedures/git/init.ts +11 -10
- package/src/procedures/git/merge/abort.ts +20 -0
- package/src/procedures/git/merge.ts +42 -0
- package/src/procedures/git/push.ts +4 -2
- package/src/procedures/git/rebase/abort.ts +19 -0
- package/src/procedures/git/rebase/continue.ts +25 -0
- package/src/procedures/git/rebase.ts +48 -0
- package/src/procedures/git/refs.ts +55 -0
- package/src/procedures/git/reset.ts +34 -0
- package/src/procedures/git/restore.ts +27 -0
- package/src/procedures/git/revParse.ts +24 -0
- package/src/procedures/git/run.ts +3 -0
- package/src/procedures/git/show.ts +57 -0
- package/src/procedures/git/tag/add.ts +27 -0
- package/src/procedures/git/tag/delete.ts +22 -0
- package/src/procedures/git/tag/list.ts +36 -0
- package/src/procedures/git/worktree/add.ts +35 -0
- package/src/procedures/git/worktree/list.ts +48 -0
- package/src/procedures/git/worktree/remove.ts +21 -0
- package/src/types.ts +623 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* git.tag.list procedure
|
|
3
|
+
*
|
|
4
|
+
* List the tags (roadmap R40).
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { gitArg } from "../args.js";
|
|
8
|
+
import { git, type GitContext } from "../run.js";
|
|
9
|
+
import type { GitTagInfo, GitTagListInput, GitTagListOutput } from "../../../types.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* The fields of each tag, separated by NUL: the name, the type of the object, the commit of an
|
|
13
|
+
* annotated tag, the object, and the subject of the message.
|
|
14
|
+
*/
|
|
15
|
+
const FORMAT = "--format=%(refname:strip=2)%00%(objecttype)%00%(*objectname)%00%(objectname)%00%(contents:subject)";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* List the tags
|
|
19
|
+
*/
|
|
20
|
+
export async function gitTagList(input: GitTagListInput, ctx: GitContext = {}): Promise<GitTagListOutput> {
|
|
21
|
+
const args = ["tag", "--list", FORMAT];
|
|
22
|
+
if (input.pattern) args.push(gitArg("pattern", input.pattern));
|
|
23
|
+
|
|
24
|
+
const output = await git(args, { cwd: input.cwd, signal: ctx.signal });
|
|
25
|
+
const tags: GitTagInfo[] = output
|
|
26
|
+
.split("\n")
|
|
27
|
+
.filter((line) => line.length > 0)
|
|
28
|
+
.map((line) => {
|
|
29
|
+
const [name = "", type = "", peeled = "", object = "", subject = ""] = line.split("\0");
|
|
30
|
+
const annotated = type === "tag";
|
|
31
|
+
const tag: GitTagInfo = { name, hash: annotated && peeled ? peeled : object, annotated };
|
|
32
|
+
if (annotated) tag.message = subject;
|
|
33
|
+
return tag;
|
|
34
|
+
});
|
|
35
|
+
return { tags };
|
|
36
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* git.worktree.add procedure
|
|
3
|
+
*
|
|
4
|
+
* Add a working tree (roadmap R40). Git refuses a folder that exists and is not empty. Without
|
|
5
|
+
* `ref`, `branch` and `detach`, git makes a branch with the name of the folder.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { resolve } from "node:path";
|
|
9
|
+
import { gitArg } from "../args.js";
|
|
10
|
+
import { git, type GitContext } from "../run.js";
|
|
11
|
+
import { currentBranch, headHash } from "../refs.js";
|
|
12
|
+
import type { GitWorktreeAddInput, GitWorktreeAddOutput } from "../../../types.js";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Add a working tree
|
|
16
|
+
*/
|
|
17
|
+
export async function gitWorktreeAdd(input: GitWorktreeAddInput, ctx: GitContext = {}): Promise<GitWorktreeAddOutput> {
|
|
18
|
+
const { ref, branch, detach, cwd } = input;
|
|
19
|
+
const path = resolve(cwd ?? process.cwd(), input.path);
|
|
20
|
+
|
|
21
|
+
const args = ["worktree", "add"];
|
|
22
|
+
if (branch) args.push("-b", gitArg("branch", branch));
|
|
23
|
+
if (detach) args.push("--detach");
|
|
24
|
+
// After "--", a path that starts with "-" stays a path
|
|
25
|
+
args.push("--", path);
|
|
26
|
+
if (ref) args.push(gitArg("ref", ref));
|
|
27
|
+
await git(args, { cwd, signal: ctx.signal });
|
|
28
|
+
|
|
29
|
+
// The new working tree gives its own HEAD
|
|
30
|
+
const inTree = { cwd: path, signal: ctx.signal };
|
|
31
|
+
const result: GitWorktreeAddOutput = { path, head: await headHash(inTree) };
|
|
32
|
+
const checkedOut = await currentBranch(inTree);
|
|
33
|
+
if (checkedOut !== "HEAD") result.branch = checkedOut;
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* git.worktree.list procedure
|
|
3
|
+
*
|
|
4
|
+
* List the working trees of the repository (roadmap R40). The main working tree is first.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { resolve } from "node:path";
|
|
8
|
+
import { git, zFields, type GitContext } from "../run.js";
|
|
9
|
+
import type { GitWorktreeInfo, GitWorktreeListInput, GitWorktreeListOutput } from "../../../types.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* This function reads the output of `git worktree list --porcelain -z`: the fields of one working
|
|
13
|
+
* tree, then an empty field.
|
|
14
|
+
*/
|
|
15
|
+
export function parseWorktrees(output: string): GitWorktreeInfo[] {
|
|
16
|
+
const worktrees: GitWorktreeInfo[] = [];
|
|
17
|
+
let current: GitWorktreeInfo | undefined;
|
|
18
|
+
for (const field of zFields(output)) {
|
|
19
|
+
if (field === "") {
|
|
20
|
+
current = undefined;
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
const space = field.indexOf(" ");
|
|
24
|
+
const key = space < 0 ? field : field.slice(0, space);
|
|
25
|
+
const value = space < 0 ? "" : field.slice(space + 1);
|
|
26
|
+
if (key === "worktree") {
|
|
27
|
+
// Git gives "/" on Windows too: resolve gives the path of the platform
|
|
28
|
+
current = { path: resolve(value), detached: false, bare: false, locked: false, prunable: false };
|
|
29
|
+
worktrees.push(current);
|
|
30
|
+
} else if (current) {
|
|
31
|
+
if (key === "HEAD") current.head = value;
|
|
32
|
+
else if (key === "branch") current.branch = value.replace(/^refs\/heads\//, "");
|
|
33
|
+
else if (key === "detached") current.detached = true;
|
|
34
|
+
else if (key === "bare") current.bare = true;
|
|
35
|
+
else if (key === "locked") current.locked = true;
|
|
36
|
+
else if (key === "prunable") current.prunable = true;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return worktrees;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* List the working trees of the repository
|
|
44
|
+
*/
|
|
45
|
+
export async function gitWorktreeList(input: GitWorktreeListInput, ctx: GitContext = {}): Promise<GitWorktreeListOutput> {
|
|
46
|
+
const output = await git(["worktree", "list", "--porcelain", "-z"], { cwd: input.cwd, signal: ctx.signal });
|
|
47
|
+
return { worktrees: parseWorktrees(output) };
|
|
48
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* git.worktree.remove procedure
|
|
3
|
+
*
|
|
4
|
+
* Remove a working tree and its folder (roadmap R40). Git refuses a working tree with changes
|
|
5
|
+
* that are not committed, unless `force` is true. Then the changes are lost.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { git, type GitContext } from "../run.js";
|
|
9
|
+
import type { GitWorktreeRemoveInput, GitWorktreeRemoveOutput } from "../../../types.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Remove a working tree
|
|
13
|
+
*/
|
|
14
|
+
export async function gitWorktreeRemove(input: GitWorktreeRemoveInput, ctx: GitContext = {}): Promise<GitWorktreeRemoveOutput> {
|
|
15
|
+
const args = ["worktree", "remove"];
|
|
16
|
+
if (input.force) args.push("--force");
|
|
17
|
+
// After "--", a path that starts with "-" stays a path
|
|
18
|
+
args.push("--", input.path);
|
|
19
|
+
await git(args, { cwd: input.cwd, signal: ctx.signal });
|
|
20
|
+
return { path: input.path };
|
|
21
|
+
}
|