Skip to content

Commit 1c60369

Browse files
authored
Merge pull request #29 from LuisLiraC/chore/tests-mod
Chore/tests mod
2 parents afbd776 + 4e24cbe commit 1c60369

File tree

9 files changed

+221
-158
lines changed

9 files changed

+221
-158
lines changed

.github/workflows/clippy.yaml

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
name: Clippy Test
2+
3+
on:
4+
pull_request:
5+
6+
7+
jobs:
8+
git-diff:
9+
runs-on: ubuntu-latest
10+
name: 'Git Diff - Powered by Rust'
11+
outputs:
12+
DIFF_FILES: ${{ steps.git-diff.outputs.DIFF_FILES }}
13+
DIFF_COUNT: ${{ steps.git-diff.outputs.DIFF_COUNT }}
14+
steps:
15+
- uses: actions/checkout@v4
16+
- uses: LuisLiraC/[email protected]
17+
id: git-diff
18+
with:
19+
patterns: '*.rs'
20+
21+
clippy-test:
22+
runs-on: ubuntu-latest
23+
needs: [git-diff]
24+
if: ${{ needs.git-diff.outputs.DIFF_COUNT != 0 }}
25+
name: Run Tests
26+
steps:
27+
- uses: actions/checkout@v4
28+
29+
- name: Cache cargo registry
30+
uses: actions/cache@v4
31+
with:
32+
path: ~/.cargo/registry
33+
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
34+
restore-keys: |
35+
${{ runner.os }}-cargo-registry-
36+
37+
- name: Cache cargo index
38+
uses: actions/cache@v4
39+
with:
40+
path: ~/.cargo/git
41+
key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
42+
restore-keys: |
43+
${{ runner.os }}-cargo-index-
44+
45+
- name: Cache cargo build
46+
uses: actions/cache@v4
47+
with:
48+
path: target
49+
key: ${{ runner.os }}-cargo-build-${{ hashFiles('**/Cargo.lock') }}
50+
restore-keys: |
51+
${{ runner.os }}-cargo-build-
52+
53+
- name: Run Tests
54+
run: cargo clippy --color always -- -Dwarnings -W clippy::pedantic

.github/workflows/prerelease.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ jobs:
4040
${{ runner.os }}-cargo-build-
4141
4242
- name: Build
43-
run: cargo build --release
43+
run: cargo build --release --color always
4444

4545
- name: Create Archive Folder
4646
run: mkdir ${{ runner.os }}

.github/workflows/release.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ jobs:
4040
${{ runner.os }}-cargo-build-
4141
4242
- name: Build
43-
run: cargo build --release
43+
run: cargo build --release --color always
4444

4545
- name: Create Archive Folder
4646
run: mkdir ${{ runner.os }}

.github/workflows/test.yaml

+16-1
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,23 @@ on:
55

66

77
jobs:
8+
git-diff:
9+
runs-on: ubuntu-latest
10+
name: 'Git Diff - Powered by Rust'
11+
outputs:
12+
DIFF_FILES: ${{ steps.git-diff.outputs.DIFF_FILES }}
13+
DIFF_COUNT: ${{ steps.git-diff.outputs.DIFF_COUNT }}
14+
steps:
15+
- uses: actions/checkout@v4
16+
- uses: LuisLiraC/[email protected]
17+
id: git-diff
18+
with:
19+
patterns: '*.rs'
20+
821
test:
922
runs-on: ubuntu-latest
23+
needs: [git-diff]
24+
if: ${{ needs.git-diff.outputs.DIFF_COUNT != 0 }}
1025
name: Run Tests
1126
steps:
1227
- uses: actions/checkout@v4
@@ -36,4 +51,4 @@ jobs:
3651
${{ runner.os }}-cargo-build-
3752
3853
- name: Run Tests
39-
run: cargo test
54+
run: cargo test --color always

action.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ runs:
2020
- name: Get Binary
2121
shell: bash
2222
run: |
23-
BIN_URL=$(curl https://api.github.com/repos/LuisLiraC/git-diff/releases/tags/v1.0.2 | jq -r '.assets[0].browser_download_url')
23+
BIN_URL=$(curl https://api.github.com/repos/LuisLiraC/git-diff/releases/tags/v1.0.3 | jq -r '.assets[0].browser_download_url')
2424
curl -s -L $BIN_URL -o rust-binary.tgz
2525
tar -xzvf rust-binary.tgz
2626
mv ./Linux/git-diff ./git-diff

src/main.rs

+29-29
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ fn main() {
1515
let args: Vec<String> = env::args().collect();
1616
let mut patterns_filters: Vec<PatternFilter> = Vec::new();
1717

18-
for arg in args.iter() {
18+
for arg in &args {
1919
if arg.starts_with("--patterns=") {
20-
patterns_filters = create_patterns_filters(&arg);
20+
patterns_filters = create_patterns_filters(arg);
2121
}
2222
}
2323

@@ -26,34 +26,34 @@ fn main() {
2626
return;
2727
}
2828

29-
let (include_patterns_filters, exclude_patterns_filters) = categorize_filters(patterns_filters);
29+
let (include_patterns_filters, exclude_patterns_filters) = categorize_filters(&patterns_filters);
3030

3131
let start = Instant::now();
3232
let changed_files = get_changed_files();
3333
let duration = start.elapsed();
34-
println!("Getting changed files done in: {:?}", duration);
34+
println!("Getting changed files done in: {duration:?}");
3535

36-
println!("Changed files: {:?}", changed_files);
36+
println!("Changed files: {changed_files:?}");
3737

3838
let start = Instant::now();
39-
let filtered_files = filter_files(changed_files, include_patterns_filters, exclude_patterns_filters);
39+
let filtered_files = filter_files(&changed_files, &include_patterns_filters, &exclude_patterns_filters);
4040
let duration = start.elapsed();
41-
println!("Filtering files done in: {:?}", duration);
41+
println!("Filtering files done in: {duration:?}");
4242

43-
let count = get_count(filtered_files.clone());
43+
let count = get_count(&filtered_files);
4444

45-
println!("Filtered files: {:?}", filtered_files);
46-
println!("Count: {}", count);
45+
println!("Filtered files: {filtered_files:?}");
46+
println!("Count: {count}");
4747

4848
Command::new("sh")
4949
.arg("-c")
50-
.arg(format!("echo \"DIFF_FILES={:?}\" >> $GITHUB_OUTPUT", filtered_files))
50+
.arg(format!("echo \"DIFF_FILES={filtered_files:?}\" >> $GITHUB_OUTPUT"))
5151
.output()
5252
.expect("Failed to execute DIFF_FILES command");
5353

5454
Command::new("sh")
5555
.arg("-c")
56-
.arg(format!("echo \"DIFF_COUNT={}\" >> $GITHUB_OUTPUT", count))
56+
.arg(format!("echo \"DIFF_COUNT={count}\" >> $GITHUB_OUTPUT"))
5757
.output()
5858
.expect("Failed to execute DIFF_COUNT command");
5959
}
@@ -63,9 +63,9 @@ fn create_patterns_filters(arg: &str) -> Vec<PatternFilter> {
6363
.split('=')
6464
.last()
6565
.expect("Failed to get patterns")
66-
.replace(" ", "")
67-
.replace("\n", ",")
68-
.replace("\r", "")
66+
.replace(' ', "")
67+
.replace('\n', ",")
68+
.replace('\r', "")
6969
.replace(",,", ",")
7070
.trim_end_matches(',')
7171
.to_string();
@@ -76,12 +76,12 @@ fn create_patterns_filters(arg: &str) -> Vec<PatternFilter> {
7676

7777
let mut patterns_filters: Vec<PatternFilter> = Vec::new();
7878

79-
for pattern in patterns.iter() {
79+
for pattern in &patterns {
8080
let exclude = pattern.starts_with('!');
8181
let pattern = if exclude {
8282
pattern[1..].to_string()
8383
} else {
84-
pattern.to_string()
84+
(*pattern).to_string()
8585
};
8686

8787
patterns_filters.push(PatternFilter {
@@ -104,11 +104,11 @@ fn get_changed_files() -> Vec<String> {
104104

105105
Command::new("sh")
106106
.arg("-c")
107-
.arg(format!("git fetch origin {}", base_ref_env))
107+
.arg(format!("git fetch origin {base_ref_env}"))
108108
.output()
109109
.expect("Failed to execute fetch branch command");
110110

111-
let base_ref_string = format!("refs/remotes/origin/{}", base_ref_env);
111+
let base_ref_string = format!("refs/remotes/origin/{base_ref_env}");
112112
let base_ref = repository.find_reference(&base_ref_string).expect("Failed to find default branch");
113113
let base_commit = base_ref.peel_to_commit().expect("Failed to peel default branch to commit");
114114

@@ -134,41 +134,41 @@ fn get_changed_files() -> Vec<String> {
134134
changed_files
135135
}
136136

137-
fn filter_files(changed_files: Vec<String>, include_patterns_filters: HashSet<String>, exclude_patterns_filters: HashSet<String>) -> HashSet<String> {
137+
fn filter_files(changed_files: &Vec<String>, include_patterns_filters: &HashSet<String>, exclude_patterns_filters: &HashSet<String>) -> HashSet<String> {
138138
let mut hash_set_filtered_files = HashSet::new();
139139

140-
for changed_file in changed_files.iter() {
141-
include_patterns_filters.iter().for_each(|pattern| {
140+
for changed_file in changed_files {
141+
for pattern in include_patterns_filters {
142142
if Pattern::new(pattern).expect("Failed to create pattern").matches(changed_file) {
143143
hash_set_filtered_files.insert(changed_file.to_string());
144144
}
145145

146-
exclude_patterns_filters.iter().for_each(|pattern| {
146+
for pattern in exclude_patterns_filters {
147147
if Pattern::new(pattern).expect("Failed to create pattern").matches(changed_file) {
148148
hash_set_filtered_files.remove(changed_file);
149149
}
150-
});
151-
});
150+
}
151+
}
152152
}
153153

154154
hash_set_filtered_files
155155
}
156156

157-
fn get_count(filtered_files: HashSet<String>) -> usize {
157+
fn get_count(filtered_files: &HashSet<String>) -> usize {
158158
filtered_files.len()
159159
}
160160

161-
fn categorize_filters(filters: Vec<PatternFilter>) -> (HashSet<String>, HashSet<String>) {
161+
fn categorize_filters(filters: &Vec<PatternFilter>) -> (HashSet<String>, HashSet<String>) {
162162
let mut exclude_patterns_filters: HashSet<String> = HashSet::new();
163163
let mut include_patterns_filters: HashSet<String> = HashSet::new();
164164

165-
filters.iter().for_each(|pattern_filter| {
165+
for pattern_filter in filters {
166166
if pattern_filter.exclude {
167167
exclude_patterns_filters.insert(pattern_filter.clone().pattern);
168168
} else {
169169
include_patterns_filters.insert(pattern_filter.clone().pattern);
170170
}
171-
});
171+
}
172172

173173
(include_patterns_filters, exclude_patterns_filters)
174174
}

src/tests/integration.rs

+18-21
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,29 @@
11
use crate::*;
22

33
#[cfg(test)]
4-
mod integration {
5-
use super::*;
64

7-
#[test]
8-
fn test_filter() {
9-
let arg = "--patterns=*.rs,!*..txt";
10-
let files = vec![
11-
String::from("src/main.rs"),
12-
String::from("lib.rs"),
13-
String::from("test.txt"),
14-
];
5+
#[test]
6+
fn test_filter() {
7+
let arg = "--patterns=*.rs,!*..txt";
8+
let files = vec![
9+
String::from("src/main.rs"),
10+
String::from("lib.rs"),
11+
String::from("test.txt"),
12+
];
1513

16-
let filters = create_patterns_filters(arg);
14+
let filters = create_patterns_filters(arg);
1715

18-
let (include_patterns_filters, exclude_patterns_filters) = categorize_filters(filters);
16+
let (include_patterns_filters, exclude_patterns_filters) = categorize_filters(&filters);
1917

20-
let filtered_files = filter_files(files, include_patterns_filters, exclude_patterns_filters);
18+
let filtered_files = filter_files(&files, &include_patterns_filters, &exclude_patterns_filters);
2119

22-
let count = get_count(filtered_files.clone());
20+
let count = get_count(&filtered_files);
2321

24-
let expected_filtered_files = HashSet::from([
25-
String::from("src/main.rs"),
26-
String::from("lib.rs"),
27-
]);
22+
let expected_filtered_files = HashSet::from([
23+
String::from("src/main.rs"),
24+
String::from("lib.rs"),
25+
]);
2826

29-
assert_eq!(filtered_files, expected_filtered_files);
30-
assert_eq!(count, 2);
31-
}
27+
assert_eq!(filtered_files, expected_filtered_files);
28+
assert_eq!(count, 2);
3229
}

0 commit comments

Comments
 (0)