Skip to content

Commit 2e2b01b

Browse files
authored
Flatten directory prerequisites for hash (#5)
1 parent 47624bc commit 2e2b01b

4 files changed

Lines changed: 29 additions & 5 deletions

File tree

.github/workflows/ci.yml

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
uses: ./
1818
with:
1919
working-directory: test
20-
target: test
20+
target: test1
2121
- name: Check non-recursive prerequisites
2222
run: |
2323
test "${{ steps.non-recursive-prerequisites.outputs.prerequisites }}" = "prereq"
@@ -27,9 +27,20 @@ jobs:
2727
uses: ./
2828
with:
2929
working-directory: test
30-
target: test
30+
target: test1
3131
flags: --recursive
3232
- name: Check recursive prerequisites
3333
run: |
3434
test "${{ steps.recursive-prerequisites.outputs.prerequisites }}" = "preprereq1 preprereq2"
3535
echo ${{ steps.recursive-prerequisites.outputs.hash }}
36+
- name: Hash directory prerequisite
37+
id: hash-dir-prerequisite
38+
uses: ./
39+
with:
40+
working-directory: test
41+
target: test2
42+
flags: --recursive
43+
- name: Check directory prerequisite hash
44+
run: |
45+
test "${{ steps.hash-dir-prerequisite.outputs.prerequisites }}" = "dirprereq"
46+
test "${{ steps.hash-dir-prerequisite.outputs.hash }}" = "c64a77871513eadd52ec0e278bfbac1db866b77f66ebe91725b378b8bf43e29c"

list-make-prerequisites.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from anytree import Node, RenderTree
66
import argparse
77
import hashlib
8+
from pathlib import Path
89
import re
910
import subprocess
1011
import sys
@@ -137,9 +138,18 @@ def hash_files(file_list):
137138
# Create a new SHA-256 hash object
138139
hasher = hashlib.sha256()
139140

141+
# If any prerequisite is a directory, replace it with its (recursive) contents
142+
expanded_file_list = []
140143
for file_name in file_list:
141-
# Open each file in binary mode
142-
try:
144+
file = Path(file_name)
145+
if file.is_dir():
146+
expanded_file_list.extend([str(f) for f in file.rglob('*') if f.is_file()])
147+
else:
148+
expanded_file_list.append(file_name)
149+
150+
# Hash file contents
151+
for file_name in expanded_file_list:
152+
try:
143153
with open(file_name, 'rb') as f:
144154
# Read the file content in chunks to avoid memory issues with large files
145155
while chunk := f.read(8192): # 8192 bytes per chunk

test/Makefile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
test: prereq
1+
test1: prereq
22
cp $< $@
33

44
prereq: preprereq1 preprereq2
55
cp $< $@
66
cat preprereq2 >> $@
7+
8+
test2: dirprereq

test/dirprereq/dir/prereq.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
prereq

0 commit comments

Comments
 (0)