Я ищу способ создания объекта из выходных данных git show
Я использую git show -m --name-status --oneline <commit-hash>
. Вывод выглядит так:
5b5f664 (from fd9fe89) Merge branch 'develop' into COMMIT-4
M src/app/app.module.ts
M src/app/components/accordion/accordion.component.scss
A src/app/components/file-diff-commit/file-diff-commit.component.html
A src/app/components/file-diff-commit/file-diff-commit.component.ts
M src/app/models/MockGitService.ts
M src/app/models/MockLeftPanelService.ts
M src/assets/i18n/en.json
M src/assets/i18n/fr.json
M package.json
5b5f664 (from a0ebd90) Merge branch 'develop' into COMMIT-4
M package.json
M src/app/components/copy-button/copy-button.component.scss
A src/app/models/CommitInformations.ts
M src/app/models/MockGitService.ts
M src/app/models/MockRightPanelService.ts
Я просто хочу получить часть между описанием двух коммитов и получить такие объекты:
[
{ status: "M", path: "src/app/app.module.ts" },
{ status: "M", path: "src/app/components/accordion/accordion.component.scss" },
{ status: "A", path: "src/app/components/file-diff-commit/file-diff-commit.component.html" },
{ status: "A", path: "src/app/components/file-diff-commit/file-diff-commit.component.ts" },
{ status: "M", path: "src/app/models/MockGitService.ts" },
{ status: "M", path: "src/app/models/MockLeftPanelService.ts" },
{ status: "M", path: "src/assets/i18n/en.json" },
{ status: "M", path: "src/assets/i18n/fr.json" },
{ status: "M", path: "package.json" }
]
И
{
"src": {
"app": {
{ file: "app.module.ts", status: "M" },
"components": {
"accordion": {
{ file: "accordion.component.scss" status: "m" }
}
...
}
},
"assets": {
....
}
},
{ file: "package.json", status: "M" }
}
Я понятия не имею, как создать второй объект. Но я попробовал это для первого:
var first = test.split(/\n/).map(x => {
return (x.split(/\s{7}/g))
}).filter(o => o.length === 2);
console.log(first);
Проблема в том, что я получаю деталь после описания второго коммита.
Как я могу приступить к созданию этих двух объектов?
EDIT
Рабочий раствор для первого объекта
var output = `5b5f664 (from fd9fe89) Merge branch 'develop' into COMMIT-4
M src/app/app.module.ts
M src/app/components/accordion/accordion.component.scss
A src/app/components/file-diff-commit/file-diff-commit.component.html
A src/app/components/file-diff-commit/file-diff-commit.component.ts
M src/app/models/MockGitService.ts
M src/app/models/MockLeftPanelService.ts
M src/assets/i18n/en.json
M src/assets/i18n/fr.json
M package.json
5b5f664 (from a0ebd90) Merge branch 'develop' into COMMIT-4
M package.json
M src/app/components/copy-button/copy-button.component.scss
A src/app/models/CommitInformations.ts
M src/app/models/MockGitService.ts
M src/app/models/MockRightPanelService.ts`;
var temp = output.split(/\n/);
temp.shift();
var arr = temp.map(x => {
return (x.split(/\s{7}/g))
})
var final = [];
for (s in arr) {
if (Array.isArray(arr[s]) && arr[s].length === 2) {
final.push({ status: arr[s][0], path: arr[s][1]});
} else {
break;
}
}
console.log(final);