diff options
author | Vincent Ambo <mail@tazj.in> | 2021-09-21T10·03+0300 |
---|---|---|
committer | Vincent Ambo <mail@tazj.in> | 2021-09-21T11·29+0300 |
commit | 43b1791ec601732ac31195df96781a848360a9ac (patch) | |
tree | daae8d638343295d2f1f7da955e556ef4c958864 /third_party/git/t/test-terminal.perl | |
parent | 2d8e7dc9d9c38127ec4ebd13aee8e8f586a43318 (diff) |
chore(3p/git): Unvendor git and track patches instead r/2903
This was vendored a long time ago under the expectation that keeping it in sync with cgit would be easier this way, but it has proven not to be a big issue. On the other hand, a vendored copy of git is an annoying maintenance burden. It is much easier to rebase the single (dottime) patch that we have. This removes the vendored copy of git and instead passes the git source code to cgit via `pkgs.srcOnly`, which includes the applied patch so that cgit can continue rendering dottime. Change-Id: If31f62dea7ce688fd1b9050204e9378019775f2b
Diffstat (limited to 'third_party/git/t/test-terminal.perl')
-rwxr-xr-x | third_party/git/t/test-terminal.perl | 105 |
1 files changed, 0 insertions, 105 deletions
diff --git a/third_party/git/t/test-terminal.perl b/third_party/git/t/test-terminal.perl deleted file mode 100755 index 1bcf01a9a42a..000000000000 --- a/third_party/git/t/test-terminal.perl +++ /dev/null @@ -1,105 +0,0 @@ -#!/usr/bin/perl -use 5.008; -use strict; -use warnings; -use IO::Pty; -use File::Copy; - -# Run @$argv in the background with stdio redirected to $in, $out and $err. -sub start_child { - my ($argv, $in, $out, $err) = @_; - my $pid = fork; - if (not defined $pid) { - die "fork failed: $!" - } elsif ($pid == 0) { - open STDIN, "<&", $in; - open STDOUT, ">&", $out; - open STDERR, ">&", $err; - close $in; - close $out; - exec(@$argv) or die "cannot exec '$argv->[0]': $!" - } - return $pid; -} - -# Wait for $pid to finish. -sub finish_child { - # Simplified from wait_or_whine() in run-command.c. - my ($pid) = @_; - - my $waiting = waitpid($pid, 0); - if ($waiting < 0) { - die "waitpid failed: $!"; - } elsif ($? & 127) { - my $code = $? & 127; - warn "died of signal $code"; - return $code + 128; - } else { - return $? >> 8; - } -} - -sub xsendfile { - my ($out, $in) = @_; - - # Note: the real sendfile() cannot read from a terminal. - - # It is unspecified by POSIX whether reads - # from a disconnected terminal will return - # EIO (as in AIX 4.x, IRIX, and Linux) or - # end-of-file. Either is fine. - copy($in, $out, 4096) or $!{EIO} or die "cannot copy from child: $!"; -} - -sub copy_stdin { - my ($in) = @_; - my $pid = fork; - if (!$pid) { - xsendfile($in, \*STDIN); - exit 0; - } - close($in); - return $pid; -} - -sub copy_stdio { - my ($out, $err) = @_; - my $pid = fork; - defined $pid or die "fork failed: $!"; - if (!$pid) { - close($out); - xsendfile(\*STDERR, $err); - exit 0; - } - close($err); - xsendfile(\*STDOUT, $out); - finish_child($pid) == 0 - or exit 1; -} - -if ($#ARGV < 1) { - die "usage: test-terminal program args"; -} -$ENV{TERM} = 'vt100'; -my $parent_in = new IO::Pty; -my $parent_out = new IO::Pty; -my $parent_err = new IO::Pty; -$parent_in->set_raw(); -$parent_out->set_raw(); -$parent_err->set_raw(); -$parent_in->slave->set_raw(); -$parent_out->slave->set_raw(); -$parent_err->slave->set_raw(); -my $pid = start_child(\@ARGV, $parent_in->slave, $parent_out->slave, $parent_err->slave); -close $parent_in->slave; -close $parent_out->slave; -close $parent_err->slave; -my $in_pid = copy_stdin($parent_in); -copy_stdio($parent_out, $parent_err); -my $ret = finish_child($pid); -# If the child process terminates before our copy_stdin() process is able to -# write all of its data to $parent_in, the copy_stdin() process could stall. -# Send SIGTERM to it to ensure it terminates. -kill 'TERM', $in_pid; -finish_child($in_pid); -exit($ret); |