Add sample version checking/caching script #3
90
version_check.pl
Executable file
90
version_check.pl
Executable file
@@ -0,0 +1,90 @@
|
|||||||
|
#!/usr/bin/perl
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
my %versions;
|
||||||
|
|
||||||
|
sub ReadCurrentMapping {
|
||||||
|
if (!-f "versions.map") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
open my $fh, '<', "versions.map" or return;
|
||||||
|
while (<$fh>) {
|
||||||
|
chomp;
|
||||||
|
my ($k, $v) = split ' ', $_, 2;
|
||||||
|
$versions{$k} = $v if defined $k && defined $v;
|
||||||
|
}
|
||||||
|
close $fh;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub WriteCurrentMapping {
|
||||||
|
open my $fh, '>', "versions.map" or die $!;
|
||||||
|
for my $key (sort keys %versions) {
|
||||||
|
print $fh "$key $versions{$key}\n";
|
||||||
|
}
|
||||||
|
close $fh;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub UpdateUnknownVersion {
|
||||||
|
my ($p, $h) = @_;
|
||||||
|
if (defined $versions{$h} && $versions{$h} ne '') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
print "Updating version for $p\n";
|
||||||
|
system("GIT_LFS_SKIP_SMUDGE=1 git submodule update --init $p");
|
||||||
|
my $spec = "$p/$p.spec";
|
||||||
|
my $v = "";
|
||||||
|
if (open my $fh, '<', $spec) {
|
||||||
|
while (<$fh>) {
|
||||||
|
if (/^Version:\s+(\S+)/) {
|
||||||
|
$v = $1;
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close $fh;
|
||||||
|
}
|
||||||
|
print "Version: $v\n";
|
||||||
|
$versions{$h} = $v;
|
||||||
|
system("GIT_LFS_SKIP_SMUDGE=1 git submodule deinit $p");
|
||||||
|
}
|
||||||
|
|
||||||
|
ReadCurrentMapping();
|
||||||
|
|
||||||
|
if (@ARGV) {
|
||||||
|
my $target = $ARGV[0];
|
||||||
|
open my $fh, "-|", "git ls-tree HEAD" or die $!;
|
||||||
|
|
||||||
|
loop:
|
||||||
|
while (<$fh>) {
|
||||||
|
if (/^160000 commit\s+(\S+)\s+(\S+)/) {
|
||||||
|
my ($commitid, $package) = ($1, $2);
|
||||||
|
if ($package eq $target) {
|
||||||
|
if (exists $versions{$commitid}) {
|
||||||
|
print "$package $versions{$commitid}\n";
|
||||||
|
} else {
|
||||||
|
UpdateUnknownVersion($package, $commitid);
|
||||||
|
print "$package $versions{$commitid}\n";
|
||||||
|
}
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close $fh;
|
||||||
|
} else {
|
||||||
|
open my $fh, "-|", "git ls-tree HEAD" or die $!;
|
||||||
|
my $count = 0;
|
||||||
|
while (<$fh>) {
|
||||||
|
if (/^160000 commit\s+(\S+)\s+(\S+)/) {
|
||||||
|
my $commitid = $1;
|
||||||
|
my $package = $2;
|
||||||
|
UpdateUnknownVersion($package, $commitid);
|
||||||
|
print "$commitid $package\n";
|
||||||
|
#$count++;
|
||||||
|
#last if $count > 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close $fh;
|
||||||
|
}
|
||||||
|
|
||||||
|
WriteCurrentMapping();
|
||||||
|
|
3188
versions.map
Normal file
3188
versions.map
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user