1
+ #! /usr/bin/env bash
2
+
3
+ # Executes "GitLog" Cypher queries to get the "git-history-csv" CSV reports.
4
+ # It contains lists of files with only one author, last changed or created files, pairwise changed files,...
5
+
6
+ # Requires executeQueryFunctions.sh, cleanupAfterReportGeneration.sh
7
+
8
+ # Fail on any error ("-e" = exit on first error, "-o pipefail" exist on errors within piped commands)
9
+ set -o errexit -o pipefail
10
+
11
+ # Overrideable Constants (defaults also defined in sub scripts)
12
+ REPORTS_DIRECTORY=${REPORTS_DIRECTORY:- " reports" }
13
+
14
+ # # Get this "scripts/reports" directory if not already set
15
+ # Even if $BASH_SOURCE is made for Bourne-like shells it is also supported by others and therefore here the preferred solution.
16
+ # CDPATH reduces the scope of the cd command to potentially prevent unintended directory changes.
17
+ # This way non-standard tools like readlink aren't needed.
18
+ REPORTS_SCRIPT_DIR=${REPORTS_SCRIPT_DIR:- $( CDPATH=. cd -- " $( dirname -- " ${BASH_SOURCE[0]} " ) " && pwd -P )}
19
+ echo " GitHistoryCsv: REPORTS_SCRIPT_DIR=${REPORTS_SCRIPT_DIR} "
20
+
21
+ # Get the "scripts" directory by taking the path of this script and going one directory up.
22
+ SCRIPTS_DIR=${SCRIPTS_DIR:- " ${REPORTS_SCRIPT_DIR} /.." } # Repository directory containing the shell scripts
23
+ echo " GitHistoryCsv: SCRIPTS_DIR=${SCRIPTS_DIR} "
24
+
25
+ # Get the "cypher" directory by taking the path of this script and going two directory up and then to "cypher".
26
+ CYPHER_DIR=${CYPHER_DIR:- " ${REPORTS_SCRIPT_DIR} /../../cypher" }
27
+ echo " GitHistoryCsv: CYPHER_DIR=${CYPHER_DIR} "
28
+
29
+ # Define functions to execute cypher queries from within a given file
30
+ source " ${SCRIPTS_DIR} /executeQueryFunctions.sh"
31
+
32
+ # Create report directory
33
+ REPORT_NAME=" git-history-csv"
34
+ FULL_REPORT_DIRECTORY=" ${REPORTS_DIRECTORY} /${REPORT_NAME} "
35
+ mkdir -p " ${FULL_REPORT_DIRECTORY} "
36
+
37
+ # Local Constants
38
+ GIT_LOG_CYPHER_DIR=" ${CYPHER_DIR} /GitLog"
39
+
40
+ echo " GitHistoryCsv: $( date +' %Y-%m-%dT%H:%M:%S%z' ) Processing git history..."
41
+
42
+ # Detailed git file statistics
43
+ execute_cypher " ${GIT_LOG_CYPHER_DIR} /List_git_files_with_commit_statistics_by_author.cypher" > " ${FULL_REPORT_DIRECTORY} /List_git_files_with_commit_statistics_by_author.csv"
44
+ execute_cypher " ${GIT_LOG_CYPHER_DIR} /List_git_files_that_were_changed_together_with_another_file.cypher" > " ${FULL_REPORT_DIRECTORY} /List_git_files_that_were_changed_together_with_another_file.csv"
45
+
46
+ # Overall distribution of how many files were changed with one git commit, how many were changed with two, etc.
47
+ execute_cypher " ${GIT_LOG_CYPHER_DIR} /List_git_files_per_commit_distribution.cypher" > " ${FULL_REPORT_DIRECTORY} /List_git_files_per_commit_distribution.csv"
48
+
49
+ # Data basis for finding out if there is a correlation between pairwise changed files and their dependencies
50
+ execute_cypher " ${GIT_LOG_CYPHER_DIR} /List_pairwise_changed_files_with_dependencies.cypher" > " ${FULL_REPORT_DIRECTORY} /List_pairwise_changed_files_with_dependencies.csv"
51
+
52
+ # Clean-up after report generation. Empty reports will be deleted.
53
+ source " ${SCRIPTS_DIR} /cleanupAfterReportGeneration.sh" " ${FULL_REPORT_DIRECTORY} "
54
+
55
+ echo " GitHistoryCsv: $( date +' %Y-%m-%dT%H:%M:%S%z' ) Successfully finished."
0 commit comments