From 6b9967248b5d094a4acd10465228ccec95b5309b Mon Sep 17 00:00:00 2001 From: Richard Kotze Date: Fri, 28 Mar 2025 23:44:03 +0000 Subject: [PATCH 1/7] Show error in primary author tree item Git Mob does not break when no main author and displays inline error. #27 --- src/build-co-author-groups.js | 6 ++++-- src/build-co-author-groups.spec.js | 18 +++++++++++++++++- src/co-author-tree-provider/error-author.js | 7 ++++--- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/build-co-author-groups.js b/src/build-co-author-groups.js index f861295e..704ad3c3 100644 --- a/src/build-co-author-groups.js +++ b/src/build-co-author-groups.js @@ -23,7 +23,9 @@ exports.buildCoAuthorGroups = async function buildCoAuthorGroups() { const allAuthors = await getAllAuthors(); const selectedCoAuthors = await getSelectedCoAuthors(allAuthors); unselected = authorListToMap( - allAuthors.filter((author) => mainAuthor.email != author.email), + allAuthors.filter( + (author) => mainAuthor === undefined || mainAuthor.email != author.email + ), (author) => new CoAuthor(author.name, author.email, false, author.key) ); selected = authorListToMap( @@ -45,7 +47,7 @@ exports.buildCoAuthorGroups = async function buildCoAuthorGroups() { if (mainAuthor) { return new PrimaryAuthor(mainAuthor.name, mainAuthor.email); } - return new ErrorAuthor("Missing Git author"); + return new ErrorAuthor("Error: Missing main Git author."); }, getUnselected() { return sortAuthors(Array.from(unselected.values())); diff --git a/src/build-co-author-groups.spec.js b/src/build-co-author-groups.spec.js index c7735dc2..29ae0e01 100644 --- a/src/build-co-author-groups.spec.js +++ b/src/build-co-author-groups.spec.js @@ -1,6 +1,7 @@ const { workspace } = require("../__mocks__/vscode"); const { buildCoAuthorGroups } = require("./build-co-author-groups"); const { CoAuthor } = require("./co-author-tree-provider/co-authors"); +const { ErrorAuthor } = require("./co-author-tree-provider/error-author"); const { getAllAuthors, setCoAuthors, @@ -13,7 +14,7 @@ const { Author } = jest.requireActual("git-mob-core"); jest.mock("git-mob-core"); describe("Co-author list", function () { - const author = new Author("Richard Kotze", "rkotze@email.com"); + const author = new Author("rk", "Richard Kotze", "rkotze@email.com"); beforeAll(function () { workspace.getConfiguration.mockReturnValue({ @@ -30,6 +31,21 @@ describe("Co-author list", function () { repoAuthorList.mockReset(); }); + it("No main author email should not throw error", async function () { + getPrimaryAuthor.mockResolvedValueOnce(undefined); + getAllAuthors.mockResolvedValueOnce([ + { key: "rk", name: "Richard Kotze", email: "rkotze@email.com" }, + { key: "ts", name: "Tony Stark", email: "tony@stark.com" }, + ]); + getSelectedCoAuthors.mockResolvedValueOnce([]); + + const coAuthorGroups = await buildCoAuthorGroups(); + + expect(coAuthorGroups.getMainAuthor()).toEqual( + new ErrorAuthor("Missing main Git author") + ); + }); + it("Repo authors should not contain co-authors with same email", async function () { repoAuthorList.mockResolvedValueOnce([ new Author("ts", "Tony Stark", "tony@stark.com"), diff --git a/src/co-author-tree-provider/error-author.js b/src/co-author-tree-provider/error-author.js index 946e5b76..11ed183f 100644 --- a/src/co-author-tree-provider/error-author.js +++ b/src/co-author-tree-provider/error-author.js @@ -2,15 +2,16 @@ const vscode = require("vscode"); const { None } = vscode.TreeItemCollapsibleState; class ErrorAuthor extends vscode.TreeItem { - constructor() { - super("Error", None); + constructor(name, contextValue = "error-author") { + super(name || "Error: missing author!", None); this.email = "e@r.ror"; this.selected = false; this.commandKey = ""; + this.contextValue = contextValue; } get tooltip() { - return "Error"; + return "Error: missing author!"; } } From 4a5527afda0d05e6d8e280e24e632df6597506af Mon Sep 17 00:00:00 2001 From: Richard Kotze Date: Fri, 11 Apr 2025 11:57:42 +0100 Subject: [PATCH 2/7] Add images of auto-complete co-authors --- resources/co-author-suggestion.png | Bin 0 -> 72403 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 resources/co-author-suggestion.png diff --git a/resources/co-author-suggestion.png b/resources/co-author-suggestion.png new file mode 100644 index 0000000000000000000000000000000000000000..27ad30949a49490f07109be9b9ce3c7424f43aaf GIT binary patch literal 72403 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

ydsll2)E71D~CURi&@7*DzizUWlA8vUh5c!I} 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 Date: Fri, 25 Apr 2025 15:49:35 +0100 Subject: [PATCH 3/7] Manually add a new main author If no author provide a basic user and email input to set the main author locally. --- package.json | 11 +++++++++ src/commands/add-main-author.js | 44 +++++++++++++++++++++++++++++++++ src/setup-git-mob.js | 2 ++ 3 files changed, 57 insertions(+) create mode 100644 src/commands/add-main-author.js diff --git a/package.json b/package.json index 4d4f4a81..33880364 100644 --- a/package.json +++ b/package.json @@ -133,6 +133,12 @@ "category": "Git Mob", "icon": "$(add)" }, + { + "command": "gitmob.addMainAuthor", + "title": "Add main author", + "category": "Git Mob", + "icon": "$(add)" + }, { "command": "gitmob.searchRepositoryUsers", "title": "Search Git repository for co-authors", @@ -222,6 +228,11 @@ "when": "viewItem == add-repo-author", "group": "inline" }, + { + "command": "gitmob.addMainAuthor", + "when": "viewItem == error-author", + "group": "inline" + }, { "command": "gitmob.removeCoAuthor", "when": "viewItem == remove-author", diff --git a/src/commands/add-main-author.js b/src/commands/add-main-author.js new file mode 100644 index 00000000..f4a2a006 --- /dev/null +++ b/src/commands/add-main-author.js @@ -0,0 +1,44 @@ +const vscode = require("vscode"); +const { Author, setPrimaryAuthor } = require("git-mob-core"); + +function addMainAuthor() { + return vscode.commands.registerCommand( + "gitmob.addMainAuthor", + async function () { + const newAuthor = await inputAuthorData(); + if (newAuthor) { + await setPrimaryAuthor( + new Author("author", newAuthor.name, newAuthor.email) + ); + await vscode.commands.executeCommand("gitmob.reload"); + } + } + ); +} + +async function inputAuthorData() { + const name = await vscode.window.showInputBox({ + prompt: "Author name (Required)", + validateInput: isRequired("Author name"), + }); + const email = await vscode.window.showInputBox({ + prompt: "Author email (Required)", + validateInput: isRequired("Author email"), + }); + + if (anyUndefined(name, email)) return null; + + return new Author("author", name, email); +} + +function isRequired(fieldName) { + return (value) => { + if (value.length === 0) return `${fieldName} is required.`; + }; +} + +function anyUndefined(...args) { + return args.some((value) => typeof value === "undefined"); +} + +exports.addMainAuthor = addMainAuthor; diff --git a/src/setup-git-mob.js b/src/setup-git-mob.js index 94e0040e..f1625416 100644 --- a/src/setup-git-mob.js +++ b/src/setup-git-mob.js @@ -30,6 +30,7 @@ const { buildCoAuthorGroups } = require("./build-co-author-groups"); const { InputCompletionProvider, } = require("./co-author-tree-provider/input-completion-provider"); +const { addMainAuthor } = require("./commands/add-main-author"); async function setupGitMob(context, gitExt) { return bootGitMob(context, gitExt); @@ -66,6 +67,7 @@ async function bootGitMob(context, gitExt) { new CountDecorationProvider(coAuthorProvider), new InputCompletionProvider(coAuthorProvider), copyCoAuthor(), + addMainAuthor({ coAuthorProvider }), ]; disposables.forEach((dispose) => context.subscriptions.push(dispose)); From 180064700d872da4c6b2f6c9020d74c302fac273 Mon Sep 17 00:00:00 2001 From: Richard Kotze Date: Fri, 25 Apr 2025 16:39:08 +0100 Subject: [PATCH 4/7] :recycle: Remove duplicate code for author input --- src/commands/add-co-author.js | 40 ++++-------------------- src/commands/add-main-author.js | 31 +++--------------- src/commands/shared/input-author-data.js | 24 ++++++++++++++ 3 files changed, 35 insertions(+), 60 deletions(-) create mode 100644 src/commands/shared/input-author-data.js diff --git a/src/commands/add-co-author.js b/src/commands/add-co-author.js index 08a56d16..8b026597 100644 --- a/src/commands/add-co-author.js +++ b/src/commands/add-co-author.js @@ -2,6 +2,7 @@ const vscode = require("vscode"); const { CoAuthor } = require("../co-author-tree-provider/co-authors"); const { moveToCoAuthoring } = require("../ext-config/config"); const { saveNewCoAuthors } = require("git-mob-core"); +const { inputAuthorData } = require("./shared/input-author-data"); function addRepoAuthorToCoauthors({ coAuthorProvider }) { return vscode.commands.registerCommand( @@ -22,7 +23,11 @@ function addRepoAuthorToCoauthors({ coAuthorProvider }) { await coAuthorProvider.toggleCoAuthor(coAuthor, true); } } else { - const newAuthor = await inputAuthorData(); + const newAuthor = await inputAuthorData([ + { key: "name", label: "Author name" }, + { key: "email", label: "Author email" }, + { key: "key", label: "Author initials" }, + ]); if (newAuthor) { await saveNewCoAuthors([newAuthor]); const coAuthor = new CoAuthor( @@ -45,37 +50,4 @@ function addRepoAuthorToCoauthors({ coAuthorProvider }) { ); } -async function inputAuthorData() { - const name = await vscode.window.showInputBox({ - prompt: "Author name (Required)", - validateInput: isRequired("Author name"), - }); - const email = await vscode.window.showInputBox({ - prompt: "Author email (Required)", - validateInput: isRequired("Author email"), - }); - const key = await vscode.window.showInputBox({ - prompt: "Author initials (Required)", - validateInput: isRequired("Author initials"), - }); - - if (anyUndefined(name, email, key)) return null; - - return { - name, - email, - key, - }; -} - -function isRequired(fieldName) { - return (value) => { - if (value.length === 0) return `${fieldName} is required.`; - }; -} - -function anyUndefined(...args) { - return args.some((value) => typeof value === "undefined"); -} - exports.addRepoAuthorToCoauthors = addRepoAuthorToCoauthors; diff --git a/src/commands/add-main-author.js b/src/commands/add-main-author.js index f4a2a006..a8725d02 100644 --- a/src/commands/add-main-author.js +++ b/src/commands/add-main-author.js @@ -1,11 +1,15 @@ const vscode = require("vscode"); const { Author, setPrimaryAuthor } = require("git-mob-core"); +const { inputAuthorData } = require("./shared/input-author-data"); function addMainAuthor() { return vscode.commands.registerCommand( "gitmob.addMainAuthor", async function () { - const newAuthor = await inputAuthorData(); + const newAuthor = await inputAuthorData([ + { key: "name", label: "Author name" }, + { key: "email", label: "Author email" }, + ]); if (newAuthor) { await setPrimaryAuthor( new Author("author", newAuthor.name, newAuthor.email) @@ -16,29 +20,4 @@ function addMainAuthor() { ); } -async function inputAuthorData() { - const name = await vscode.window.showInputBox({ - prompt: "Author name (Required)", - validateInput: isRequired("Author name"), - }); - const email = await vscode.window.showInputBox({ - prompt: "Author email (Required)", - validateInput: isRequired("Author email"), - }); - - if (anyUndefined(name, email)) return null; - - return new Author("author", name, email); -} - -function isRequired(fieldName) { - return (value) => { - if (value.length === 0) return `${fieldName} is required.`; - }; -} - -function anyUndefined(...args) { - return args.some((value) => typeof value === "undefined"); -} - exports.addMainAuthor = addMainAuthor; diff --git a/src/commands/shared/input-author-data.js b/src/commands/shared/input-author-data.js new file mode 100644 index 00000000..482f2990 --- /dev/null +++ b/src/commands/shared/input-author-data.js @@ -0,0 +1,24 @@ +const vscode = require("vscode"); + +async function inputAuthorData(fields) { + const authorData = {}; + + for (const field of fields) { + const value = await vscode.window.showInputBox({ + prompt: `${field.label} (Required)`, + validateInput: isRequired(field.label), + }); + if (typeof value === "undefined") return null; + authorData[field.key] = value; + } + + return authorData; +} + +function isRequired(fieldName) { + return (value) => { + if (value.length === 0) return `${fieldName} is required.`; + }; +} + +exports.inputAuthorData = inputAuthorData; From 055c47ec710ebc93c840c142f2a003f90f86d52d Mon Sep 17 00:00:00 2001 From: Richard Kotze Date: Fri, 25 Apr 2025 16:51:07 +0100 Subject: [PATCH 5/7] Add command change & new primary author --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index e2a6126c..43f238d1 100644 --- a/package.json +++ b/package.json @@ -135,7 +135,7 @@ }, { "command": "gitmob.addMainAuthor", - "title": "Add main author", + "title": "New primary author", "category": "Git Mob", "icon": "$(add)" }, @@ -230,7 +230,7 @@ }, { "command": "gitmob.addMainAuthor", - "when": "viewItem == error-author", + "when": "viewItem == error-author || viewItem == primary-author", "group": "inline" }, { From c62afbb406046e5c0fa74027a238520ef3d052f6 Mon Sep 17 00:00:00 2001 From: Richard Kotze Date: Fri, 25 Apr 2025 16:57:55 +0100 Subject: [PATCH 6/7] On error author have change primary author --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 43f238d1..fe7c2970 100644 --- a/package.json +++ b/package.json @@ -240,7 +240,7 @@ }, { "command": "gitmob.changePrimaryAuthor", - "when": "viewItem == primary-author", + "when": "viewItem == error-author || viewItem == primary-author", "group": "inline" }, { From 59ed75283c3afb9b390c02b1d29bf1f5323dce64 Mon Sep 17 00:00:00 2001 From: Richard Kotze Date: Fri, 25 Apr 2025 17:02:34 +0100 Subject: [PATCH 7/7] :bulb: changelog of primary author --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d5e8fc39..b86a5f9b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,12 @@ Follows [Semantic Versioning](https://semver.org/). ## Next version +## 1.23.0 + +### Added + +- If no primary author set handle error inline and ability to set new author through vscode inputs. [Issue 27](https://github.com/rkotze/git-mob-vs-code/issues/27) + ## 1.22.0 ### Added