Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions src/__tests__/fixtures/multiple-gitmodules.ini
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@


[submodule "ports/nvim"]
path = ports/nvim
[submodule ".config/nvim"]
path = .config/nvim
url = https://github.com/catppuccin/nvim.git



[submodule "ports/mdBook"]
url = "https://github.com/catppuccin/mdBook.git"
path = ports/mdBook
[submodule "ports/vscode-icons"]
path = ports/vscode-icons
url = https://github.com/catppuccin/vscode-icons.git


22 changes: 11 additions & 11 deletions src/__tests__/main.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -193,21 +193,14 @@ test("extract multiple git submodules from .gitmodules", async () => {
const input = await readFile(
"src/__tests__/fixtures/multiple-gitmodules.ini"
);
const [nvim, mdBook, vscodeIcons] = [
nvimSubmodule(),
const [mdBook, vscodeIcons, nvim] = [
mdBookSubmodule(),
vscodeIconsSubmodule(),
nvimSubmodule(),
];
const expected: Submodule[] = [nvim, mdBook, vscodeIcons];
const expected: Submodule[] = [mdBook, vscodeIcons, nvim];

vi.mocked(getExecOutput)
.mockReturnValueOnce(
Promise.resolve({
exitCode: 0,
stdout: `\n${nvim.previousCommitSha}`,
stderr: "",
})
)
.mockReturnValueOnce(
Promise.resolve({
exitCode: 0,
Expand All @@ -225,7 +218,7 @@ test("extract multiple git submodules from .gitmodules", async () => {
.mockReturnValueOnce(
Promise.resolve({
exitCode: 0,
stdout: `\n${nvim.previousTag}`,
stdout: `\n${nvim.previousCommitSha}`,
stderr: "",
})
)
Expand Down Expand Up @@ -263,6 +256,13 @@ test("extract multiple git submodules from .gitmodules", async () => {
stdout: `\n${vscodeIcons.previousTag}`,
stderr: "",
})
)
.mockReturnValueOnce(
Promise.resolve({
exitCode: 0,
stdout: `\n${nvim.previousTag}`,
stderr: "",
}),
);

const actual = await parseGitmodules(input);
Expand Down
6 changes: 3 additions & 3 deletions src/__tests__/markdown.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ test("markdown pr body for multiple submodules", async () => {
const expected = `
| --- | --- | --- |
| [catppuccin/mdBook](https://github.com/catppuccin/mdBook.git) | ports/mdBook | [a19a19b...c9868d3](https://github.com/catppuccin/mdBook/compare/a19a19bd14f26c3bba311bbffc5a74710add5ac2...c9868d34c04df61207141ba4b7dc51d270fda7ec) |
| [catppuccin/nvim](https://github.com/catppuccin/nvim.git) | ports/nvim | [774a4ed...4fd72a9](https://github.com/catppuccin/nvim/compare/774a4ed9a69d0a2633da60f73aa63a8e23aacced...4fd72a9ab64b393c2c22b168508fd244877fec96) |
| [catppuccin/nvim](https://github.com/catppuccin/nvim.git) | .config/nvim | [774a4ed...4fd72a9](https://github.com/catppuccin/nvim/compare/774a4ed9a69d0a2633da60f73aa63a8e23aacced...4fd72a9ab64b393c2c22b168508fd244877fec96) |
| [catppuccin/vscode-icons](https://github.com/catppuccin/vscode-icons.git) | ports/vscode-icons | [71d98b8...da859f0](https://github.com/catppuccin/vscode-icons/compare/71d98b81bfdb6b8d3527037c3017eb07e6ec0621...da859f02ffb1ec834ce2efabb7f5bab8667e294c) |
`;

Expand Down Expand Up @@ -54,7 +54,7 @@ test("markdown pr body for multiple submodules using tag strategy", async () =>
const expected = `
| --- | --- | --- |
| [catppuccin/mdBook](https://github.com/catppuccin/mdBook.git) | ports/mdBook | [v0.1.2...v2.2.0](https://github.com/catppuccin/mdBook/compare/v0.1.2...v2.2.0) |
| [catppuccin/nvim](https://github.com/catppuccin/nvim.git) | ports/nvim | [v1.8.0...v1.9.0](https://github.com/catppuccin/nvim/compare/v1.8.0...v1.9.0) |
| [catppuccin/nvim](https://github.com/catppuccin/nvim.git) | .config/nvim | [v1.8.0...v1.9.0](https://github.com/catppuccin/nvim/compare/v1.8.0...v1.9.0) |
| [catppuccin/vscode-icons](https://github.com/catppuccin/vscode-icons.git) | ports/vscode-icons | [v1.14.0...v1.15.0](https://github.com/catppuccin/vscode-icons/compare/v1.14.0...v1.15.0) |
`;

Expand Down Expand Up @@ -91,7 +91,7 @@ test("markdown pr body for multiple submodules using tag strategy and previous c
const expected = `
| --- | --- | --- |
| [catppuccin/mdBook](https://github.com/catppuccin/mdBook.git) | ports/mdBook | [a19a19b...v2.2.0](https://github.com/catppuccin/mdBook/compare/a19a19bd14f26c3bba311bbffc5a74710add5ac2...v2.2.0) |
| [catppuccin/nvim](https://github.com/catppuccin/nvim.git) | ports/nvim | [774a4ed...v1.9.0](https://github.com/catppuccin/nvim/compare/774a4ed9a69d0a2633da60f73aa63a8e23aacced...v1.9.0) |
| [catppuccin/nvim](https://github.com/catppuccin/nvim.git) | .config/nvim | [774a4ed...v1.9.0](https://github.com/catppuccin/nvim/compare/774a4ed9a69d0a2633da60f73aa63a8e23aacced...v1.9.0) |
| [catppuccin/vscode-icons](https://github.com/catppuccin/vscode-icons.git) | ports/vscode-icons | [v1.14.0...v1.15.0](https://github.com/catppuccin/vscode-icons/compare/v1.14.0...v1.15.0) |
`;

Expand Down
4 changes: 2 additions & 2 deletions src/__tests__/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,8 @@ export const vscodeIconsSubmodule = (
};

export const nvimSubmodule = (
name: string = "ports/nvim",
path: string = "ports/nvim",
name: string = ".config/nvim",
path: string = ".config/nvim",
url: string = "https://github.com/catppuccin/nvim.git",
remoteName: string = "catppuccin/nvim",
previousShortCommitSha: string = "774a4ed",
Expand Down
17 changes: 16 additions & 1 deletion src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -112,11 +112,26 @@ export const getRemoteName = (url: string) => {
return url.substring(startIndex).replace(/^\/+/, "");
}

type IniSubmodule = Record<"path" | "url", string>;

function cleanUpParsed(
parsed: Record<string, IniSubmodule | Record<string, IniSubmodule>>,
) {
return Object.entries(parsed)
.map(([key, value]) => {
if (value.path && value.url) return { [key]: value };
const [[nestedKey, nestedValue]] = Object.entries(value);
return { [`${key} .${nestedKey}`]: nestedValue };
})
.reduce((prev, curr) => ({ ...prev, ...curr }), {});
}


export const parseGitmodules = async (
content: string
): Promise<Submodule[]> => {
const parsed = parse(content);
const gitmodules = await gitmodulesSchema.parseAsync(parsed);
const gitmodules = await gitmodulesSchema.parseAsync(cleanUpParsed(parsed));
Comment thread
sgoudham marked this conversation as resolved.
Outdated
return await Promise.all(
Object.entries(gitmodules).map(async ([key, values]) => {
const name = key.split('"')[1].trim();
Expand Down