contrib: remove continuous/ and patches/

They haven't been touched in six years. Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Ramkumar Ramachandra committed Jun 3, 2013 at 01:44 UTC 9721ac90106e1f6c86a2f18d92fc262fe1ffbffc
3 files changed -628
contrib/continuous/cidaemon deleted
-503
@@ -1,503 +0,0 @@
1 -#!/usr/bin/perl
2 -#
3 -# A daemon that waits for update events sent by its companion
4 -# post-receive-cinotify hook, checks out a new copy of source,
5 -# compiles it, and emails the guilty parties if the compile
6 -# (and optionally test suite) fails.
7 -#
8 -# To use this daemon, configure it and run it. It will disconnect
9 -# from your terminal and fork into the background. The daemon must
10 -# have local filesystem access to the source repositories, as it
11 -# uses objects/info/alternates to avoid copying objects.
12 -#
13 -# Add its companion post-receive-cinotify hook as the post-receive
14 -# hook to each repository that the daemon should monitor. Yes, a
15 -# single daemon can monitor more than one repository.
16 -#
17 -# To use multiple daemons on the same system, give them each a
18 -# unique queue file and tmpdir.
19 -#
20 -# Global Config
21 -# -------------
22 -# Reads from a Git style configuration file. This will be
23 -# ~/.gitconfig by default but can be overridden by setting
24 -# the GIT_CONFIG_FILE environment variable before starting.
25 -#
26 -# cidaemon.smtpHost
27 -# Hostname of the SMTP server the daemon will send email
28 -# through. Defaults to 'localhost'.
29 -#
30 -# cidaemon.smtpUser
31 -# Username to authenticate to the SMTP server as. This
32 -# variable is optional; if it is not supplied then no
33 -# authentication will be performed.
34 -#
35 -# cidaemon.smtpPassword
36 -# Password to authenticate to the SMTP server as. This
37 -# variable is optional. If not supplied but smtpUser was,
38 -# the daemon prompts for the password before forking into
39 -# the background.
40 -#
41 -# cidaemon.smtpAuth
42 -# Type of authentication to perform with the SMTP server.
43 -# If set to 'login' and smtpUser was defined, this will
44 -# use the AUTH LOGIN command, which is suitable for use
45 -# with at least one version of Microsoft Exchange Server.
46 -# If not set the daemon will use whatever auth methods
47 -# are supported by your version of Net::SMTP.
48 -#
49 -# cidaemon.email
50 -# Email address that daemon generated emails will be sent
51 -# from. This should be a useful email address within your
52 -# organization. Required.
53 -#
54 -# cidaemon.name
55 -# Human friendly name that the daemon will send emails as.
56 -# Defaults to 'cidaemon'.
57 -#
58 -# cidaemon.scanDelay
59 -# Number of seconds to sleep between polls of the queue file.
60 -# Defaults to 60.
61 -#
62 -# cidaemon.recentCache
63 -# Number of recent commit SHA-1s per repository to cache and
64 -# skip building if they appear again. This is useful to avoid
65 -# rebuilding the same commit multiple times just because it was
66 -# pushed into more than one branch. Defaults to 100.
67 -#
68 -# cidaemon.tmpdir
69 -# Scratch directory to create the builds within. The daemon
70 -# makes a new subdirectory for each build, then deletes it when
71 -# the build has finished. The pid file is also placed here.
72 -# Defaults to '/tmp'.
73 -#
74 -# cidaemon.queue
75 -# Path to the queue file that the post-receive-cinotify hook
76 -# appends events to. This file is polled by the daemon. It
77 -# must not be on an NFS mount (uses flock). Required.
78 -#
79 -# cidaemon.nocc
80 -# Perl regex patterns to match against author and committer
81 -# lines. If a pattern matches, that author or committer will
82 -# not be notified of a build failure.
83 -#
84 -# Per Repository Config
85 -# ----------------------
86 -# Read from the source repository's config file.
87 -#
88 -# builder.command
89 -# Shell command to execute the build. This command must
90 -# return 0 on "success" and non-zero on failure. If you
91 -# also want to run a test suite, make sure your command
92 -# does that too. Required.
93 -#
94 -# builder.queue
95 -# Queue file to notify the cidaemon through. Should match
96 -# cidaemon.queue. If not set the hook will not notify the
97 -# cidaemon.
98 -#
99 -# builder.skip
100 -# Perl regex patterns of refs that should not be sent to
101 -# cidaemon. Updates of these refs will be ignored.
102 -#
103 -# builder.newBranchBase
104 -# Glob patterns of refs that should be used to form the
105 -# 'old' revions of a newly created ref. This should set
106 -# to be globs that match your 'mainline' branches. This
107 -# way a build failure of a brand new topic branch does not
108 -# attempt to email everyone since the beginning of time;
109 -# instead it only emails those authors of commits not in
110 -# these 'mainline' branches.
111 -
112 -local $ENV{PATH} = join ':', qw(
113 - /opt/git/bin
114 - /usr/bin
115 - /bin
116 - );
117 -
118 -use strict;
119 -use warnings;
120 -use FindBin qw($RealBin);
121 -use File::Spec;
122 -use lib File::Spec->catfile($RealBin, '..', 'perl5');
123 -use Storable qw(retrieve nstore);
124 -use Fcntl ':flock';
125 -use POSIX qw(strftime);
126 -use Getopt::Long qw(:config no_auto_abbrev auto_help);
127 -
128 -sub git_config ($;$)
129 -{
130 - my $var = shift;
131 - my $required = shift || 0;
132 - local *GIT;
133 - open GIT, '-|','git','config','--get',$var;
134 - my $r = <GIT>;
135 - chop $r if $r;
136 - close GIT;
137 - die "error: $var not set.\n" if ($required && !$r);
138 - return $r;
139 -}
140 -
141 -package EXCHANGE_NET_SMTP;
142 -
143 -# Microsoft Exchange Server requires an 'AUTH LOGIN'
144 -# style of authentication. This is different from
145 -# the default supported by Net::SMTP so we subclass
146 -# and override the auth method to support that.
147 -
148 -use Net::SMTP;
149 -use Net::Cmd;
150 -use MIME::Base64 qw(encode_base64);
151 -our @ISA = qw(Net::SMTP);
152 -our $auth_type = ::git_config 'cidaemon.smtpAuth';
153 -
154 -sub new
155 -{
156 - my $self = shift;
157 - my $type = ref($self) || $self;
158 - $type->SUPER::new(@_);
159 -}
160 -
161 -sub auth
162 -{
163 - my $self = shift;
164 - return $self->SUPER::auth(@_) unless $auth_type eq 'login';
165 -
166 - my $user = encode_base64 shift, '';
167 - my $pass = encode_base64 shift, '';
168 - return 0 unless CMD_MORE == $self->command("AUTH LOGIN")->response;
169 - return 0 unless CMD_MORE == $self->command($user)->response;
170 - CMD_OK == $self->command($pass)->response;
171 -}
172 -
173 -package main;
174 -
175 -my ($debug_flag, %recent);
176 -
177 -my $ex_host = git_config('cidaemon.smtpHost') || 'localhost';
178 -my $ex_user = git_config('cidaemon.smtpUser');
179 -my $ex_pass = git_config('cidaemon.smtpPassword');
180 -
181 -my $ex_from_addr = git_config('cidaemon.email', 1);
182 -my $ex_from_name = git_config('cidaemon.name') || 'cidaemon';
183 -
184 -my $scan_delay = git_config('cidaemon.scanDelay') || 60;
185 -my $recent_size = git_config('cidaemon.recentCache') || 100;
186 -my $tmpdir = git_config('cidaemon.tmpdir') || '/tmp';
187 -my $queue_name = git_config('cidaemon.queue', 1);
188 -my $queue_lock = "$queue_name.lock";
189 -
190 -my @nocc_list;
191 -open GIT,'git config --get-all cidaemon.nocc|';
192 -while (<GIT>) {
193 - chop;
194 - push @nocc_list, $_;
195 -}
196 -close GIT;
197 -
198 -sub nocc_author ($)
199 -{
200 - local $_ = shift;
201 - foreach my $pat (@nocc_list) {
202 - return 1 if /$pat/;
203 - }
204 - 0;
205 -}
206 -
207 -sub input_echo ($)
208 -{
209 - my $prompt = shift;
210 -
211 - local $| = 1;
212 - print $prompt;
213 - my $input = <STDIN>;
214 - chop $input;
215 - return $input;
216 -}
217 -
218 -sub input_noecho ($)
219 -{
220 - my $prompt = shift;
221 -
222 - my $end = sub {system('stty','echo');print "\n";exit};
223 - local $SIG{TERM} = $end;
224 - local $SIG{INT} = $end;
225 - system('stty','-echo');
226 -
227 - local $| = 1;
228 - print $prompt;
229 - my $input = <STDIN>;
230 - system('stty','echo');
231 - print "\n";
232 - chop $input;
233 - return $input;
234 -}
235 -
236 -sub rfc2822_date ()
237 -{
238 - strftime("%a, %d %b %Y %H:%M:%S %Z", localtime);
239 -}
240 -
241 -sub send_email ($$$)
242 -{
243 - my ($subj, $body, $to) = @_;
244 - my $now = rfc2822_date;
245 - my $to_str = '';
246 - my @rcpt_to;
247 - foreach (@$to) {
248 - my $s = $_;
249 - $s =~ s/^/"/;
250 - $s =~ s/(\s+<)/"$1/;
251 - $to_str .= ', ' if $to_str;
252 - $to_str .= $s;
253 - push @rcpt_to, $1 if $s =~ /<(.*)>/;
254 - }
255 - die "Nobody to send to.\n" unless @rcpt_to;
256 - my $msg = <<EOF;
257 -From: "$ex_from_name" <$ex_from_addr>
258 -To: $to_str
259 -Date: $now
260 -Subject: $subj
261 -
262 -$body
263 -EOF
264 -
265 - my $smtp = EXCHANGE_NET_SMTP->new(Host => $ex_host)
266 - or die "Cannot connect to $ex_host: $!\n";
267 - if ($ex_user && $ex_pass) {
268 - $smtp->auth($ex_user,$ex_pass)
269 - or die "$ex_host rejected $ex_user\n";
270 - }
271 - $smtp->mail($ex_from_addr)
272 - or die "$ex_host rejected $ex_from_addr\n";
273 - scalar($smtp->recipient(@rcpt_to, { SkipBad => 1 }))
274 - or die "$ex_host did not accept any addresses.\n";
275 - $smtp->data($msg)
276 - or die "$ex_host rejected message data\n";
277 - $smtp->quit;
278 -}
279 -
280 -sub pop_queue ()
281 -{
282 - open LOCK, ">$queue_lock" or die "Can't open $queue_lock: $!";
283 - flock LOCK, LOCK_EX;
284 -
285 - my $queue = -f $queue_name ? retrieve $queue_name : [];
286 - my $ent = shift @$queue;
287 - nstore $queue, $queue_name;
288 -
289 - flock LOCK, LOCK_UN;
290 - close LOCK;
291 - $ent;
292 -}
293 -
294 -sub git_exec (@)
295 -{
296 - system('git',@_) == 0 or die "Cannot git " . join(' ', @_) . "\n";
297 -}
298 -
299 -sub git_val (@)
300 -{
301 - open(C, '-|','git',@_);
302 - my $r = <C>;
303 - chop $r if $r;
304 - close C;
305 - $r;
306 -}
307 -
308 -sub do_build ($$)
309 -{
310 - my ($git_dir, $new) = @_;
311 -
312 - my $tmp = File::Spec->catfile($tmpdir, "builder$$");
313 - system('rm','-rf',$tmp) == 0 or die "Cannot clear $tmp\n";
314 - die "Cannot clear $tmp.\n" if -e $tmp;
315 -
316 - my $result = 1;
317 - eval {
318 - my $command;
319 - {
320 - local $ENV{GIT_DIR} = $git_dir;
321 - $command = git_val 'config','builder.command';
322 - }
323 - die "No builder.command for $git_dir.\n" unless $command;
324 -
325 - git_exec 'clone','-n','-l','-s',$git_dir,$tmp;
326 - chmod 0700, $tmp or die "Cannot lock $tmp\n";
327 - chdir $tmp or die "Cannot enter $tmp\n";
328 -
329 - git_exec 'update-ref','HEAD',$new;
330 - git_exec 'read-tree','-m','-u','HEAD','HEAD';
331 - system $command;
332 - if ($? == -1) {
333 - print STDERR "failed to execute '$command': $!\n";
334 - $result = 1;
335 - } elsif ($? & 127) {
336 - my $sig = $? & 127;
337 - print STDERR "'$command' died from signal $sig\n";
338 - $result = 1;
339 - } else {
340 - my $r = $? >> 8;
341 - print STDERR "'$command' exited with $r\n" if $r;
342 - $result = $r;
343 - }
344 - };
345 - if ($@) {
346 - $result = 2;
347 - print STDERR "$@\n";
348 - }
349 -
350 - chdir '/';
351 - system('rm','-rf',$tmp);
352 - rmdir $tmp;
353 - $result;
354 -}
355 -
356 -sub build_failed ($$$$$)
357 -{
358 - my ($git_dir, $ref, $old, $new, $msg) = @_;
359 -
360 - $git_dir =~ m,/([^/]+)$,;
361 - my $repo_name = $1;
362 - $ref =~ s,^refs/(heads|tags)/,,;
363 -
364 - my %authors;
365 - my $shortlog;
366 - my $revstr;
367 - {
368 - local $ENV{GIT_DIR} = $git_dir;
369 - my @revs = ($new);
370 - push @revs, '--not', @$old if @$old;
371 - open LOG,'-|','git','rev-list','--pretty=raw',@revs;
372 - while (<LOG>) {
373 - if (s/^(author|committer) //) {
374 - chomp;
375 - s/>.*$/>/;
376 - $authors{$_} = 1 unless nocc_author $_;
377 - }
378 - }
379 - close LOG;
380 - open LOG,'-|','git','shortlog',@revs;
381 - $shortlog .= $_ while <LOG>;
382 - close LOG;
383 - $revstr = join(' ', @revs);
384 - }
385 -
386 - my @to = sort keys %authors;
387 - unless (@to) {
388 - print STDERR "error: No authors in $revstr\n";
389 - return;
390 - }
391 -
392 - my $subject = "[$repo_name] $ref : Build Failed";
393 - my $body = <<EOF;
394 -Project: $git_dir
395 -Branch: $ref
396 -Commits: $revstr
397 -
398 -$shortlog
399 -Build Output:
400 ---------------------------------------------------------------
401 -$msg
402 -EOF
403 - send_email($subject, $body, \@to);
404 -}
405 -
406 -sub run_build ($$$$)
407 -{
408 - my ($git_dir, $ref, $old, $new) = @_;
409 -
410 - if ($debug_flag) {
411 - my @revs = ($new);
412 - push @revs, '--not', @$old if @$old;
413 - print "BUILDING $git_dir\n";
414 - print " BRANCH: $ref\n";
415 - print " COMMITS: ", join(' ', @revs), "\n";
416 - }
417 -
418 - local(*R, *W);
419 - pipe R, W or die "cannot pipe builder: $!";
420 -
421 - my $builder = fork();
422 - if (!defined $builder) {
423 - die "cannot fork builder: $!";
424 - } elsif (0 == $builder) {
425 - close R;
426 - close STDIN;open(STDIN, '/dev/null');
427 - open(STDOUT, '>&W');
428 - open(STDERR, '>&W');
429 - exit do_build $git_dir, $new;
430 - } else {
431 - close W;
432 - my $out = '';
433 - $out .= $_ while <R>;
434 - close R;
435 - waitpid $builder, 0;
436 - build_failed $git_dir, $ref, $old, $new, $out if $?;
437 - }
438 -
439 - print "DONE\n\n" if $debug_flag;
440 -}
441 -
442 -sub daemon_loop ()
443 -{
444 - my $run = 1;
445 - my $stop_sub = sub {$run = 0};
446 - $SIG{HUP} = $stop_sub;
447 - $SIG{INT} = $stop_sub;
448 - $SIG{TERM} = $stop_sub;
449 -
450 - mkdir $tmpdir, 0755;
451 - my $pidfile = File::Spec->catfile($tmpdir, "cidaemon.pid");
452 - open(O, ">$pidfile"); print O "$$\n"; close O;
453 -
454 - while ($run) {
455 - my $ent = pop_queue;
456 - if ($ent) {
457 - my ($git_dir, $ref, $old, $new) = @$ent;
458 -
459 - $ent = $recent{$git_dir};
460 - $recent{$git_dir} = $ent = [[], {}] unless $ent;
461 - my ($rec_arr, $rec_hash) = @$ent;
462 - next if $rec_hash->{$new}++;
463 - while (@$rec_arr >= $recent_size) {
464 - my $to_kill = shift @$rec_arr;
465 - delete $rec_hash->{$to_kill};
466 - }
467 - push @$rec_arr, $new;
468 -
469 - run_build $git_dir, $ref, $old, $new;
470 - } else {
471 - sleep $scan_delay;
472 - }
473 - }
474 -
475 - unlink $pidfile;
476 -}
477 -
478 -$debug_flag = 0;
479 -GetOptions(
480 - 'debug|d' => \$debug_flag,
481 - 'smtp-user=s' => \$ex_user,
482 -) or die "usage: $0 [--debug] [--smtp-user=user]\n";
483 -
484 -$ex_pass = input_noecho("$ex_user SMTP password: ")
485 - if ($ex_user && !$ex_pass);
486 -
487 -if ($debug_flag) {
488 - daemon_loop;
489 - exit 0;
490 -}
491 -
492 -my $daemon = fork();
493 -if (!defined $daemon) {
494 - die "cannot fork daemon: $!";
495 -} elsif (0 == $daemon) {
496 - close STDIN;open(STDIN, '/dev/null');
497 - close STDOUT;open(STDOUT, '>/dev/null');
498 - close STDERR;open(STDERR, '>/dev/null');
499 - daemon_loop;
500 - exit 0;
501 -} else {
502 - print "Daemon $daemon running in the background.\n";
503 -}
contrib/continuous/post-receive-cinotify deleted
-104
@@ -1,104 +0,0 @@
1 -#!/usr/bin/perl
2 -#
3 -# A hook that notifies its companion cidaemon through a simple
4 -# queue file that a ref has been updated via a push (actually
5 -# by a receive-pack running on the server).
6 -#
7 -# See cidaemon for per-repository configuration details.
8 -#
9 -# To use this hook, add it as the post-receive hook, make it
10 -# executable, and set its configuration options.
11 -#
12 -
13 -local $ENV{PATH} = '/opt/git/bin';
14 -
15 -use strict;
16 -use warnings;
17 -use File::Spec;
18 -use Storable qw(retrieve nstore);
19 -use Fcntl ':flock';
20 -
21 -my $git_dir = File::Spec->rel2abs($ENV{GIT_DIR});
22 -my $queue_name = `git config --get builder.queue`;chop $queue_name;
23 -$queue_name =~ m,^([^\s]+)$,; $queue_name = $1; # untaint
24 -unless ($queue_name) {
25 - 1 while <STDIN>;
26 - print STDERR "\nerror: builder.queue not set. Not enqueing.\n\n";
27 - exit;
28 -}
29 -my $queue_lock = "$queue_name.lock";
30 -
31 -my @skip;
32 -open S, "git config --get-all builder.skip|";
33 -while (<S>) {
34 - chop;
35 - push @skip, $_;
36 -}
37 -close S;
38 -
39 -my @new_branch_base;
40 -open S, "git config --get-all builder.newBranchBase|";
41 -while (<S>) {
42 - chop;
43 - push @new_branch_base, $_;
44 -}
45 -close S;
46 -
47 -sub skip ($)
48 -{
49 - local $_ = shift;
50 - foreach my $p (@skip) {
51 - return 1 if /^$p/;
52 - }
53 - 0;
54 -}
55 -
56 -open LOCK, ">$queue_lock" or die "Can't open $queue_lock: $!";
57 -flock LOCK, LOCK_EX;
58 -
59 -my $queue = -f $queue_name ? retrieve $queue_name : [];
60 -my %existing;
61 -foreach my $r (@$queue) {
62 - my ($gd, $ref) = @$r;
63 - $existing{$gd}{$ref} = $r;
64 -}
65 -
66 -my @new_branch_commits;
67 -my $loaded_new_branch_commits = 0;
68 -
69 -while (<STDIN>) {
70 - chop;
71 - my ($old, $new, $ref) = split / /, $_, 3;
72 -
73 - next if $old eq $new;
74 - next if $new =~ /^0{40}$/;
75 - next if skip $ref;
76 -
77 - my $r = $existing{$git_dir}{$ref};
78 - if ($r) {
79 - $r->[3] = $new;
80 - } else {
81 - if ($old =~ /^0{40}$/) {
82 - if (!$loaded_new_branch_commits && @new_branch_base) {
83 - open M,'-|','git','show-ref',@new_branch_base;
84 - while (<M>) {
85 - ($_) = split / /, $_;
86 - push @new_branch_commits, $_;
87 - }
88 - close M;
89 - $loaded_new_branch_commits = 1;
90 - }
91 - $old = [@new_branch_commits];
92 - } else {
93 - $old = [$old];
94 - }
95 -
96 - $r = [$git_dir, $ref, $old, $new];
97 - $existing{$git_dir}{$ref} = $r;
98 - push @$queue, $r;
99 - }
100 -}
101 -nstore $queue, $queue_name;
102 -
103 -flock LOCK, LOCK_UN;
104 -close LOCK;
contrib/patches/docbook-xsl-manpages-charmap.patch deleted
-21
@@ -1,21 +0,0 @@
1 -From: Ismail Dönmez <ismail@pardus.org.tr>
2 -
3 -Trying to build the documentation with docbook-xsl 1.73 may result in
4 -the following error. This patch fixes it.
5 -
6 -$ xmlto -m callouts.xsl man git-add.xml
7 -runtime error: file
8 -file:///usr/share/sgml/docbook/xsl-stylesheets-1.73.0/manpages/other.xsl line
9 -129 element call-template
10 -The called template 'read-character-map' was not found.
11 -
12 ---- docbook-xsl-1.73.0/manpages/docbook.xsl.manpages-charmap 2007-07-23 16:24:23.000000000 +0100
13 -+++ docbook-xsl-1.73.0/manpages/docbook.xsl 2007-07-23 16:25:16.000000000 +0100
14 -@@ -37,6 +37,7 @@
15 - <xsl:include href="lists.xsl"/>
16 - <xsl:include href="endnotes.xsl"/>
17 - <xsl:include href="table.xsl"/>
18 -+ <xsl:include href="../common/charmap.xsl"/>
19 -
20 - <!-- * we rename the following just to avoid using params with "man" -->
21 - <!-- * prefixes in the table.xsl stylesheet (because that stylesheet -->