#! /usr/bin/perl -W
#
-# yapfaq Version 0.7 by Thomas Hochstein
+# yapfaq Version 0.8.1 by Thomas Hochstein
# (Original author: Marc Brockschmidt)
#
# This script posts any project described in its config-file. Most people
# It can be redistributed and/or modified under the same terms under
# which Perl itself is published.
-our $VERSION = "0.8-prelease";
+our $VERSION = "0.9-prelease";
# Please do not change this setting!
# You may override the default .rc file (.yapfaqrc) by using "-c .rc file"
use Net::NNTP;
use Net::Domain qw(hostfqdn);
use Date::Calc qw(Add_Delta_YM Add_Delta_Days Delta_Days Today);
-use Fcntl ':flock'; # import LOCK_* constants
use Getopt::Std;
$Getopt::Std::STANDARD_HELP_VERSION = 1;
my ($TDY, $TDM, $TDD) = Today(); #TD: Today's date
warn "$0: W: .rc file $RCFile does not exist!\n";
}
-$Options{'s'} = $Config{'Program'} if (!defined($Options{'s'}));
+$Options{'s'} = $Config{'Program'} if (defined($Config{'Program'}) && $Config{'Program'} && !defined($Options{'s'}));
# read configuration (configured FAQs)
my @Config;
}
unless(!$$Config[$i]{'mid-format'} || $$Config[$i]{'mid-format'} =~ /^<\S+\@(\S+\.)?\S{2,}\.\S{2,}>/) {
warn "$0: W: The Message-ID format for your project \"$$Config[$i]{'name'}\" seems to be invalid - set to default.\n";
- $$Config[$i]{'mid-format'} = '<%n-%d.%m.%y@'.hostfqdn.'>'; # set default if mid-format is invalid
+ $$Config[$i]{'mid-format'} = '<%n-%y-%m-%d@'.hostfqdn.'>'; # set default if mid-format is invalid
}
}
$Error .= "-" x 25 . 'program terminated' . "-" x 25 . "\n" if $Error;
my $Timestamp = time;
$MID = $$MIDF;
- $MID = '<%n-%d.%m.%y@'.hostfqdn.'>' if !defined($MID); # set to default if unset
+ $MID = '<%n-%y-%m-%d@'.hostfqdn.'>' if !defined($MID); # set to default if unset
$MID =~ s/\%n/$$ActName/g;
$MID =~ s/\%d/$$TDD/g;
$MID =~ s/\%m/$$TDM/g;
s/\r//;
push (@Body, $_), next if $InRealBody;
$InRealBody++ if /^$/;
- $LastModified = $1 if /^Last-modified: (\S+)$/i;
+ $LastModified = $1 if /^Last-modified:\s*(\S+)\s*$/i;
push @Body, $_;
}
close FH;
#Replace %LM by the content of the news.answer-pseudo-header Last-modified:
if ($LastModified) {
$$Subject =~ s/\%LM/$LastModified/;
+ } else {
+ $$Subject =~ s/[<\[{\(]?\%LM[>\]}\)]?//;
}
# Test mode?
if($Options{'t'} and $Options{'t'} !~ /console/i) {
$$NG = $Options{'t'};
+ $MID =~ s/@/-$Timestamp-test@/g;
+ $$ExtraHeaders .= "\n" if $$ExtraHeaders;
+ $$ExtraHeaders .= "X-Supersedes: $$Supersedes\nX-yapfaq-Remark: This is only a test message.";
+ undef $$Supersedes;
}
#Now create the complete Header:
for the year and C<%t> for a time stamp (number of seconds since the
epoch), respectively.
-This setting is optional; the default is '<%n-%d.%m.%y@I<YOURHOST>>'
+This setting is optional; the default is '<%n-%y-%m-%d@I<YOURHOST>>'
where I<YOURHOST> is the fully qualified domain name (FQDN) of the
host B<yapfaq> is running on. Obviously that will only work if you
have defined a reasonable hostname that the hostfqdn() function of
=item B<-t> I<newsgroup(s) | CONSOLE> (test)
Don't post to the newsgroups defined in F<yqpfaq.cfg>, but to the
-newsgroups given after B<-t> as a comma-separated list or print the
-FAQs to STDOUT separated by lines of dashes if the special string
-C<CONSOLE> is given. This can be used to preview what B<yapfaq> would
-do without embarassing yourself on Usenet. The status files are not
-updated when this option is given.
+(test) newsgroup(s) given after B<-t> as a comma-separated list or
+print the FAQs to STDOUT separated by lines of dashes if the special
+string C<CONSOLE> is given. This can be used to preview what
+B<yapfaq> would do without embarassing yourself on Usenet.
+
+The status files are not updated when this option is given.
+
+When this option is used to post to some other newsgroup(s), a(nother)
+timestamp is added to the Message-ID header and the Supersedes header
+is replaced by a special X-Supersedes header.
You may want to use this with the B<-f> option (see below).
=back
+=head1 INSTALLATION
+
+Just copy the contents of the tarball in some directory and get started.
+
+You can post your first test with
+
+ yapfaq -c .yapfaqrc.sample
+
+or copy F<.yapfaqrc.sample> to F<.yapfaqrc> and F<yapfaq.cfg.sample>
+to F<yapfaq.cfg>, edit those files and get really started!
+
+=back
+
=head1 EXAMPLES
Post all FAQs that are due for posting:
=head1 BUGS
-Many, I'm sure.
+Please report any bugs or feature request to the author or use the
+bug tracker at L<http://bugs.th-h.de/>!
=head1 SEE ALSO
L<http://th-h.de/download/scripts.php> will have the current
version of this program.
+This program is maintained using the Git version control system. You
+may clone L<git://code.th-h.de/usenet/yapfaq.git> to check out the
+current development tree or browse it on the web via
+L<http://code.th-h.de/?p=usenet/yapfaq.git>.
+
=head1 AUTHOR
Thomas Hochstein <thh@inter.net>