From f2afb422e954ad600c90e9ad73b83ca0cd958fe5 Mon Sep 17 00:00:00 2001 From: Kevin Canico Date: Fri, 4 Mar 2022 13:53:06 +0100 Subject: [PATCH 01/11] :sparkles: add parser function --- src/services/gitReader.js | 40 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/services/gitReader.js b/src/services/gitReader.js index 538b299..1b08a66 100644 --- a/src/services/gitReader.js +++ b/src/services/gitReader.js @@ -123,4 +123,44 @@ export default class GitReader { files: list, }; } + + commitDetailsParser(commitDetails) { + const allResultCommandLine = commitDetails; + + const allLinesSplited = allResultCommandLine.split('\n'); + + let allFiles = []; + + for (let line in allLinesSplited) { + line = parseInt(line); + const lineValue = allLinesSplited[line]; + let lastIndex = allFiles.length - 1; + let lastFile = allFiles[lastIndex]; + if (lineValue.includes('diff --git')) { + allFiles.push({}); + lastIndex = allFiles.length - 1; + lastFile = allFiles[lastIndex]; + lastFile.command = lineValue; + lastFile.commits = allLinesSplited[line + 1]; + lastFile.oldFile = allLinesSplited[line + 2]; + lastFile.newFile = allLinesSplited[line + 3]; + lastFile.fileContent = []; + } else if (lineValue.includes('@@ -')) { + lastFile.fileContent.push({ + separationName: lineValue, + separationContent: [], + }); + } else if ( + !allLinesSplited[line - 1].includes('diff --git') && + !allLinesSplited[line - 2].includes('diff --git') && + !allLinesSplited[line - 3].includes('diff --git') + ) { + lastFile.fileContent[ + lastFile.fileContent.length - 1 + ].separationContent.push(lineValue); + } + } + + return allFiles; + } } From f68d9c0b116154e9b81ee85de416743f70da1698 Mon Sep 17 00:00:00 2001 From: Lahaxe Hugo Date: Fri, 4 Mar 2022 16:15:34 +0100 Subject: [PATCH 02/11] feat: toggle between file list and file details view in view details popup --- src/modules/GitView/GitView.vue | 2 +- .../GitView/components/CommitDetails.vue | 69 +++++-------------- .../GitView/components/CommitDetailsFile.vue | 12 ++++ .../GitView/components/CommitDetailsFiles.vue | 67 ++++++++++++++++++ .../GitView/components/CommitModal.vue | 12 +++- src/modules/GitView/components/CommitView.vue | 24 ++++++- src/modules/GitView/composables/useGitView.js | 9 ++- 7 files changed, 138 insertions(+), 57 deletions(-) create mode 100644 src/modules/GitView/components/CommitDetailsFile.vue create mode 100644 src/modules/GitView/components/CommitDetailsFiles.vue diff --git a/src/modules/GitView/GitView.vue b/src/modules/GitView/GitView.vue index be0b1ea..decf623 100644 --- a/src/modules/GitView/GitView.vue +++ b/src/modules/GitView/GitView.vue @@ -69,9 +69,9 @@ export default { headCommitSha, folderPath, files, - commitDetails, isDetailsOpened, currentBranchCommits, + commitDetails, }; }, }; diff --git a/src/modules/GitView/components/CommitDetails.vue b/src/modules/GitView/components/CommitDetails.vue index aa0928f..fe71cd3 100644 --- a/src/modules/GitView/components/CommitDetails.vue +++ b/src/modules/GitView/components/CommitDetails.vue @@ -4,77 +4,42 @@ class="flex flex-col border-t-green-400 border-solid border-t-width-2" > Close -

{{ recap }}

- + + + diff --git a/src/modules/GitView/components/CommitDetailsFiles.vue b/src/modules/GitView/components/CommitDetailsFiles.vue new file mode 100644 index 0000000..bdb4dff --- /dev/null +++ b/src/modules/GitView/components/CommitDetailsFiles.vue @@ -0,0 +1,67 @@ + + + diff --git a/src/modules/GitView/components/CommitModal.vue b/src/modules/GitView/components/CommitModal.vue index 5aa0392..8b17ab9 100644 --- a/src/modules/GitView/components/CommitModal.vue +++ b/src/modules/GitView/components/CommitModal.vue @@ -18,6 +18,7 @@ () => { isDetailsOpened = true; shaCommit = sha; + prevShaCommit = prevSha; } " class="mb-4 mt-4" @@ -45,6 +46,10 @@ export default { type: Object, required: true, }, + prevCommit: { + type: Object, + required: true, + }, }, emits: ['onClose'], @@ -52,11 +57,14 @@ export default { setup(props, { emit }) { const { checkoutCommit } = useGit(); - const { isDetailsOpened, shaCommit } = useGitView(); + const { isDetailsOpened, shaCommit, prevShaCommit } = useGitView(); const author = computed(() => props.commit.author); const message = computed(() => props.commit.message); const sha = computed(() => props.commit.sha); + const prevSha = computed(() => + props.prevCommit ? props.prevCommit.sha : null + ); const modalContainer = ref(null); onClickOutside(modalContainer, () => emit('onClose')); @@ -65,10 +73,12 @@ export default { author, message, sha, + prevSha, checkoutCommit, modalContainer, isDetailsOpened, shaCommit, + prevShaCommit, }; }, }; diff --git a/src/modules/GitView/components/CommitView.vue b/src/modules/GitView/components/CommitView.vue index 89f9979..654f85f 100644 --- a/src/modules/GitView/components/CommitView.vue +++ b/src/modules/GitView/components/CommitView.vue @@ -1,14 +1,30 @@ diff --git a/src/modules/GitView/components/CommitDetailsFiles.vue b/src/modules/GitView/components/CommitDetailsFiles.vue index bdb4dff..e808558 100644 --- a/src/modules/GitView/components/CommitDetailsFiles.vue +++ b/src/modules/GitView/components/CommitDetailsFiles.vue @@ -6,7 +6,12 @@
  • {{ filename }} @@ -27,7 +32,7 @@ export default { name: 'CommitDetailsFiles', setup() { const { getDiffCommit, commitDetails } = useGit(); - const { shaCommit, isFileDetailsOpened } = useGitView(); + const { shaCommit, isFileDetailsOpened, fileName } = useGitView(); const recap = computed(() => commitDetails.value.recap); const files = computed(() => commitDetails.value.files); @@ -61,6 +66,7 @@ export default { getDiffCommit, formatStat, isFileDetailsOpened, + fileName, }; }, }; diff --git a/src/modules/GitView/composables/useGitView.js b/src/modules/GitView/composables/useGitView.js index e6362c1..1577b25 100644 --- a/src/modules/GitView/composables/useGitView.js +++ b/src/modules/GitView/composables/useGitView.js @@ -4,10 +4,12 @@ const isDetailsOpened = ref(false); const isFileDetailsOpened = ref(false); const shaCommit = ref(''); const prevShaCommit = ref(''); +const fileName = ref(''); export const useGitView = () => ({ isDetailsOpened, isFileDetailsOpened, shaCommit, prevShaCommit, + fileName, }); diff --git a/src/services/gitReader.js b/src/services/gitReader.js index 1b08a66..f4626f1 100644 --- a/src/services/gitReader.js +++ b/src/services/gitReader.js @@ -101,6 +101,14 @@ export default class GitReader { return this.commitStatParser(commandResponse); } + async getFileDetails(path, commit, prevCommit, fileName) { + const commandResponse = await this.execGit( + path, + `git diff ${commit} ${prevCommit} ${fileName}` + ); + return this.fileDetailsParser(commandResponse); + } + commitStatParser(commitDetails) { const list = commitDetails .trim() @@ -124,8 +132,8 @@ export default class GitReader { }; } - commitDetailsParser(commitDetails) { - const allResultCommandLine = commitDetails; + fileDetailsParser(fileDetails) { + const allResultCommandLine = fileDetails; const allLinesSplited = allResultCommandLine.split('\n'); @@ -161,6 +169,6 @@ export default class GitReader { } } - return allFiles; + return allFiles[0]; } } diff --git a/utils/constants.js b/utils/constants.js index 27476a2..d0072b2 100644 --- a/utils/constants.js +++ b/utils/constants.js @@ -12,4 +12,6 @@ module.exports = { GET_GIT_LOGS_BY_OFFSET_REPLY: 'getGitLogsByOffset-reply', GET_GIT_DIFF_EVENT: 'getGitDiff-event', GET_GIT_DIFF_REPLY: 'getGitDiff-reply', + GET_FILE_DETAILS_EVENT: 'getFileDetails-event', + GET_FILE_DETAILS_REPLY: 'getFileDetails-reply', }; From f7ef09b1d34d14cf090c07988f97ddce3d89a5b8 Mon Sep 17 00:00:00 2001 From: Lahaxe Hugo Date: Fri, 4 Mar 2022 17:49:39 +0100 Subject: [PATCH 04/11] feat: start of file display --- docs/style.css | 5 +++++ .../GitView/components/CommitDetailsFile.vue | 18 ++++++++++++++++-- src/modules/GitView/components/CommitModal.vue | 5 ++++- src/services/gitReader.js | 1 + 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/docs/style.css b/docs/style.css index aabaa70..3af5eab 100644 --- a/docs/style.css +++ b/docs/style.css @@ -641,6 +641,11 @@ Ensure the default browser behavior of the `hidden` attribute. background-color: rgb(34 197 94 / var(--tw-bg-opacity)); } +.bg-gray-200 { + --tw-bg-opacity: 1; + background-color: rgb(229 231 235 / var(--tw-bg-opacity)); +} + .px-5 { padding-left: 1.25rem; padding-right: 1.25rem; diff --git a/src/modules/GitView/components/CommitDetailsFile.vue b/src/modules/GitView/components/CommitDetailsFile.vue index ff116e2..0d7cd80 100644 --- a/src/modules/GitView/components/CommitDetailsFile.vue +++ b/src/modules/GitView/components/CommitDetailsFile.vue @@ -1,11 +1,15 @@ diff --git a/src/modules/GitView/components/CommitModal.vue b/src/modules/GitView/components/CommitModal.vue index 8b17ab9..e9e6515 100644 --- a/src/modules/GitView/components/CommitModal.vue +++ b/src/modules/GitView/components/CommitModal.vue @@ -19,6 +19,7 @@ isDetailsOpened = true; shaCommit = sha; prevShaCommit = prevSha; + isFileDetailsOpened = false; } " class="mb-4 mt-4" @@ -57,7 +58,8 @@ export default { setup(props, { emit }) { const { checkoutCommit } = useGit(); - const { isDetailsOpened, shaCommit, prevShaCommit } = useGitView(); + const { isDetailsOpened, shaCommit, prevShaCommit, isFileDetailsOpened } = + useGitView(); const author = computed(() => props.commit.author); const message = computed(() => props.commit.message); @@ -77,6 +79,7 @@ export default { checkoutCommit, modalContainer, isDetailsOpened, + isFileDetailsOpened, shaCommit, prevShaCommit, }; diff --git a/src/services/gitReader.js b/src/services/gitReader.js index f4626f1..9bb5e15 100644 --- a/src/services/gitReader.js +++ b/src/services/gitReader.js @@ -133,6 +133,7 @@ export default class GitReader { } fileDetailsParser(fileDetails) { + // TODO: fix edge case when parsing himself 2ddaa65 const allResultCommandLine = fileDetails; const allLinesSplited = allResultCommandLine.split('\n'); From b9a137ecbe873ea198d2b2f6af504b538ec1f1d8 Mon Sep 17 00:00:00 2001 From: Tom Siatka Date: Fri, 4 Mar 2022 16:51:46 +0100 Subject: [PATCH 05/11] add end of line setting in .vscode folder --- .gitignore | 1 - .vscode/settings.json | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 .vscode/settings.json diff --git a/.gitignore b/.gitignore index 049cd11..0e784d7 100644 --- a/.gitignore +++ b/.gitignore @@ -16,7 +16,6 @@ pnpm-debug.log* # Editor directories and files .idea -.vscode *.suo *.ntvs* *.njsproj diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..f302814 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1 @@ +{ "files.eol": "\n" } From 33eef1d4a238e0a526e84df3b878ba22a96b8861 Mon Sep 17 00:00:00 2001 From: felixbouveret <35692793+felixbouveret@users.noreply.github.com> Date: Fri, 4 Mar 2022 16:40:57 +0100 Subject: [PATCH 06/11] Fix(core): refacto event handle (#55) --- src/composables/useGit.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/composables/useGit.js b/src/composables/useGit.js index 24f6d94..d1aa1a6 100644 --- a/src/composables/useGit.js +++ b/src/composables/useGit.js @@ -79,18 +79,14 @@ const getDiffCommit = async (commitSha, stat = true) => { ); }; -const getFileDetails = (commitSha, prevShaCommit, fileName) => { - ipcRenderer.send( +const getFileDetails = async (commitSha, prevShaCommit, fileName) => { + fileDetails.value = await ipcRenderer.invoke( 'getFileDetails-event', folderPath.value, commitSha, prevShaCommit, fileName ); - - ipcRenderer.on('getFileDetails-reply', (event, detailsList) => { - fileDetails.value = detailsList; - }); }; export const useGit = () => ({ From b806afe9fae9a1ae8fbe36351c65bca66680e8c1 Mon Sep 17 00:00:00 2001 From: Felix Date: Fri, 18 Mar 2022 13:27:31 +0100 Subject: [PATCH 07/11] Register file details event --- src/events/GitReader.event.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/events/GitReader.event.js b/src/events/GitReader.event.js index 11d8575..cd2818b 100644 --- a/src/events/GitReader.event.js +++ b/src/events/GitReader.event.js @@ -47,12 +47,14 @@ export default [ }, { name: GET_FILE_DETAILS_EVENT, - fct: () => (event, folderPath, sha, prevSha, fileName) => { - gitReader - .getFileDetails(folderPath, sha, prevSha, fileName) - .then((details) => { - event.reply(GET_FILE_DETAILS_REPLY, details); - }); + fct: async (event, folderPath, sha, prevSha, fileName) => { + const details = await gitReader.getFileDetails( + folderPath, + sha, + prevSha, + fileName + ); + return details; }, }, ]; From c71c78cb8e89aa11087ff088e4ce952361decccd Mon Sep 17 00:00:00 2001 From: Tom Siatka Date: Fri, 18 Mar 2022 14:12:01 +0100 Subject: [PATCH 08/11] fixes --- src/modules/GitView/components/CommitDetailsFile.vue | 2 +- src/modules/GitView/components/CommitModal.vue | 1 - src/modules/GitView/components/CommitView.vue | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/modules/GitView/components/CommitDetailsFile.vue b/src/modules/GitView/components/CommitDetailsFile.vue index 0d7cd80..e2ea129 100644 --- a/src/modules/GitView/components/CommitDetailsFile.vue +++ b/src/modules/GitView/components/CommitDetailsFile.vue @@ -28,7 +28,7 @@ export default { }); watch(shaCommit, (newSha) => { - getFileDetails(newSha.value, prevShaCommit.value, fileName.value); + getFileDetails(newSha, prevShaCommit.value, fileName.value); }); watch(fileDetails, (newFileDetails) => { diff --git a/src/modules/GitView/components/CommitModal.vue b/src/modules/GitView/components/CommitModal.vue index e9e6515..979dc55 100644 --- a/src/modules/GitView/components/CommitModal.vue +++ b/src/modules/GitView/components/CommitModal.vue @@ -49,7 +49,6 @@ export default { }, prevCommit: { type: Object, - required: true, }, }, diff --git a/src/modules/GitView/components/CommitView.vue b/src/modules/GitView/components/CommitView.vue index 654f85f..47aa47c 100644 --- a/src/modules/GitView/components/CommitView.vue +++ b/src/modules/GitView/components/CommitView.vue @@ -24,7 +24,6 @@

    {{ sha }}

    -

    {{ prevSha }}

    HEAD

    From 8646b608ee89257ecd1991c0fb759c4d2c3d437f Mon Sep 17 00:00:00 2001 From: Felix Date: Fri, 18 Mar 2022 17:21:32 +0100 Subject: [PATCH 09/11] Add files details --- package.json | 7 ++- src/composables/useGit.js | 6 +- src/events/GitReader.event.js | 1 - src/main.js | 4 ++ .../GitView/components/CommitDetailsFile.vue | 61 +++++++++++++++---- src/services/gitReader.js | 45 +------------- 6 files changed, 64 insertions(+), 60 deletions(-) diff --git a/package.json b/package.json index 5715b20..80381bf 100644 --- a/package.json +++ b/package.json @@ -22,13 +22,16 @@ "dependencies": { "@vueuse/core": "^7.5.3", "core-js": "^3.6.5", - "localforage": "^1.10.0", "electron-log": "^4.4.4", "electron-simple-updater": "^2.0.11", "electron-updater": "^4.6.1", + "gitdiff-parser": "^0.2.2", + "localforage": "^1.10.0", "update-electron-app": "^2.0.1", "vue": "^3.0.0", - "vue-router": "^4.0.12" + "vue-highlightjs": "^1.3.3", + "vue-router": "^4.0.12", + "vue3-highlightjs": "^1.0.5" }, "devDependencies": { "@vue/cli-plugin-babel": "~4.5.0", diff --git a/src/composables/useGit.js b/src/composables/useGit.js index d1aa1a6..71ad371 100644 --- a/src/composables/useGit.js +++ b/src/composables/useGit.js @@ -1,4 +1,5 @@ import { ipcRenderer } from 'electron'; +import gitDiffParser from 'gitdiff-parser'; import { computed, ref } from 'vue'; import { useFolder } from './useFolder'; @@ -78,15 +79,16 @@ const getDiffCommit = async (commitSha, stat = true) => { stat ); }; - const getFileDetails = async (commitSha, prevShaCommit, fileName) => { - fileDetails.value = await ipcRenderer.invoke( + const data = await ipcRenderer.invoke( 'getFileDetails-event', folderPath.value, commitSha, prevShaCommit, fileName ); + + fileDetails.value = gitDiffParser.parse(data); }; export const useGit = () => ({ diff --git a/src/events/GitReader.event.js b/src/events/GitReader.event.js index cd2818b..d624c1c 100644 --- a/src/events/GitReader.event.js +++ b/src/events/GitReader.event.js @@ -1,6 +1,5 @@ import { GET_FILE_DETAILS_EVENT, - GET_FILE_DETAILS_REPLY, GET_GIT_BRANCHS_EVENT, GET_GIT_BRANCHS_INFO_EVENT, GET_GIT_DIFF_EVENT, diff --git a/src/main.js b/src/main.js index 556aa6b..f18e55c 100644 --- a/src/main.js +++ b/src/main.js @@ -1,4 +1,7 @@ +import 'highlight.js/styles/default.css'; + import { createApp } from 'vue'; +import VueHighlightJS from 'vue3-highlightjs'; import DsButton from '@/components/DsButton.vue'; @@ -8,4 +11,5 @@ import router from './router'; const app = createApp(App); app.component('DsButton', DsButton); app.use(router); +app.use(VueHighlightJS); app.mount('#app'); diff --git a/src/modules/GitView/components/CommitDetailsFile.vue b/src/modules/GitView/components/CommitDetailsFile.vue index e2ea129..a75d9b9 100644 --- a/src/modules/GitView/components/CommitDetailsFile.vue +++ b/src/modules/GitView/components/CommitDetailsFile.vue @@ -1,15 +1,57 @@