-
-
Notifications
You must be signed in to change notification settings - Fork 71
/
regen-modules
executable file
·68 lines (62 loc) · 2.2 KB
/
regen-modules
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
#!/usr/bin/env perl
#
# InspIRCd -- Internet Relay Chat Daemon
#
# Copyright (C) 2013-2019 Sadie Powell <sadie@witchery.services>
#
# This file is part of InspIRCd. InspIRCd is free software: you can
# redistribute it and/or modify it under the terms of the GNU General Public
# License as published by the Free Software Foundation, version 2.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
use v5.10.0;
use strict;
use warnings FATAL => qw(all);
use File::Basename qw(basename dirname);
use constant RM_BASE_URL => $ENV{RM_BASE_URL} // 'https://raw.githubusercontent.com/inspircd/inspircd-contrib';
use constant RM_EOL => '1-2';
use constant RM_EXCLUDE => qw(1.1 1.2 2.0);
if (system 'git --version > /dev/null 2>&1') {
say 'Error: Git is not installed and available in the PATH!';
exit 1;
}
open(my $list, '>', 'modules.lst');
say $list "module update-your-server 0.0.0 https://404.example.com";
say $list " depends core ${\RM_EOL}";
say $list " description The version of InspIRCd you are using is EOL. Please upgrade!";
for my $file (<*/*.cpp>) {
if (system "git ls-files --error-unmatch -- $file > /dev/null 2>&1") {
say STDERR "Skipping $file which is not in Git!";
next;
}
my $branch = dirname($file);
next if grep { $_ eq $branch } RM_EXCLUDE;
my $name = basename($file, '.cpp');
chomp(my $revision = `git rev-list HEAD --max-count=1 -- $file`);
chomp(my $version = `git rev-list $revision | wc -l`);
$version =~ s/\s//g;
say $list "module $name $branch.$version ${\RM_BASE_URL}/$revision/$file";
open(my $module, $file);
while (<$module>) {
if ($_ =~ /^\/\/\/ \$(\S+): (.+)/) {
if ($1 eq 'ModDepends') {
say $list " depends $2";
} elsif ($1 eq 'ModConflicts') {
say $list " conflicts $2";
} elsif ($1 eq 'ModDesc') {
say $list " description $2";
} elsif ($1 eq 'ModMask') {
say $list " mask $2";
}
}
}
close($module);
}
close($list);