Add sample version checking/caching script #3

Open
adamm wants to merge 1 commits from adamm/sample_version_check AGit into master
2 changed files with 3278 additions and 0 deletions

90
version_check.pl Executable file
View 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

File diff suppressed because it is too large Load Diff