chiark / gitweb /
72933711c3ad9a4a96e69b6722f89e212600c771
[version-charset-test.git] / check
1 #!/bin/bash
2 set -e
3 set -o pipefail
4
5 rm -rf stunt
6 mkdir stunt
7 cd stunt
8
9 #exec 3<&0 </dev/null
10
11 git init
12 #git commit --allow-empty -m 'Test object'
13 #head=`git rev-parse HEAD`
14
15 #exec <&3 3<&-
16
17 perl -we '
18     use strict;
19
20     our $file;
21     our $count;
22     our $batch=0;
23     our @tasks;
24
25     my $ncpus = eval {
26         require Sys::CPU;
27         Sys::CPU::cpu_count();
28     } // 3;
29
30 $ncpus=1;
31     print STDERR "check using $ncpus cpus\n";
32
33     sub await_task () {
34         my ($pid, $oldbatch) = @{ shift @tasks };
35         waitpid $pid, 0 == $pid or die $!;
36         die "$oldbatch $?" if $?;
37         unlink $oldbatch or die "$oldbatch $!";
38         print STDERR "check completed $oldbatch [$pid]\n";
39     }
40
41     sub complete_batch () {
42         return unless $file;
43
44         close $file or die $!;
45
46         print STDERR "check closing $batch ($count)\n";
47
48         await_task if @tasks >= $ncpus;
49
50         my $pid = fork // die $!;
51         if (!$pid) {
52             close STDIN;
53 #            seek STDIN,0,1;
54 #            flush STDIN;
55             open STDIN, "<", $batch or die $batch;
56             exec qw(git update-ref --stdin);
57             die $!;
58         }
59         print STDERR "check spawned $batch ($count) [$pid]\n";
60         push @tasks, [ $pid, $batch ];
61         $batch++;
62         $file = undef;
63         $count = 0;
64     }
65
66     while (<>) {
67 #print STDERR ">$_<\n";
68         $file ||= new IO::File $batch, ">" or die $!;
69         chomp;
70         print $file "delete refs/tags/$_\n" or die $!;
71         $count++ < 100000 or complete_batch;
72     }
73 #print STDERR "FOO\n";
74     STDIN->error and die $!;
75     complete_batch();
76     await_task while @tasks;
77 '