summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Phillip Brink (binki) <ohnobinki@ohnopublishing.net>2010-02-11 20:35:40 +0000
committerNathan Phillip Brink (binki) <ohnobinki@ohnopublishing.net>2010-02-11 20:35:40 +0000
commit1e569ca802f7c0783b2666a8bd6c12294c8096c9 (patch)
tree7c180516c4cfc66385f9fbefbd90934835c2f7a5
parentapp-text/referencer: Fix poppler dep (diff)
downloadsunrise-1e569ca802f7c0783b2666a8bd6c12294c8096c9.tar.gz
sunrise-1e569ca802f7c0783b2666a8bd6c12294c8096c9.tar.bz2
sunrise-1e569ca802f7c0783b2666a8bd6c12294c8096c9.zip
scripts/ echangelog: remove old, unused echangelog script
svn path=/sunrise/; revision=10131
-rwxr-xr-xscripts/echangelog403
1 files changed, 0 insertions, 403 deletions
diff --git a/scripts/echangelog b/scripts/echangelog
deleted file mode 100755
index 9e4cff8ec..000000000
--- a/scripts/echangelog
+++ /dev/null
@@ -1,403 +0,0 @@
-#!/usr/bin/perl -w
-#
-# echangelog: Update the ChangeLog for an ebuild. For example:
-#
-# $ echangelog 'Add ~alpha to KEYWORDS'
-# 4a5,7
-# > 10 Feb 2003; Aron Griffis <agriffis@gentoo.org> oaf-0.6.8-r1.ebuild :
-# > Add ~alpha to KEYWORDS
-# >
-
-use strict;
-use POSIX qw(strftime getcwd setlocale);
-
-# Fix bug 21022 by restricting to C locale
-setlocale(&POSIX::LC_ALL, "C");
-
-use Text::Wrap;
-$Text::Wrap::columns = 77;
-$Text::Wrap::unexpand = 0;
-
-# Global variables
-my (@files, @ebuilds, @conflicts, @trivial, @unknown, @new_versions, %actions);
-my ($input, $editor, $entry, $user, $date, $text, $version, $year, $vcs);
-
-my %vcs = ( cvs => { diff => "cvs -f -U0 diff",
- status => "cvs -fn up",
- add => "cvs -f add",
- skip => 6,
- entries => "CVS/Entries" },
- svn => { diff => "svn diff -N",
- status => "svn status",
- add => "svn add",
- skip => 4,
- entries => ".svn/entries" },
- git => { diff => "git diff",
- status => "git up",
- add => "git add",
- skip => 0,
- entries => "wtf" },
- nov => { diff => "",
- status => "",
- add => "",
- skip => 0,
- entries => "wtf" }
-);
-
-# Figure out what kind of repo we are in.
-
-if ( -d "CVS" ) {
- $vcs = "cvs";
-} elsif ( -d '.svn' ) {
- $vcs = "svn";
-} elsif ( -d '.git' ) {
- $vcs = "git";
-} else {
- print STDERR "** NOTE: No CVS, .git, .svn directories found, cannot know modifications\n";
- $vcs = "nov";
-}
-
-# Read the current ChangeLog
-if (-f 'ChangeLog') {
- open I, '<ChangeLog' or die "Can't open ChangeLog for input: $!\n";
- { local $/ = undef; $text = <I>; }
- close I;
-} else {
- # No ChangeLog here, maybe we should make one...
- if (<*.ebuild>) {
- open I, '<../../skel.ChangeLog'
- or die "Can't open ../../skel.ChangeLog for input: $!\n";
- { local $/ = undef; $text = <I>; }
- close I;
- my ($cwd) = getcwd();
- $cwd =~ m|.*/(\w+-\w+)/([^/]+)|
- or die "Can't figure out category/package.. sorry!\n";
- my ($category, $package_name) = ($1, $2);
- $text =~ s/^\*.*//ms; # don't need the fake entry
- $text =~ s/<CATEGORY>/$category/;
- $text =~ s/<PACKAGE_NAME>/$package_name/;
- } else {
- die "This should be run in a directory with ebuilds...\n";
- }
-}
-
-# Figure out what has changed around here
-open C, $vcs{$vcs}{status}.' 2>&1 |' or die "Can't run ".$vcs{$vcs}{status}.": $!\n";
-while (<C>) {
- if (/^C\s+\+?\s+(\S+)/) {
- push @conflicts, $1;
- next;
- } elsif (/^\?\s+\+?\s+(\S+)/) {
- push @unknown, $1;
- $actions{$1} = '+';
- next;
- } elsif (/^([ARMD])\s+\+?\s+(\S+)/) {
- push @files, $2;
- ($actions{$2} = $1) =~ tr/ARDM/+--/d;
- }
-}
-
-# Separate out the trivial files for now
-@files = grep {
- !/files.digest|Manifest|ChangeLog|^files$|^\.$/ or do { push @trivial, $_; 0; }
-} @files;
-
-@unknown = grep {
- !/files.digest|Manifest|ChangeLog|^files$|^\.$/ or do { push @trivial, $_; 0; }
-} @unknown;
-
-# Don't allow any conflicts
-if (@conflicts) {
- print STDERR <<EOT;
-$vcs reports the following conflicts. Please resolve them before
-running echangelog.
-EOT
- print STDERR map "C $_\n", @conflicts;
- exit 1;
-}
-
-# Don't allow unknown files (other than the trivial files that were separated
-# out above)
-if (@unknown) {
- print STDERR <<EOT;
-$vcs reports the following unknown files. Please use "cvs add" before
-running echangelog, or remove the files in question.
-EOT
- print STDERR map "? $_\n", @unknown;
- exit 1;
-}
-
-# Sort the list of files as portage does. None of the operations through
-# the rest of the script should break this sort.
-sub sortfunc($$) {
- my ($a, $b) = @_;
- (my $va = $a) =~ s/.*?-(\d.*?)(?:\.ebuild)?$/$1/;
- (my $vb = $b) =~ s/.*?-(\d.*?)(?:\.ebuild)?$/$1/;
- my ($na, $sa, $sna, $ra) = ($va =~ /^(.*?)(?:_(alpha|beta||pre|rc|p)(\d*))?(?:-r(\d+))?$/);
- my ($nb, $sb, $snb, $rb) = ($vb =~ /^(.*?)(?:_(alpha|beta||pre|rc|p)(\d*))?(?:-r(\d+))?$/);
- my (@na) = split /\.|(?<=\d)(?=[^\d\.])/, $na;
- my (@nb) = split /\.|(?<=\d)(?=[^\d\.])/, $nb;
- my $retval;
-
- #
- # compare version numbers first
- #
- for (my $i = 0; defined $na[$i] or defined $nb[$i]; $i++) {
- # def vs. undef
- return +1 if defined $na[$i] and !defined $nb[$i];
- return -1 if defined $nb[$i] and !defined $na[$i];
-
- # num vs. num
- if ($na[$i] =~ /^\d/ and $nb[$i] =~ /^\d/) {
- $retval = ($na[$i] <=> $nb[$i]);
- return $retval if $retval;
- next;
- }
-
- # char vs. char
- if ($na[$i] =~ /^\D/ and $nb[$i] =~ /^\D/) {
- $retval = ($na[$i] cmp $nb[$i]);
- return $retval if $retval;
- next;
- }
-
- # num vs. char
- $retval = ($na[$i] =~ /\d/ and -1 or +1);
- return $retval;
- }
-
- #
- # compare suffix second
- #
- if (defined $sa and !defined $sb) {
- return +2 if $sa eq "p";
- return -2;
- }
- if (defined $sb and !defined $sa) {
- return -3 if $sb eq "p";
- return +3;
- }
-
- if (defined $sa) { # and defined $sb
- $retval = ($sa cmp $sb);
- if ($retval) {
- return +4 if $sa eq "p";
- return -4 if $sb eq "p";
- return $retval; # suffixes happen to be alphabetical order, mostly
- }
-
- # compare suffix number
- return +5 if defined $sna and !defined $snb;
- return -5 if defined $snb and !defined $sna;
- if (defined $sna) { # and defined $snb
- $retval = ($sna <=> $snb);
- return $retval if $retval;
- }
- }
-
- #
- # compare rev third
- #
- return +6 if defined $ra and !defined $rb;
- return -6 if defined $rb and !defined $ra;
- if (defined $ra) { # and defined $rb
- return ($ra <=> $rb);
- }
-
- #
- # nothing left to compare
- #
- return 0;
-}
-@files = sort sortfunc @files;
-
-# Forget ebuilds that only have changed copyrights, unless that's all
-# the changed files we have
-# does not work with svn TODO
-#@ebuilds = grep /\.ebuild$/, @files;
-#@files = grep !/\.ebuild$/, @files;
-
-if (@ebuilds) {
- open C, $vcs{$vcs}{diff}.@ebuilds." 2>&1 |" or die "Can't run: ".$vcs{$vcs}{diff}."$!\n";
- $_ = <C>;
- while (defined $_) {
- if (/^$vcs diff: (([^\/]*?)\.ebuild) was removed/) {
- push @files, $1;
- }
- elsif (/^Index: (([^\/]*?)\.ebuild)\s*$/) {
- my ($f, $v) = ($1, $2);
- # check if more than just copyright date changed.
- # skip some lines
- foreach(1..$vcs{$vcs}{skip}){
- $_ = <C>;
- }
- while (<C>) {
- last if /^[A-Za-z]/;
- if (/^[-+](?!# Copyright)/) {
- push @files, $f;
- last;
- }
- }
- # at this point we've either added $f to @files or not,
- # and we have the next line in $_ for processing
- next;
- }
- elsif (/^$vcs.*?: (([^\/]*?)\.ebuild) is a new entry/) {
- push @files, $1;
- push @new_versions, $2; # new ebuild, will create a new entry
- }
- # other cvs output is ignored
- $_ = <C>;
- }
-}
-close C;
-
-# When a package move occurs, the versions appear to be new even though they are
-# not. Trim them from @new_versions in that case.
-@new_versions = grep { $text !~ /^\*\Q$_\E\s/m } @new_versions;
-
-# Check if we have any files left, otherwise re-insert ebuild list
-# (of course, both might be empty anyway)
-@files = @ebuilds unless (@files);
-
-# Allow ChangeLog entries with no changed files, but give a fat warning
-unless (@files) {
- print STDERR "**\n";
- print STDERR "** NOTE: No non-trivial changed files found. Normally echangelog\n";
- print STDERR "** should be run after all affected files have been added and/or\n";
- print STDERR "** modified. Did you forget to cvs add?\n";
- print STDERR "**\n";
- @files = sort sortfunc @trivial;
- @files = qw/ChangeLog/ unless @files; # last resort to put something in the list
-}
-
-# Get the input from the cmdline, editor or stdin
-if ($ARGV[0]) {
- $input = "@ARGV";
-} else {
- # Testing for defined() allows ECHANGELOG_EDITOR='' to cancel EDITOR
- $editor = defined($ENV{'ECHANGELOG_EDITOR'}) ? $ENV{'ECHANGELOG_EDITOR'} :
- $ENV{'EDITOR'} || undef;
- if ($editor) {
- system("$editor ChangeLog.new");
- if ($? != 0) {
- # This usually happens when the editor got forcefully killed; and
- # the terminal is probably messed up: so we reset things.
- system('/usr/bin/stty sane');
- print STDERR "Editor died! Reverting to stdin method.\n";
- undef $editor;
- } else {
- if (open I, "<ChangeLog.new") {
- local $/ = undef;
- $input = <I>;
- close I;
- } else {
- print STDERR "Error opening ChangeLog.new: $!\n";
- print STDERR "Reverting to stdin method.\n";
- undef $editor;
- }
- unlink 'ChangeLog.new';
- }
- }
- unless ($editor) {
- print "Please type the log entry: use Ctrl-d to finish, Ctrl-c to abort...\n";
- local $/ = undef;
- $input = <>;
- }
-}
-die "Empty entry; aborting\n" unless $input =~ /\S/;
-
-# If there are any long lines, then wrap the input at $columns chars
-# (leaving 2 chars on left, one char on right, after adding indentation below).
-$input =~ s/^\s*(.*?)\s*\z/$1/s; # trim whitespace
-$input = Text::Wrap::fill('', '', $input) if ($input =~ /^.{80}/m);
-$input =~ s/^/ /gm; # add indentation
-
-# Prepend the user info to the input
-unless ($user = $ENV{'ECHANGELOG_USER'}) {
- my ($fullname, $username) = (getpwuid($<))[6,0];
- $fullname =~ s/,.*//; # remove GECOS, bug 80011
- $user = sprintf "%s <%s\@gentoo.org>", $fullname, $username;
-}
-# Make sure that we didn't get "root"
-die "Please set ECHANGELOG_USER or run as non-root\n" if $user =~ /<root@/;
-$date = strftime("%d %b %Y", gmtime);
-$entry = "$date; $user ";
-$entry .= join ', ', map "$actions{$_}$_", @files;
-$entry .= ':';
-$entry = Text::Wrap::fill(' ', ' ', $entry); # does not append a \n
-$entry .= "\n$input"; # append user input
-
-# Each one of these regular expressions will eat the whitespace
-# leading up to the next entry (except the two-space leader on the
-# front of a dated entry), so it needs to be replaced with a
-# double carriage-return. This helps to normalize the spacing in
-# the ChangeLogs.
-if (@new_versions) {
- # Insert at the top with a new version marker
- $text =~ s/^( .*? ) # grab header
- \s*\n(?=\ \ \d|\*|\z) # suck up trailing whitespace
- /"$1\n\n" .
- join("\n", map "*$_ ($date)", reverse @new_versions) .
- "\n\n$entry\n\n"/sxe
- or die "Failed to insert new entry (4)\n";
-} else {
- # Changing an existing patch or ebuild, no new version marker
- # required
- $text =~ s/^( .*? ) # grab header
- \s*\n(?=\ \ \d|\*|\z) # suck up trailing whitespace
- /$1\n\n$entry\n\n/sx
- or die "Failed to insert new entry (3)\n";
-}
-
-sub update_copyright {
- my ($t) = @_;
- (my $year = $date) =~ s/.* //;
- $t =~ s/^# Copyright \d+(?= )/$&-$year/m or
- $t =~ s/^(# Copyright \d+)-(\d+)/$1-$year/m;
- return $t;
-}
-
-# Update the copyright year in the ChangeLog
-$text = update_copyright($text);
-
-# Write the new ChangeLog
-open O, '>ChangeLog.new' or die "Can't open ChangeLog.new for output: $!\n";
-print O $text or die "Can't write ChangeLog.new: $!\n";
-close O or die "Can't close ChangeLog.new: $!\n";
-
-# Update affected ebuild copyright dates. There is no reason to update the
-# copyright lines on ebuilds that haven't changed. I verified this with an IP
-# lawyer.
-for my $e (grep /\.ebuild$/, @files) {
- my ($etext, $netext);
- open E, "<$e" or warn("Can't read $e to update copyright year\n"), next;
- { local $/ = undef; $etext = <E>; }
- close E;
-
- # Attempt the substitution and compare
- $netext = update_copyright($etext);
- next if $netext eq $etext; # skip this file if no change.
-
- # Write the new ebuild
- open E, ">$e.new" or warn("Can't open $e.new\n"), next;
- print E $netext and
- close E or warn("Can't write $e.new\n"), next;
-
- # Move things around and show the diff
- system "diff -U 0 $e $e.new";
- rename "$e.new", $e or warn("Can't rename $e.new: $!\n");
-}
-
-# Move things around and show the ChangeLog diff
-system 'diff -Nu ChangeLog ChangeLog.new';
-rename 'ChangeLog.new', 'ChangeLog' or die "Can't rename ChangeLog.new: $!\n";
-
-# Okay, now we have a starter ChangeLog to work with.
-# The text will be added just like with any other ChangeLog below.
-# Add the new ChangeLog to cvs before continuing.
-if (open F, $vcs{$vcs}{entries} ) {
- system("$vcs{$vcs}{add} ChangeLog") unless (scalar grep /\/?ChangeLog\/?/, <F>);
-}
-
-# vim:sw=4 ts=8 expandtab