1
0
mirror of https://github.com/upx/upx.git synced 2025-08-11 22:52:30 +08:00

New upstream version.

committer: mfx <mfx> 1101602738 +0000
This commit is contained in:
Markus F.X.J. Oberhumer
2004-11-28 00:45:38 +00:00
parent 8fcf2bcd59
commit b24fb59c94

View File

@ -7,8 +7,8 @@
### ###
##############################################################
## $Revision: 2.57 $
## $Date: 2004/07/10 19:38:37 $
## $Revision: 2.58 $
## $Date: 2004/11/07 15:28:35 $
## $Author: fluffy $
##
@ -17,8 +17,8 @@ use strict;
use File::Basename qw( fileparse );
use Getopt::Long qw( GetOptions );
use Text::Wrap qw( );
use User::pwent qw( getpwnam );
use Time::Local qw( timegm );
use User::pwent qw( getpwnam );
# The Plan:
#
@ -141,7 +141,7 @@ use Time::Local qw( timegm );
# Globals --------------------------------------------------------------------
# In case we have to print it out:
my $VERSION = '$Revision: 2.57 $';
my $VERSION = '$Revision: 2.58 $';
$VERSION =~ s/\S+\s+(\S+)\s+\S+/$1/;
## Vars set by options:
@ -955,7 +955,20 @@ sub pretty_file_list {
# -------------------------------------
sub output_tagdate {
# NOT YET DONE
my $self = shift;
my ($fh, $time, $tag) = @_;
my ($y, $m, $d, $H, $M, $S) = (gmtime($time))[5,4,3,2,1,0];
# Ideally, this would honor $UTC_Times and use +HH:MM syntax
my $isoDate = sprintf("%04d-%02d-%02dT%02d:%02d:%02dZ",
$y + 1900, $m + 1, $d, $H, $M, $S);
print $fh "<tagdate>\n";
print $fh "<tagisodate>$isoDate</tagisodate>\n";
print $fh "<tagdatetag>$tag</tagdatetag>\n";
print $fh "</tagdate>\n\n";
return;
}
# -------------------------------------
@ -1051,11 +1064,6 @@ sub _revision_is_wanted {
my $follow_branches = $self->{follow_branches};
my $follow_only = $self->{follow_only};
#print STDERR "IG: ", join(',', keys %{$self->{ignore_tags}}), "\n";
#print STDERR "IX: ", join(',', @{$qunk->{tags}}), "\n" if defined $qunk->{tags};
#print STDERR "IQ: ", join(',', keys %{$qunk->{branch_numbers}}), "\n" if defined $qunk->{branch_numbers};
#use Data::Dumper; print STDERR Dumper $qunk;
for my $ignore_tag (keys %{$self->{ignore_tags}}) {
return
if defined $qunk->{tags} and grep $_ eq $ignore_tag, @{$qunk->{tags}};
@ -1095,12 +1103,13 @@ sub _revision_is_wanted {
($branch_number . ".") ) {
if ( $followsub ) {
return 1;
} elsif (length($revision) == length($branch_number)+2 ) {
# } elsif ( length($revision) == length($branch_number)+2 ) {
} elsif ( substr($revision, length($branch_number)+1) =~ /^\d+$/ ) {
return 1;
}
} elsif ( length($branch_number) > length($revision)
and
$No_Ancestors ) {
! $No_Ancestors ) {
# Non-trivial case: check if rev is ancestral to branch
# r_left still has the trailing "."
@ -1213,13 +1222,13 @@ my $self = shift; my $class = ref $self;
# XML output includes everything else, we might as well make
# it always include Day Of Week too, for consistency.
my $authorhash = $changelog{$time};
if ($Show_Tag_Dates) {
if ( $Show_Tag_Dates || $XML_Output ) {
my %tags;
while (my ($author,$mesghash) = each %$authorhash) {
while (my ($msg,$qunk) = each %$mesghash) {
foreach my $qunkref2 (@$qunk) {
for my $qunkref2 (@$qunk) {
if (defined ($qunkref2->tags)) {
foreach my $tag (@{$qunkref2->tags}) {
for my $tag (@{$qunkref2->tags}) {
$tags{$tag} = 1;
}
}
@ -1924,22 +1933,38 @@ sub grand_poobah { $_[0]->{grand_poobah} }
sub read_changelog {
my ($self, $command) = @_;
# my $grand_poobah = CVS::Utils::ChangeLog::EntrySet->new;
local (*READER, *WRITER);
my $pid;
if (! $Input_From_Stdin) {
my $Log_Source_Command = join(' ', @$command);
&main::debug ("(run \"${Log_Source_Command}\")\n");
open (LOG_SOURCE, "$Log_Source_Command |")
or die "unable to run \"${Log_Source_Command}\"";
pipe(READER, WRITER)
or die "Couldn't form pipe: $!\n";
$pid = fork;
die "Couldn't fork: $!\n"
if ! defined $pid;
if ( ! $pid ) { # child
open STDOUT, '>&=' . fileno WRITER
or die "Couldn't dup stderr to ", fileno WRITER, "\n";
# strangely, some perls give spurious warnings about STDIN being opened
# for output only these close calls precede the STDOUT reopen above.
# I think they must be reusing fd 1.
close READER;
close STDIN;
exec @$command;
}
close WRITER;
&main::debug ("(run \"@$command\")\n");
}
else {
open (LOG_SOURCE, "-") or die "unable to open stdin for reading";
open READER, '-' or die "unable to open stdin for reading";
}
binmode LOG_SOURCE;
binmode READER;
XX_Log_Source:
while (<LOG_SOURCE>) {
while (<READER>) {
chomp;
s!\r$!!;
@ -1967,17 +1992,19 @@ sub read_changelog {
# log message texts:
$self->{rev_msg} .= $_ . "\n"; # Normally, just accumulate the message...
} else {
my $noadd = 0;
if ( ! $self->{rev_msg}
or $self->{rev_msg} =~ /^\s*(\.\s*)?$/
or index($self->{rev_msg}, EMPTY_LOG_MESSAGE) > -1 ) {
# ... until a msg separator is encountered:
# Ensure the message contains something:
$self->clear_msg
$self->clear_msg, $noadd = 1
if $Prune_Empty_Msgs;
$self->{rev_msg} = "[no log message]\n";
}
$self->add_file_entry;
$self->add_file_entry
unless $noadd;
if ( $_ eq FILE_SEPARATOR ) {
$self->clear_file;
@ -1987,9 +2014,15 @@ sub read_changelog {
}
}
close LOG_SOURCE
or die sprintf("Problem reading log input (exit/signal/core: %d/%d/%d)\n",
$? >> 8, $? & 127, $? & 128);
close READER
or die "Couldn't close pipe reader: $!\n";
if ( defined $pid ) {
my $rv;
waitpid $pid, 0;
0 == $?
or $!=1, die sprintf("Problem reading log input (pid/exit/signal/core: %d/%d/%d/%d)\n",
$pid, $? >> 8, $? & 127, $? & 128);
}
return;
}
@ -2126,9 +2159,8 @@ sub read_file_path {
($base, undef, undef) = fileparse($path);
my $xpath = $Case_Insensitive ? lc($path) : $path;
if ( grep index($path, $_) > -1, @Ignore_Files ) {
return;
}
return
if grep $path =~ /$_/, @Ignore_Files;
}
$self->{filename} = $path;
@ -2398,7 +2430,7 @@ sub derive_changelog {
my $accumulation_date = maybe_grab_accumulation_date;
if ($accumulation_date) {
# Insert -d immediately after 'cvs log'
my $Log_Date_Command = "-d\'>${accumulation_date}\'";
my $Log_Date_Command = "-d>${accumulation_date}";
my ($log_index) = grep $command->[$_] eq 'log', 0..$#$command;
splice @$command, $log_index+1, 0, $Log_Date_Command;
@ -2455,6 +2487,7 @@ sub common_path_prefix {
}
# -------------------------------------
sub parse_options {
# Check this internally before setting the global variable.
my $output_file;
@ -2604,7 +2637,7 @@ sub parse_options {
)
or die "options parsing failed\n";
push @log_source_command, map "'$_'", @ARGV;
push @log_source_command, map "$_", @ARGV;
## Check for contradictions...
@ -2857,7 +2890,8 @@ times.
=item B<-I> I<REGEXP>, B<--ignore> I<REGEXP>
Ignore files whose names match I<REGEXP>. This option may be used multiple
times.
times. The regexp is a perl regular expression. It is matched as is; you may
want to prefix with a ^ or suffix with a $ to anchor the match.
=item B<-C>, B<--case-insensitive>
@ -3037,6 +3071,14 @@ systems) for more information.
Note that the rules for quoting under windows shells are different.
=item *
To run in an automated environment such as CGI or PHP, suidperl may be needed
in order to execute as the correct user to enable /cvsroot read lock files to
be written for the 'cvs log' command. This is likely just a case of changing
the /usr/bin/perl command to /usr/bin/suidperl, and explicitly declaring the
PATH variable.
=back
=head1 EXAMPLES
@ -3098,6 +3140,8 @@ Contributions from
=item Terry Kane
=item Pete Kempf
=item Akos Kiss
=item Claus Klein
@ -3120,7 +3164,11 @@ Contributions from
=item Thomas Parmelan
=item Johanne Stezenbach
=item Jordan Russell
=item Jacek Sliwerski
=item Johannes Stezenbach
=item Joseph Walton