8000 Convert the filename formatter to an action (#6) · cgb-algorithm/scripts@dee3bce · GitHub
[go: up one dir, main page]

Skip to content
< 8000 script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-94fd67-e789af5a4655.js">

Commit dee3bce

Browse files
Convert the filename formatter to an action (TheAlgorithms#6)
* action for filename formatter * Rename some file.cpp to SOME FILE.cpp * fix review comments * update name * Update test/SOME FILE.cpp Co-authored-by: David Leal <halfpacho@gmail.com> * chore: apply suggestions from code review * Apply suggestions from code review Co-authored-by: David Leal <halfpacho@gmail.com> * chore: apply suggestions from code review Co-authored-by: David Leal <halfpacho@gmail.com>
1 parent 9b24d47 commit dee3bce

File tree

6 files changed

+110
-8
lines changed

6 files changed

+110
-8
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
name: Test with ignore directory argument
2+
on: workflow_dispatch
3+
jobs:
4+
formatter:
5+
runs-on: ubuntu-latest
6+
name: Verify that the filename formatter works (ignoring directory is included)
7+
steps:
8+
- uses: actions/checkout@v3
9+
- uses: ./formatter
10+
with:
11+
filetypes: .cpp,.hpp
12+
working-directory: .
13+
ignore-files: ./test

.github/workflows/test.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
name: Test without ignore directory argument
2+
on: workflow_dispatch
3+
jobs:
4+
formatter:
5+
runs-on: ubuntu-latest
6+
name: Verify that the filename formatter works
7+
steps:
8+
- uses: actions/checkout@v3
9+
- uses: ./formatter
10+
with:
11+
filetypes: .cpp,.hpp
12+
working-directory: ./test

filename_formatter.sh

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ echo -e "Arguments:
99

1010
echo "Changed files:"
1111

12+
1213
# Separate $2 value (filename types) if it has a comma
1314
if [[ "$2" == *","* ]];
1415
then
@@ -21,10 +22,10 @@ str_value="$2"
2122
str_value2="$2"
2223
fi
2324

24-
IFS=$'\n'
25-
for fname in `find $1 -type f -name "$str_value2" -o -name "$str_value"`
25+
IFS=$'\n'; set -f
26+
for fname in $(find $1 -type f -name "*$str_value2" -or -name "*$str_value")
2627
do
27-
ignored_files="$(echo $3 | tr "," "\n")"
28+
ignored_files="$(echo "$3" | tr "," "\n")"
2829

2930
str="${fname}"
3031
value=${str%/*} # If the base directory is `.`, check in all directories for the ignored filenames
@@ -38,15 +39,16 @@ do
3839
done
3940

4041
#echo ${fname}
41-
new_fname=`echo ${fname} | tr ' ' '_'`
42+
new_fname=$(echo "${fname}" | tr ' ' '_')
4243
#echo " ${new_fname}"
43-
new_fname=`echo ${new_fname} | tr 'A-Z' 'a-z'`
44+
new_fname=$(echo "${new_fname}" | tr '[:upper:]' '[:lower:]')
4445
#echo " ${new_fname}"
45-
new_fname=`echo ${new_fname} | tr '-' '_'`
46+
new_fname=$(echo "${new_fname}" | tr '-' '_')
4647
#echo " ${new_fname}"
47-
if [ ${fname} != ${new_fname} ]
48+
if [ "${fname}" != "${new_fname}" ]
4849
then
4950
echo " ${fname} --> ${new_fname}"
50-
git "mv" "${fname}" ${new_fname} # Requires you to be in version control
51+
git "mv" "${fname}" "${new_fname}" # Requires you to be in version control
5152
fi
5253
done
54+
unset IFS; set +f

formatter/action.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
name: "Filename Formatter"
2+
description: "Format filenames into the format acceptable by TheAlgorithms opganization"
3+
author: "TheAlgorithms"
4+
inputs:
5+
filetypes:
6+
description: Filter files by specified file types (comma separated values in a string.) Maximum two values. E.g. `.cpp,.hpp`
7+
required: true
8+
working-directory:
9+
description: Working/base directory of the formatter
10+
required: false
11+
default: .
12+
ignore-files:
13+
description: Files/folders to ignored
14+
required: false
15+
runs:
16+
using: composite
17+
steps:
18+
- name: Running the formatter
19+
shell: bash
20+
run: |
21+
./filename_formatter.sh ${{ inputs.working-directory }} ${{ inputs.filetypes }} ${{ inputs.ignore-files }}

formatter/filename_formatter.sh

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#!/bin/bash
2+
3+
echo -e "Arguments:
4+
[0] - Used by Bash (script filename)
5+
[1] - Base directory
6+
[2] - Filename type (maximum two values)
7+
[3] - Ignored files or folders (optional; use "\""./<directory_name>"\"")
8+
"
9+
10+
echo "Changed files:"
11+
12+
13+
# Separate $2 value (filename types) if it has a comma
14+
if [[ "$2" == *","* ]];
15+
then
16+
string="$2"
17+
18+
str_value=${string#*,}
19+
str_value2=${string%%,*}
20+
else
21+
str_value="$2"
22+
str_value2="$2"
23+
fi
24+
25+
IFS=$'\n'; set -f
26+
for fname in $(find $1 -type f -name "*$str_value2" -or -name "*$str_value")
27+
do
28+
ignored_files="$(echo "$3" | tr "," "\n")"
29+
30+
str="${fname}"
31+
value=${str%/*} # If the base directory is `.`, check in all directories for the ignored filenames
32+
33+
for files in $ignored_files
34+
do
35+
if [ "${fname}" == "$value/$files" ] || [ "$value" == "$files" ];
36+
then
37+
continue 2
38+
fi
39+
done
40+
41+
#echo ${fname}
42+
new_fname=$(echo "${fname}" | tr ' ' '_')
43+
#echo " ${new_fname}"
44+
new_fname=$(echo "${new_fname}" | tr '[:upper:]' '[:lower:]')
45+
#echo " ${new_fname}"
46+
new_fname=$(echo "${new_fname}" | tr '-' '_')
47+
#echo " ${new_fname}"
48+
if [ "${fname}" != "${new_fname}" ]
49+
then
50+
echo " ${fname} --> ${new_fname}"
51+
fi
52+
done
53+
unset IFS; set +f

test/SOME FILE.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
// Test file to make sure the filename formatter works as excepted

0 commit comments

Comments
 (0)
0