chiark / gitweb /
invoke: less drivel
[version-charset-test.git] / check
1 #!/bin/bash
2 set -e
3 set -o pipefail
4
5 cpus='0 1'
6
7 uid=`id -u`
8 cd /var/run/user/$uid
9 mkdir -p version-charset-test
10 cd version-charset-test
11
12 stunt=stunt$1
13 rm -rf $stunt
14 mkdir $stunt
15 cd $stunt
16
17 for cpu in $cpus; do
18         mkdir c$cpu
19         (cd c$cpu
20          git init -q)
21 done
22
23 #exec 3<&0 </dev/null
24
25 #git commit --allow-empty -m 'Test object'
26 #head=`git rev-parse HEAD`
27
28 #exec <&3 3<&-
29
30 perl -we '
31     use strict;
32
33     our $file;
34     our $count;
35     our $batch=0;
36     our $total=0;
37     our @tasks;
38
39     my @freecpus = qw('"$cpus"');
40
41     print STDERR "check using cpus @freecpus\n";
42
43     sub await_task () {
44         my ($pid, $cpu, $oldbatch) = @{ shift @tasks };
45         waitpid $pid, 0 == $pid or die $!;
46         die "$oldbatch $?" if $?;
47         unlink "b$oldbatch" or die "$oldbatch $!";
48 #        print STDERR "check completed $oldbatch [$pid] #$cpu\n";
49         push @freecpus, $cpu;
50     }
51
52     sub complete_batch () {
53         return unless $file;
54
55         close $file or die $!;
56
57 #        print STDERR "check closing $batch ($count)\n";
58
59         await_task unless @freecpus;
60
61         my $cpu = shift @freecpus;
62
63         my $pid = fork // die $!;
64         if (!$pid) {
65             close STDIN;
66 #            seek STDIN,0,1;
67 #            flush STDIN;
68             open STDIN, "<", "b$batch" or die $batch;
69             chdir "c$cpu" or die "$cpu $!";
70             exec qw(eatmydata git update-ref --stdin);
71             die $!;
72         }
73 #        print STDERR "check spawned $batch ($count) [$pid] #$cpu\n";
74         push @tasks, [ $pid, $cpu, $batch ];
75         $batch++;
76         $file = undef;
77         $total += $count;
78         $count = 0;
79     }
80
81     while (<>) {
82 #print STDERR ">$_<\n";
83         $file ||= new IO::File "b$batch", ">" or die $!;
84         chomp;
85         print $file "delete refs/tags/$_\n" or die $!;
86         $count++ < 1000 or complete_batch;
87     }
88 #print STDERR "FOO\n";
89     STDIN->error and die $!;
90     complete_batch();
91     await_task while @tasks;
92     print STDERR "check exiting (total=$total)\n";
93 '