Skip to content

Commit 607301a

Browse files
alqmckinfuy
authored andcommitted
feat: gacm use user switching can be selected
1 parent 6a67674 commit 607301a

File tree

7 files changed

+137
-103
lines changed

7 files changed

+137
-103
lines changed

dist/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ gacm add --name xxx --email xxx [--alias xxx]
6464
## Define user alias
6565
gacm alias xxxx xxxx
6666

67-
## Delete user
68-
gacm delate user
67+
## delete user
68+
gacm delete user
6969

7070
```
7171
### License

dist/main.js

Lines changed: 76 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@ var fs = require('fs');
88
var child_process = require('child_process');
99
var process$1 = require('process');
1010
var execa = require('execa');
11+
var prompts = require('prompts');
1112

1213
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
1314

1415
var execa__default = /*#__PURE__*/_interopDefaultLegacy(execa);
16+
var prompts__default = /*#__PURE__*/_interopDefaultLegacy(prompts);
1517

1618
var name = "gacm";
1719
var version = "1.1.3";
@@ -98,7 +100,7 @@ const warning = (msg) => console.log(`
98100
${kolorist.yellow(PREFIX + msg)}
99101
`);
100102
const info = (msg) => console.log(`
101-
${PREFIX + kolorist.blue(msg)}
103+
${kolorist.blue(PREFIX + msg)}
102104
`);
103105
const log = {
104106
success,
@@ -107,11 +109,53 @@ const log = {
107109
info
108110
};
109111

112+
const insertUser = async (name, email, alias = name) => {
113+
let userList = await getFileUser(registriesPath);
114+
if (!userList)
115+
userList = { version: "", users: [] };
116+
if (!userList.version)
117+
userList = transformData(userList);
118+
if (isExistAlias(userList.users, alias, name, email)) {
119+
userList.users.forEach((user) => {
120+
if (user.alias === alias || !user.alias && user.name === alias || name && email && user.name === name && user.email === email) {
121+
user.alias = alias === name ? user.alias ? user.alias : alias : alias;
122+
user.email = email;
123+
user.name = name;
124+
log.success(`[update]:${alias} ${user.alias !== name ? `(${user.name})` : ""}`);
125+
}
126+
});
127+
} else {
128+
userList.users.push({
129+
name,
130+
email,
131+
alias
132+
});
133+
log.success(`[add]: ${alias} ${alias !== name ? `(${name})` : ""}`);
134+
}
135+
await writeFileUser(registriesPath, userList);
136+
};
137+
const transformData = (data) => {
138+
const userInfo = { version: "", users: [] };
139+
Object.keys(data).forEach((x) => {
140+
userInfo.users.push({
141+
name: data[x].name,
142+
email: data[x].email,
143+
alias: data[x].name
144+
});
145+
});
146+
return userInfo;
147+
};
148+
const isExistAlias = (users, alias, name, email) => {
149+
return users.some((x) => x.alias === alias || !x.alias && x.name === alias || name && email && x.name === name && x.email === email);
150+
};
151+
110152
const { readFile, writeFile } = fs.promises;
111153
const getFileUser = async (rootPath) => {
112154
if (fs.existsSync(rootPath)) {
113155
const fileBuffer = await readFile(rootPath, "utf-8");
114-
const userList = fileBuffer ? JSON.parse(fileBuffer.toString()) : null;
156+
let userList = fileBuffer ? JSON.parse(fileBuffer.toString()) : null;
157+
if (userList && !userList.version)
158+
userList = transformData(userList);
115159
return userList;
116160
}
117161
return null;
@@ -164,52 +208,10 @@ const printMessages = (messages) => {
164208
console.log("\n");
165209
};
166210

167-
const insertUser = async (name, email, alias = name) => {
168-
let userList = await getFileUser(registriesPath);
169-
if (!userList)
170-
userList = { version: "", users: [] };
171-
if (!userList.version)
172-
userList = transformData(userList);
173-
if (isExistAlias(userList.users, alias, name, email)) {
174-
userList.users.forEach((user) => {
175-
if (user.alias === alias || !user.alias && user.name === alias || name && email && user.name === name && user.email === email) {
176-
user.alias = alias === name ? user.alias ? user.alias : alias : alias;
177-
user.email = email;
178-
user.name = name;
179-
log.success(`[update]:${alias} ${user.alias !== name ? `(${user.name})` : ""}`);
180-
}
181-
});
182-
} else {
183-
userList.users.push({
184-
name,
185-
email,
186-
alias
187-
});
188-
log.success(`[add]: ${alias} ${alias !== name ? `(${name})` : ""}`);
189-
}
190-
await writeFileUser(registriesPath, userList);
191-
};
192-
const transformData = (data) => {
193-
const userInfo = { version: "", users: [] };
194-
Object.keys(data).forEach((x) => {
195-
userInfo.users.push({
196-
name: data[x].name,
197-
email: data[x].email,
198-
alias: data[x].name
199-
});
200-
});
201-
return userInfo;
202-
};
203-
const isExistAlias = (users, alias, name, email) => {
204-
return users.some((x) => x.alias === alias || !x.alias && x.name === alias || name && email && x.name === name && x.email === email);
205-
};
206-
207211
const useLs = async () => {
208-
let userList = await getFileUser(registriesPath) || {};
212+
const userList = await getFileUser(registriesPath) || {};
209213
const currectUser = await execCommand("git", ["config", "user.name"]);
210214
const currectEmail = await execCommand("git", ["config", "user.email"]);
211-
if (!userList.version)
212-
userList = transformData(userList);
213215
if (userList.users.length === 0 && (!currectUser || !currectEmail)) {
214216
return log.info("no user");
215217
}
@@ -233,11 +235,9 @@ const useLs = async () => {
233235
};
234236

235237
const useDelete = async (name) => {
236-
let userList = await getFileUser(registriesPath);
238+
const userList = await getFileUser(registriesPath);
237239
if (!userList)
238240
return log.error(`no user`);
239-
if (!userList.version)
240-
userList = transformData(userList);
241241
const useUser = userList.users.filter((x) => x.alias === name || !x.alias && x.name === name);
242242
if (useUser.length === 0)
243243
return log.error(`${name} not found`);
@@ -262,8 +262,6 @@ const useAlias = async (origin, target) => {
262262
let userList = await getFileUser(registriesPath);
263263
if (!userList)
264264
userList = { version: "", users: [] };
265-
if (!userList.version)
266-
userList = transformData(userList);
267265
let changed = false;
268266
userList.users.forEach((x) => {
269267
if (x.alias === origin) {
@@ -281,31 +279,48 @@ const useAlias = async (origin, target) => {
281279
await writeFileUser(registriesPath, userList);
282280
};
283281

284-
const useUse = async (name, cmd) => {
285-
let userList = await getFileUser(registriesPath);
282+
const useUse = async ([name], cmd) => {
283+
const userList = await getFileUser(registriesPath);
286284
if (!userList)
285+
return log.error(`no user exists`);
286+
let useUser = void 0;
287+
if (name) {
288+
useUser = userList.users.find((x) => x.alias === name);
289+
} else {
290+
const { user } = await prompts__default["default"]({
291+
type: "select",
292+
name: "user",
293+
message: "Pick a account",
294+
choices: userList.users.map((x) => {
295+
return {
296+
title: `${x.alias}${x.alias === x.name ? "" : `(${x.name})`} ${x.email}`,
297+
value: x
298+
};
299+
})
300+
});
301+
if (useUser)
302+
useUser = user;
303+
else
304+
return log.error(`user cancels operation`);
305+
}
306+
if (!useUser)
287307
return log.error(`${name} not found`);
288-
if (!userList.version)
289-
userList = transformData(userList);
290-
if (userList.users.every((x) => x.alias !== name))
291-
return log.error(`${name} not found`);
292-
const useUser = userList.users.filter((x) => x.alias === name);
293308
let env = "local";
294309
if (cmd.system)
295310
env = "system";
296311
if (cmd.global)
297312
env = "global";
298313
if (cmd.local)
299314
env = "local";
300-
await run(`git config --${env} user.name ${useUser[0].name}`);
301-
await run(`git config --${env} user.email ${useUser[0].email}`);
302-
log.success(`git user changed [${env}]:${useUser[0].alias}${useUser[0].alias !== useUser[0].name ? `(${useUser[0].name})` : ""}`);
315+
await run(`git config --${env} user.name ${useUser.name}`);
316+
await run(`git config --${env} user.email ${useUser.email}`);
317+
log.success(`git user changed [${env}]:${useUser.alias}${useUser.alias !== useUser.name ? `(${useUser.name})` : ""}`);
303318
};
304319

305320
const program = new commander.Command();
306321
program.option("-v, --version", "\u67E5\u770B\u5F53\u524D\u7248\u672C").usage("command <option>").description("\u67E5\u770B\u5F53\u524D\u7248\u672C").action(useVersion);
307322
program.command("ls").description("\u5F53\u524D\u7528\u6237\u5217\u8868").action(useLs);
308-
program.command("use <name>").option("-l, --local", "\u5F53\u524D\u7528\u6237").option("-g, --global", "\u5168\u5C40\u7528\u6237").option("-s, --system", "\u7CFB\u7EDF\u7528\u6237").description("\u5207\u6362\u7528\u6237").action(useUse);
323+
program.command("use [name...]").option("-l, --local", "\u5F53\u524D\u7528\u6237").option("-g, --global", "\u5168\u5C40\u7528\u6237").option("-s, --system", "\u7CFB\u7EDF\u7528\u6237").description("\u5207\u6362\u7528\u6237").action(useUse);
309324
program.command("add").option("-n, --name <name>", "\u7528\u6237\u540D\u79F0").option("-e, --email <email>", "\u7528\u6237\u90AE\u7BB1").option("-a, --alias <alias>", "\u7528\u6237\u522B\u540D").description("\u6DFB\u52A0\u7528\u6237").action(useAdd);
310325
program.command("alias <origin> <target>").description("\u6DFB\u52A0\u522B\u540D").action(useAlias);
311326
program.command("delete <name>").description("\u5220\u9664\u7528\u6237").action(useDelete);

dist/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@
2020
"commander": "^9.3.0",
2121
"execa": "5.1.1",
2222
"kolorist": "^1.5.1",
23-
"minimist": "^1.2.6"
23+
"prompts": "^2.4.2"
2424
}
2525
}

package/commands/useUse.ts

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,44 @@
1+
import prompts from 'prompts';
12
import { registriesPath } from '../config/path';
23
import { getFileUser } from '../utils/getUserList';
34
import { log } from '../utils/log';
45
import { run } from '../utils/shell';
6+
import type { UserInfo } from '../type/shell.type';
57

68
export interface UseCmd {
79
local?: boolean;
810
global?: boolean;
911
system?: boolean;
1012
}
1113

12-
export const useUse = async (name: string, cmd: UseCmd) => {
14+
export const useUse = async ([name]: string[], cmd: UseCmd) => {
1315
const userList = await getFileUser(registriesPath);
1416

15-
if (!userList) return log.error(`${name} not found`);
16-
17-
if (userList.users.every((x) => x.alias !== name))
18-
return log.error(`${name} not found`);
19-
20-
const useUser = userList.users.filter((x) => x.alias === name);
17+
if (!userList) return log.error(`no user exists`);
18+
19+
let useUser: UserInfo | undefined = undefined;
20+
if (name) {
21+
useUser = userList.users.find((x) => x.alias === name);
22+
} else {
23+
const { user } = await prompts({
24+
type: 'select',
25+
name: 'user',
26+
message: 'Pick a account',
27+
choices: userList.users.map((x) => {
28+
return {
29+
title: `${x.alias}${x.alias === x.name ? '' : `(${x.name})`} ${
30+
x.email
31+
}`,
32+
value: x,
33+
};
34+
}),
35+
});
36+
37+
if (useUser) useUser = user;
38+
else return log.error(`user cancels operation`);
39+
}
40+
41+
if (!useUser) return log.error(`${name} not found`);
2142

2243
let env = 'local';
2344

@@ -27,13 +48,13 @@ export const useUse = async (name: string, cmd: UseCmd) => {
2748

2849
if (cmd.local) env = 'local';
2950

30-
await run(`git config --${env} user.name ${useUser[0].name}`);
51+
await run(`git config --${env} user.name ${useUser.name}`);
3152

32-
await run(`git config --${env} user.email ${useUser[0].email}`);
53+
await run(`git config --${env} user.email ${useUser.email}`);
3354

3455
log.success(
35-
`git user changed [${env}]:${useUser[0].alias}${
36-
useUser[0].alias !== useUser[0].name ? `(${useUser[0].name})` : ''
56+
`git user changed [${env}]:${useUser.alias}${
57+
useUser.alias !== useUser.name ? `(${useUser.name})` : ''
3758
}`
3859
);
3960
};

package/main.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ program
1919
program.command('ls').description('当前用户列表').action(useLs);
2020

2121
program
22-
.command('use <name>')
22+
.command('use [name...]')
2323
.option('-l, --local', '当前用户')
2424
.option('-g, --global', '全局用户')
2525
.option('-s, --system', '系统用户')

package/package.json

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
1-
{
2-
"name": "gacm",
3-
"version": "1.1.3",
4-
"private": false,
5-
"description": "git account manage",
6-
"keywords": [
7-
"git",
8-
"account",
9-
"manage"
10-
],
11-
"license": "MIT",
12-
"author": "alqmc",
13-
"bin": {
14-
"gacm": "main.js"
15-
},
16-
"publishConfig": {
17-
"access": "public"
18-
},
19-
"dependencies": {
20-
"commander": "^9.3.0",
21-
"execa": "5.1.1",
22-
"kolorist": "^1.5.1",
23-
"minimist": "^1.2.6"
24-
}
25-
}
1+
{
2+
"name": "gacm",
3+
"version": "1.1.3",
4+
"private": false,
5+
"description": "git account manage",
6+
"keywords": [
7+
"git",
8+
"account",
9+
"manage"
10+
],
11+
"license": "MIT",
12+
"author": "alqmc",
13+
"bin": {
14+
"gacm": "main.js"
15+
},
16+
"publishConfig": {
17+
"access": "public"
18+
},
19+
"dependencies": {
20+
"commander": "^9.3.0",
21+
"execa": "5.1.1",
22+
"kolorist": "^1.5.1",
23+
"prompts": "^2.4.2"
24+
}
25+
}

script/release.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ const main = async () => {
1717
await run('git', ['commit', '-m', `release: v${tag}`]);
1818
const branch = await run('git', ['rev-parse', '--abbrev-ref', 'HEAD']);
1919
await run('git', ['github', 'push', branch]);
20-
await run('cd', ['dist']);
21-
await run('cnpm', ['publish']);
2220
} catch (error) {
2321
process.exit(0);
2422
}

0 commit comments

Comments
 (0)