-
Notifications
You must be signed in to change notification settings - Fork 3
/
shared_fix.pl
85 lines (82 loc) · 2.66 KB
/
shared_fix.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
use strict;
use warnings;
sub handle_files {
print "Handling files\n";
my @files = @_;
my @handlers = (handle_group("Fixing typos in README",qr/\/README(\.txt|\.rtf|\.md|\.pm|\.m\w+)$/,\&check_common,\&fix_text),
handle_group("Fixing old PHP calls",qr/\.php$/,\&check_php,\&fix_php),
handle_group("Updating shell scripts",qr/\/\w(\.sh|\.bash|)$/,\&check_shell,\&fix_shell),
handle_group("Fixing deprecated django",qr/\.py$/,\&check_py,\&fix_py),
handle_group("Fixing c/c++",qr/\.c.{0,2}$/,\&check_cpp,\&fix_cpp),
handle_group("Fixing scala",qr/\.scala$/,\&check_scala,\&fix_scala),
handle_group_cmd("Fixing go formatting",qr/\.go$/,\&check_go,\&fix_go));
my $i = 0;
my @changes = ();
while ($i < $#handlers+1) {
my $r = $handlers[$i](@files);
if ($r) {
push @changes, $r;
}
$i++;
}
return @changes;
}
sub handle_group {
my $git_message = shift @_;
my $gate_regex = shift @_;
my $gate_function = shift @_;
my $fix_function = shift @_;
return sub {
print "Handling the $git_message group\n";
my $changes = 0;
my @files = @_;
foreach my $file (@files) {
if ($file !~ /\/\.git\// && $file =~ $gate_regex) {
open (my $in, "<", "$file") or die "Unable to open $file";
my $t = do { local $/ = <$in> };
close($in);
#Is there a spelling mistake?
if ($gate_function->($file, $t)) {
$fix_function->($file, $t);
}
}
}
#Determine if we have made any difference
`cd foo/*;git diff --exit-code`;
if ($? != 0) {
print "Changes for $git_message\n";
#Yup
`cd foo/*;git commit -a -m \"$git_message.\";`;
return $git_message;
} else {
print "No changes for $git_message\n";
#Nope no changes
return 0;
}
}
}
sub handle_group_cmd {
my $git_message = shift @_;
my $gate_regex = shift @_;
my $gate_function = shift @_;
my $fix_function = shift @_;
return sub {
my $changes = 0;
my @files = @_;
foreach my $file (@files) {
if ($file !~ /\/\.git\// && $file =~ $gate_regex) {
$fix_function->($file);
}
}
#Determine if we have made any difference
`cd foo/*;git diff --exit-code`;
if ($? != 0) {
#Yup
`cd foo/*;git commit -a -m \"$git_message\";`;
return 1;
}
#Nope no changes
return 0;
}
}
1;