2
2
3
3
set -eu
4
4
5
+ function get_diff() {
6
+ base=" $1 "
7
+ sha=" $2 "
8
+ filter=" $3 "
9
+ while IFS=' ' read -r sub; do
10
+ sub_commit_pre=" $( git diff " $base " " $sha " -- " $sub " | grep ' ^[-]Subproject commit' | sed ' s/[-]Subproject commit //' ) "
11
+ sub_commit_cur=" $( git diff " $base " " $sha " -- " $sub " | grep ' ^[+]Subproject commit' | sed ' s/[+]Subproject commit //' ) "
12
+ if [ -n " $sub_commit_cur " ]; then
13
+ (
14
+ cd " $sub " && (
15
+ # the strange magic number is a hardcoded "empty tree" commit sha
16
+ get_diff " ${sub_commit_pre:- 4b825dc642cb6eb9a060e54bf8d69288fbee4904} " " ${sub_commit_cur} " " $filter " | sed " s#^#$sub /#"
17
+ )
18
+ )
19
+ fi
20
+ done < <( git submodule | awk ' {print $2}' )
21
+ git diff --diff-filter=" $filter " --name-only --ignore-submodules=all " $base " " $sha "
22
+ }
23
+
5
24
echo " ::group::changed-files"
6
25
7
26
echo " Resolving repository path..."
@@ -20,34 +39,34 @@ echo "Retrieving changes between $INPUT_PREVIOUS_SHA ($INPUT_TARGET_BRANCH) →
20
39
echo " Getting diff..."
21
40
22
41
if [[ -z " $INPUT_FILES_PATTERN " ]]; then
23
- ADDED=$( git diff --submodule=diff --diff-filter=A --name-only " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " | awk -v d=" $INPUT_SEPARATOR " ' {s=(NR==1?s:s d)$0}END{print s}' )
24
- COPIED=$( git diff --submodule=diff --diff-filter=C --name-only " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " | awk -v d=" $INPUT_SEPARATOR " ' {s=(NR==1?s:s d)$0}END{print s}' )
25
- DELETED=$( git diff --submodule=diff --diff-filter=D --name-only " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " | awk -v d=" $INPUT_SEPARATOR " ' {s=(NR==1?s:s d)$0}END{print s}' )
26
- MODIFIED=$( git diff --submodule=diff --diff-filter=M --name-only " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " | awk -v d=" $INPUT_SEPARATOR " ' {s=(NR==1?s:s d)$0}END{print s}' )
27
- RENAMED=$( git diff --submodule=diff --diff-filter=R --name-only " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " | awk -v d=" $INPUT_SEPARATOR " ' {s=(NR==1?s:s d)$0}END{print s}' )
28
- TYPE_CHANGED=$( git diff --submodule=diff --diff-filter=T --name-only " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " | awk -v d=" $INPUT_SEPARATOR " ' {s=(NR==1?s:s d)$0}END{print s}' )
29
- UNMERGED=$( git diff --submodule=diff --diff-filter=U --name-only " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " | awk -v d=" $INPUT_SEPARATOR " ' {s=(NR==1?s:s d)$0}END{print s}' )
30
- UNKNOWN=$( git diff --submodule=diff --diff-filter=X --name-only " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " | awk -v d=" $INPUT_SEPARATOR " ' {s=(NR==1?s:s d)$0}END{print s}' )
31
- ALL_CHANGED_AND_MODIFIED=$( git diff --submodule=diff --diff-filter= " *ACDMRTUX " --name-only " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " | awk -v d=" $INPUT_SEPARATOR " ' {s=(NR==1?s:s d)$0}END{print s}' )
32
- ALL_CHANGED=$( git diff --submodule=diff --diff-filter= " ACMR " --name-only " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " | awk -v d=" $INPUT_SEPARATOR " ' {s=(NR==1?s:s d)$0}END{print s}' )
33
- ALL_MODIFIED=$( git diff --submodule=diff --diff-filter= " ACMRD " --name-only " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " | awk -v d=" $INPUT_SEPARATOR " ' {s=(NR==1?s:s d)$0}END{print s}' )
42
+ ADDED=$( get_diff " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " A | awk -v d=" $INPUT_SEPARATOR " ' {s=(NR==1?s:s d)$0}END{print s}' )
43
+ COPIED=$( get_diff " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " C | awk -v d=" $INPUT_SEPARATOR " ' {s=(NR==1?s:s d)$0}END{print s}' )
44
+ DELETED=$( get_diff " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " D | awk -v d=" $INPUT_SEPARATOR " ' {s=(NR==1?s:s d)$0}END{print s}' )
45
+ MODIFIED=$( get_diff " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " M | awk -v d=" $INPUT_SEPARATOR " ' {s=(NR==1?s:s d)$0}END{print s}' )
46
+ RENAMED=$( get_diff " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " R | awk -v d=" $INPUT_SEPARATOR " ' {s=(NR==1?s:s d)$0}END{print s}' )
47
+ TYPE_CHANGED=$( get_diff " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " T | awk -v d=" $INPUT_SEPARATOR " ' {s=(NR==1?s:s d)$0}END{print s}' )
48
+ UNMERGED=$( get_diff " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " U | awk -v d=" $INPUT_SEPARATOR " ' {s=(NR==1?s:s d)$0}END{print s}' )
49
+ UNKNOWN=$( get_diff " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " X | awk -v d=" $INPUT_SEPARATOR " ' {s=(NR==1?s:s d)$0}END{print s}' )
50
+ ALL_CHANGED_AND_MODIFIED=$( get_diff " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " " *ACDMRTUX " | awk -v d=" $INPUT_SEPARATOR " ' {s=(NR==1?s:s d)$0}END{print s}' )
51
+ ALL_CHANGED=$( get_diff " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " " ACMR " | awk -v d=" $INPUT_SEPARATOR " ' {s=(NR==1?s:s d)$0}END{print s}' )
52
+ ALL_MODIFIED=$( get_diff " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " " ACMRD " | awk -v d=" $INPUT_SEPARATOR " ' {s=(NR==1?s:s d)$0}END{print s}' )
34
53
else
35
54
echo " Input files pattern: $INPUT_FILES_PATTERN "
36
55
FILES_PATTERN=" ^($INPUT_FILES_PATTERN )$"
37
56
38
- ADDED=$( git diff --submodule=diff --diff-filter=A --name-only " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " | grep -E " $FILES_PATTERN " | awk -v d=" |" ' {s=(NR==1?s:s d)$0}END{print s}' )
39
- COPIED=$( git diff --submodule=diff --diff-filter=C --name-only " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " | grep -E " $FILES_PATTERN " | awk -v d=" |" ' {s=(NR==1?s:s d)$0}END{print s}' )
40
- DELETED=$( git diff --submodule=diff --diff-filter=D --name-only " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " | grep -E " $FILES_PATTERN " | awk -v d=" |" ' {s=(NR==1?s:s d)$0}END{print s}' )
41
- MODIFIED=$( git diff --submodule=diff --diff-filter=M --name-only " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " | grep -E " $FILES_PATTERN " | awk -v d=" |" ' {s=(NR==1?s:s d)$0}END{print s}' )
42
- RENAMED=$( git diff --submodule=diff --diff-filter=R --name-only " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " | grep -E " $FILES_PATTERN " | awk -v d=" |" ' {s=(NR==1?s:s d)$0}END{print s}' )
43
- TYPE_CHANGED=$( git diff --submodule=diff --diff-filter=T --name-only " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " | grep -E " $FILES_PATTERN " | awk -v d=" |" ' {s=(NR==1?s:s d)$0}END{print s}' )
44
- UNMERGED=$( git diff --submodule=diff --diff-filter=U --name-only " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " | grep -E " $FILES_PATTERN " | awk -v d=" |" ' {s=(NR==1?s:s d)$0}END{print s}' )
45
- UNKNOWN=$( git diff --submodule=diff --diff-filter=X --name-only " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " | grep -E " $FILES_PATTERN " | awk -v d=" |" ' {s=(NR==1?s:s d)$0}END{print s}' )
46
- ALL_CHANGED_AND_MODIFIED=$( git diff --submodule=diff --diff-filter= " *ACDMRTUX " --name-only " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " | grep -E " $FILES_PATTERN " | awk -v d=" |" ' {s=(NR==1?s:s d)$0}END{print s}' )
47
- ALL_CHANGED=$( git diff --submodule=diff --diff-filter= " ACMR " --name-only " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " | grep -E " $FILES_PATTERN " | awk -v d=" |" ' {s=(NR==1?s:s d)$0}END{print s}' )
48
- ALL_MODIFIED=$( git diff --submodule=diff --diff-filter= " ACMRD " --name-only " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " | grep -E " $FILES_PATTERN " | awk -v d=" |" ' {s=(NR==1?s:s d)$0}END{print s}' )
49
-
50
- ALL_OTHER_CHANGED=$( git diff --submodule=diff --diff-filter= " ACMR " --name-only " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " | awk -v d=" |" ' {s=(NR==1?s:s d)$0}END{print s}' )
57
+ ADDED=$( get_diff " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " A | grep -E " $FILES_PATTERN " | awk -v d=" |" ' {s=(NR==1?s:s d)$0}END{print s}' )
58
+ COPIED=$( get_diff " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " C | grep -E " $FILES_PATTERN " | awk -v d=" |" ' {s=(NR==1?s:s d)$0}END{print s}' )
59
+ DELETED=$( get_diff " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " D | grep -E " $FILES_PATTERN " | awk -v d=" |" ' {s=(NR==1?s:s d)$0}END{print s}' )
60
+ MODIFIED=$( get_diff " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " M | grep -E " $FILES_PATTERN " | awk -v d=" |" ' {s=(NR==1?s:s d)$0}END{print s}' )
61
+ RENAMED=$( get_diff " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " R | grep -E " $FILES_PATTERN " | awk -v d=" |" ' {s=(NR==1?s:s d)$0}END{print s}' )
62
+ TYPE_CHANGED=$( get_diff " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " T | grep -E " $FILES_PATTERN " | awk -v d=" |" ' {s=(NR==1?s:s d)$0}END{print s}' )
63
+ UNMERGED=$( get_diff " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " U | grep -E " $FILES_PATTERN " | awk -v d=" |" ' {s=(NR==1?s:s d)$0}END{print s}' )
64
+ UNKNOWN=$( get_diff " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " X | grep -E " $FILES_PATTERN " | awk -v d=" |" ' {s=(NR==1?s:s d)$0}END{print s}' )
65
+ ALL_CHANGED_AND_MODIFIED=$( get_diff " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " " *ACDMRTUX " | grep -E " $FILES_PATTERN " | awk -v d=" |" ' {s=(NR==1?s:s d)$0}END{print s}' )
66
+ ALL_CHANGED=$( get_diff " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " " ACMR " | grep -E " $FILES_PATTERN " | awk -v d=" |" ' {s=(NR==1?s:s d)$0}END{print s}' )
67
+ ALL_MODIFIED=$( get_diff " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " " ACMRD " | grep -E " $FILES_PATTERN " | awk -v d=" |" ' {s=(NR==1?s:s d)$0}END{print s}' )
68
+
69
+ ALL_OTHER_CHANGED=$( get_diff " $INPUT_PREVIOUS_SHA " " $INPUT_CURRENT_SHA " " ACMR " | awk -v d=" |" ' {s=(NR==1?s:s d)$0}END{print s}' )
51
70
UNIQUE_ALL_CHANGED=$( echo " ${ALL_CHANGED} " | awk ' {gsub(/\|/,"\n"); print $0;}' | awk ' !a[$0]++' | awk -v d=" |" ' {s=(NR==1?s:s d)$0}END{print s}' )
52
71
53
72
if [[ -n " ${UNIQUE_ALL_CHANGED} " ]]; then
0 commit comments