diff options
Diffstat (limited to 'trunk/src/echangelog')
| -rw-r--r-- | trunk/src/echangelog/AUTHORS | 1 | ||||
| -rw-r--r-- | trunk/src/echangelog/ChangeLog | 84 | ||||
| -rw-r--r-- | trunk/src/echangelog/Makefile | 26 | ||||
| -rw-r--r-- | trunk/src/echangelog/README | 11 | ||||
| -rw-r--r-- | trunk/src/echangelog/TODO | 0 | ||||
| -rwxr-xr-x | trunk/src/echangelog/echangelog | 711 | ||||
| -rw-r--r-- | trunk/src/echangelog/echangelog.1 | 270 | ||||
| -rw-r--r-- | trunk/src/echangelog/test/TEST.pm | 26 | ||||
| -rw-r--r-- | trunk/src/echangelog/test/templates/test.patch | 6 | ||||
| -rw-r--r-- | trunk/src/echangelog/test/templates/vcstest-0.0.1.ebuild | 16 | ||||
| -rwxr-xr-x | trunk/src/echangelog/test/test.sh | 178 |
11 files changed, 0 insertions, 1329 deletions
diff --git a/trunk/src/echangelog/AUTHORS b/trunk/src/echangelog/AUTHORS deleted file mode 100644 index 36d5bfd..0000000 --- a/trunk/src/echangelog/AUTHORS +++ /dev/null @@ -1 +0,0 @@ -Aron Griffis <agriffis@gentoo.org> diff --git a/trunk/src/echangelog/ChangeLog b/trunk/src/echangelog/ChangeLog deleted file mode 100644 index c1c5885..0000000 --- a/trunk/src/echangelog/ChangeLog +++ /dev/null @@ -1,84 +0,0 @@ -26 Mar 2006 Aron Griffis <agriffis@gentoo.org> - * echangelog: Don't warn about missing ebuilds when updating - copyrights #120061 - -27 Apr 2005 Aron Griffis <agriffis@gentoo.org> - * more changes for #90326; report all trivial files if no significant - changes can be found - -26 Apr 2005 Aron Griffis <agriffis@gentoo.org> - * detect conflicts explicitly - * report ChangeLog in the list of files if it's the only file that is - changing #90326 - -23 Mar 2005 Aron Griffis <agriffis@gentoo.org> - * handle package moves without adding new version lines - -08 Mar 2005 Aron Griffis <agriffis@gentoo.org> - * don't complain about cvs add of digests #84377 - * use gmtime instead of localtime - -07 Mar 2005 Aron Griffis <agriffis@gentoo.org> - * report all changed versions #84332 - -25 Feb 2005 Aron Griffis <agriffis@gentoo.org> - * strip GECOS #80011 - -09 Nov 2004 Aron Griffis <agriffis@gentoo.org> - * change "cvs diff -fU 0" => "cvs -f diff U0" because -f is a - global option, not a diff option - -08 Nov 2004 Aron Griffis <agriffis@gentoo.org> - * call cvs with -f to refrain from using .cvsrc, which might - contain conflicting options - * fix auto-addition of ChangeLog; last attempt was broken - -03 Nov 2004 Aron Griffis <agriffis@gentoo.org> - * abort when there are unresolved files (files that aren't under - revision control) just like repoman - * auto-add to cvs when a new ChangeLog is created - -15 Sep 2004 Aron Griffis <agriffis@gentoo.org> - * fix the wrapping to fit in 80 columns properly. It was - previously possible to get lines with 81 chars. Thanks to - ciaranm for reporting. - -29 Mar 2004 Aron Griffis <agriffis@gentoo.org> - * fix bug 46111 by testing for /<root@/ instead of / root@/ - -28 Mar 2004 Aron Griffis <agriffis@gentoo.org> - * apply patch from plasmaroo, with minor modifications, to enable EDITOR - and +- support - -27 Mar 2004 Michael Sterrett <mr_bones_@gentoo.org> - * don't fall out of the loop if update_copyright() didn't change - anything. Just go on to the next file. - -21 Mar 2004 Aron Griffis <agriffis@gentoo.org> - * Fix typo $0 -> 0 - -19 Mar 2004 Aron Griffis <agriffis@gentoo.org> - * Remove debugging output - * Fix $v bug introduced in last commit - -16 Mar 2004 Aron Griffis <agriffis@gentoo.org> - * Make Feb 17 behavior work without Feb 20 bug :-) - * Release as version 0.2.0 - -20 Feb 2004 Aron Griffis <agriffis@gentoo.org> - * Only update copyrights on modified ebuilds, otherwise if you run - echangelog again, it reports that all the ebuilds have been updated! - The copyright year issue would be better solved on Jan 1 of each year by - a separate script. - -17 Feb 2004 Aron Griffis <agriffis@gentoo.org> - * Update copyrights on all ebuilds, not just the modified ones - -07 Jan 2004 Aron Griffis <agriffis@gentoo.org> - * Updated Makefile to understand building man-page from pod - * Removed static man-page in favor of generated man-page from pod - * Added copyright year updating - * Allow echangelog to run even when no files have changed - -2004-01-07 Karl Trygve Kalleberg <karltk@gentoo.org> - * Added Makefile diff --git a/trunk/src/echangelog/Makefile b/trunk/src/echangelog/Makefile deleted file mode 100644 index 4825683..0000000 --- a/trunk/src/echangelog/Makefile +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright 2004 Karl Trygve Kalleberg <karltk@gentoo.org> -# Copyright 2004 Gentoo Technologies, Inc. -# Distributed under the terms of the GNU General Public License v2 -# -# $Header$ - -include ../../makedefs.mak - -.PHONY: all test - -all: - -test: - cd test; sh test.sh - -dist: - mkdir -p ../../$(distdir)/src/echangelog/test/templates - cp Makefile AUTHORS README TODO ChangeLog echangelog echangelog.1 ../../$(distdir)/src/echangelog/ - cp test/TEST.pm test/test.sh ../../$(distdir)/src/echangelog/test/ - cp test/templates/test.patch test/templates/vcstest-0.0.1.ebuild ../../$(distdir)/src/echangelog/test/templates - -install: all - install -m 0755 echangelog $(bindir)/ - install -d $(docdir)/echangelog - install -m 0644 AUTHORS README $(docdir)/echangelog/ - install -m 0644 echangelog.1 $(mandir)/ diff --git a/trunk/src/echangelog/README b/trunk/src/echangelog/README deleted file mode 100644 index 77a7930..0000000 --- a/trunk/src/echangelog/README +++ /dev/null @@ -1,11 +0,0 @@ -Most of the documentation is contained in the man-page, which you can -read directly (using GNU man) by doing - - man ./echangelog.1 - -To rebuild the man-page from pod source, do - - pod2man --name=echangelog --center='Gentoolkit' \ - echangelog.pod echangelog.1 - -03 Nov 2004 agriffis diff --git a/trunk/src/echangelog/TODO b/trunk/src/echangelog/TODO deleted file mode 100644 index e69de29..0000000 --- a/trunk/src/echangelog/TODO +++ /dev/null diff --git a/trunk/src/echangelog/echangelog b/trunk/src/echangelog/echangelog deleted file mode 100755 index 551d9b9..0000000 --- a/trunk/src/echangelog/echangelog +++ /dev/null @@ -1,711 +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); -use File::Find; -use Getopt::Long; - -# 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, $year, $vcs); -my ($opt_help, $opt_strict, $opt_version); - -$opt_help = 0; -$opt_strict = 0; -$opt_version = 0; - -my %vcs = ( - cvs => { - diff => "cvs -f diff -U0", - status => "cvs -fn up", - add => "cvs -f add", - skip => 6, - regex => qr/^Index: (([^\/]*?)\.ebuild)\s*$/ - }, - svn => { - diff => "svn diff -N", - status => "svn status", - add => "svn add", - skip => 4, - regex => qr/^Index: (([^\/]*?)\.ebuild)\s*$/ - }, - git => { - diff => "git diff", - status => "git diff-index HEAD --name-status", - add => "git add", - # This value should usually be 3 but on new file mode we need skip+1. - # So 4 should be fine anyway. - skip => 4, - regex => qr/^diff \-\-git \S*\/((\S*)\.ebuild)/ - }, -); - -sub usage { - (my $usage = <<" EOF") =~ s/^\t//gm; - Usage: echangelog [options] <changelog message> - - Options: - --help err, this screen ... - --strict abort on trivial/no changes - --version show version info - EOF - print $usage; - exit 0; -} - -sub version { - my $Revision = "Last svn change rev"; - my $Date = "Last svn change date"; - my $foo = ""; - print "echangelog\n$Revision$foo \n$Date$foo\n"; - exit 0; -} - -sub getenv($) { - my $key = shift; - - # Ensure our variable exist - if ( defined($ENV{$key}) ) { - # Ensure we don't get empty variables - if ( length($ENV{$key}) > 0 ) { - return $ENV{$key}; - } - } - return undef; -} - -# Bug 264146. -# Copied from Text::Wrap. -# The only modified thing is: -# We trim _just_ tab/space etc. but not \n/\r. -# \s treats even \n/\r as whitespace. -# BUGS: -# ' test' -# ' test' -# Will end up in: -# ' test' -# '' -# 'test' -# See 'my $ps = ($ip eq $xp) ? "\n\n" : "\n";' -sub text_fill { - my ($ip, $xp, @raw) = @_; - my @para; - my $pp; - - for $pp ( split(/\n\s+/, join("\n", @raw)) ) { - $pp =~ s/[\x09|\x0B|\x0C|\x20]+/ /g; - my $x = Text::Wrap::wrap($ip, $xp, $pp); - push(@para, $x); - } - - # if paragraph_indent is the same as line_indent, - # separate paragraphs with blank lines - my $ps = ($ip eq $xp) ? "\n\n" : "\n"; - return join ($ps, @para); -} - -sub changelog_info(%) { - my %changed = @_; - - open(INFO, '>', 'ChangeLog.new'); - - print(INFO "\n"); - print(INFO "# Please enter the ChangeLog message for your changes. Lines starting\n"); - print(INFO "# with '#' will be ignored, and an empty message aborts the ChangeLog.\n"); - print(INFO "#\n# Changes:\n"); - - foreach my $key (keys(%changed)) { - if ($changed{$key} eq "+") { - printf(INFO "# new file:\t%s\n", $key); - } - elsif ($changed{$key} eq "-") { - printf(INFO "# deleted:\t%s\n", $key); - } - else { - printf(INFO "# modified:\t%s\n", $key); - } - } - - close(INFO); -} - -GetOptions( - 'help' => \$opt_help, - 'strict' => \$opt_strict, - 'version' => \$opt_version, -); - -usage() if $opt_help; -version() if $opt_version; - -# Figure out what kind of repo we are in. -if ( -d "CVS" ) { - $vcs = "cvs"; -} elsif ( -d '.svn' ) { - $vcs = "svn"; -} else { - # Respect $PATH while looking for git - if (getenv("PATH")) { - foreach my $path ( split(":", getenv("PATH")) ) { - if ( -X "$path/git" ) { - open(GIT, '-|', "git rev-parse --git-dir 2>/dev/null"); - $vcs = "git" if defined(<GIT>); - close(GIT); - last; - } - } - } - - if ( ! $vcs ) { - die "No CVS, .git, .svn directories found, what kind of repo is this?"; - } -} - -# 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 C, "portageq envvar PORTDIR |" or die "Can't find PORTDIR"; - my ($new) = <C>; - close C; - - $new =~ s/\s+$//; - open I, "< $new/skel.ChangeLog" - or die "Can't open $new/skel.ChangeLog for input: $!\n"; - { local $/ = undef; $text = <I>; } - close I; - $text =~ s/^\*.*//ms; # don't need the fake entry - } 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+)/) { - if($vcs eq "git") { - my $filename = $2; - $filename =~ /\S*\/(\S*)/; - - if( -d $1 ) { - next; - } - - push @conflicts, $1; - next; - } - - push @conflicts, $1; - next; - } elsif (/^\?\s+(\S+)/) { - if($vcs eq "git") { - my $filename = $2; - $filename =~ /\S*\/(\S*)/; - - if( -d $1 ) { - next; - } - - push @unknown, $1; - next; - } else { - push @unknown, $1; - } - - $actions{$1} = '+'; - next; - } elsif (/^([ARMD])\s+\+?\s*(\S+)/) { - my ($status, $filename) = ($1,$2); - - if($vcs eq "git") { - open P, "git rev-parse --sq --show-prefix |"; - my $prefix = <P>; - $prefix = substr($prefix, 0, -1); - close P; - - if ($filename =~ /$prefix(\S*)/) { - $filename = $1 ; - } - else { - next; - } - } - - if( -d $filename ) { - next; - } - - push @files, $filename; - ($actions{$filename} = $status) =~ tr/DARM/-+-/d; - } -} - -# git only shows files already added so we need to check for unknown files -# separately here. -if($vcs eq "git") { - find(\&git_unknown_objects, "./"); -} - -sub git_unknown_objects { - my $object = $_; - my ($dev,$ino,$mode,$nlink,$uid,$gid); - - # Ignore empty directories - git doesn't version them and cvs removes them. - if ( (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) && ! -d _ ) { - open C, $vcs." status $_ 2>&1 1>/dev/null |"; - - while (<C>) { - $_ = <C>; - push @unknown, $object; - }; - - close C; - }; -} - -# Separate out the trivial files for now -@files = grep { - !/files.digest|Manifest|ChangeLog/ or do { push @trivial, $_; 0; } -} @files; - -@unknown = grep { - !/files.digest|Manifest|ChangeLog/ 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 "$vcs 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; -} - -# Just to ensure we don't get duplicate entries. -sub mypush(\@@) { - my $aref = shift; - - foreach my $value (@_) { - push(@{$aref}, $value) if !grep(/^$value$/, @{$aref}); - } -} - -# Forget ebuilds that only have changed copyrights, unless that's all -# the changed files we have - -@ebuilds = grep /\.ebuild$/, @files; -@files = grep !/\.ebuild$/, @files; - -if (@ebuilds) { - if ($vcs eq "git") { - open C, $vcs{$vcs}{diff}." HEAD -- @ebuilds 2>&1 |" or die "Can't run: ".$vcs{$vcs}{diff}."$!\n"; - } else { - open C, $vcs{$vcs}{diff}." @ebuilds 2>&1 |" or die "Can't run: ".$vcs{$vcs}{diff}."$!\n"; - } - - $_ = <C>; - - while (defined $_) { - # only possible with cvs - if (/^$vcs diff: (([^\/]*?)\.ebuild) was removed/) { - mypush(@files, $1); - } - # We assume GNU diff output format here. - # git format: diff --git a/app-doc/repodoc/metadata.xml b/app-doc/repodoc/metadata.xml - elsif (/$vcs{$vcs}{regex}/) { - my $f = $1; - - if ($vcs eq "git") { - my $version = $2; - - while (<C>) { - last if /^deleted file mode|^index/; - if (/^new file mode/) { - mypush(@files, $f); - mypush(@new_versions, $version); - last; - } - } - } - - # check if more than just copyright date changed. - # skip some lines (vcs dependent) - foreach(1..$vcs{$vcs}{skip}) { - $_ = <C>; - } - - while (<C>) { - last if /^[A-Za-z]/; - if (/^[-+](?!# Copyright)/) { - mypush(@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/) { - mypush(@files, $1); - mypush(@new_versions, $2); - } - - # other cvs output is ignored - $_ = <C>; - } -} -close C; - -# Subversion diff doesn't identify new versions. So use the status command -if (($vcs eq "svn") and (@ebuilds)) { - open C, $vcs{$vcs}{status}." @ebuilds 2>&1 |" or die "Can't run: ".$vcs{$vcs}{status}."$!\n"; - $_ = <C>; - - while (defined $_) { - if (/^A\s+\+?\s*(([^\s]*)\.ebuild)/) { - mypush(@files, $1); - mypush(@new_versions, $2); - } - - $_ = <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 $vcs add?\n"; - print STDERR "**\n"; - - if ($opt_strict) { - print STDERR "** In strict mode, exiting\n"; - exit 1; - } - - @files = sort sortfunc @trivial; - - # last resort to put something in the list - unless (@files) { - @files = qw/ChangeLog/; - $actions{'ChangeLog'} = ""; - } -} - -# sort -@files = sort sortfunc @files; -@new_versions = sort sortfunc @new_versions; - -# Get the input from the cmdline, editor or stdin -if ($ARGV[0]) { - $input = "@ARGV"; -} else { - $editor = getenv('ECHANGELOG_EDITOR') ? getenv('ECHANGELOG_EDITOR') : getenv('EDITOR') || undef; - - if ($editor) { - # Append some informations. - changelog_info(%actions); - - 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('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); - - # Remove comments from changelog_info(). - local $/ = "\n"; - $input =~ s/^#.*//mg; - local $/ = undef; - } else { - print STDERR "Error opening ChangeLog.new: $!\n"; - print STDERR "Reverting to stdin method.\n"; - undef $editor; - } - } - unlink('ChangeLog.new') if -f '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 = text_fill(' ', ' ', $input); - -# Prepend the user info to the input -# Changes related to bug 213374; -# This sequence should be right: -# 1. GENTOO_COMMITTER_NAME && GENTOO_COMMITTER_EMAIL -# 2. GENTOO_AUTHOR_NAME && GENTOO_AUTHOR_EMAIL -# 3. ECHANGELOG_USER (fallback/obsolete?) -# 4. getpwuid().. -if ( getenv("GENTOO_COMMITTER_NAME") && getenv("GENTOO_COMMITTER_EMAIL") ) { - $user = sprintf("%s <%s>", getenv("GENTOO_COMMITTER_NAME"), getenv("GENTOO_COMMITTER_EMAIL")); -} -elsif ( getenv("GENTOO_AUTHOR_NAME") && getenv("GENTOO_AUTHOR_EMAIL") ) { - $user = sprintf("%s <%s>", getenv("GENTOO_AUTHOR_NAME"), getenv("GENTOO_AUTHOR_EMAIL")); -} -elsif ( getenv("ECHANGELOG_USER") ) { - $user = getenv("ECHANGELOG_USER"); -} -else { - 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_cat_pn { - my ($t) = @_; - my ($cwd) = getcwd(); - - $cwd =~ m|.*/(\w+-\w+\|virtual)/([^/]+)| - or die "Can't figure out category/package.. sorry!\n"; - my ($category, $package_name) = ($1, $2); - $t =~ s/^(# ChangeLog for).*/$1 $category\/$package_name/; - - return $t; -} - -# New packages and/or ones that have moved around often have stale data here. -# But only do that in places where ebuilds are around (as echangelog can be -# used in profiles/ and such places). -if (grep(/\.ebuild$/, @files)) { - $text = update_cat_pn($text); -} - -sub update_copyright { - my ($t) = @_; - (my $year = $date) =~ s/.* //; - - $t =~ s/^# Copyright \d+(?= )/$&-$year/m or - $t =~ s/^(# Copyright) \d+-(\d+)/$1 1999-$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) { - if (-s $e) { - 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 vcs before continuing. -if ($vcs eq "cvs") { - if (open F, "CVS/Entries") { - system("cvs -f add ChangeLog") unless (scalar grep /^\/ChangeLog\//, <F>); - } -} elsif ($vcs eq "svn") { - if (open F, ".svn/entries") { - system("svn add ChangeLog") unless (scalar grep /ChangeLog/, <F>); - } -} else { - system("$vcs{$vcs}{add} ChangeLog 2>&1 >> /dev/null"); -} - -# vim: set ts=4 sw=4 tw=0: diff --git a/trunk/src/echangelog/echangelog.1 b/trunk/src/echangelog/echangelog.1 deleted file mode 100644 index 1575644..0000000 --- a/trunk/src/echangelog/echangelog.1 +++ /dev/null @@ -1,270 +0,0 @@ -.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.07) -.\" -.\" Standard preamble: -.\" ======================================================================== -.de Sh \" Subsection heading -.br -.if t .Sp -.ne 5 -.PP -\fB\\$1\fR -.PP -.. -.de Sp \" Vertical space (when we can't use .PP) -.if t .sp .5v -.if n .sp -.. -.de Vb \" Begin verbatim text -.ft CW -.nf -.ne \\$1 -.. -.de Ve \" End verbatim text -.ft R -.fi -.. -.\" Set up some character translations and predefined strings. \*(-- will -.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. \*(C+ will -.\" give a nicer C++. Capital omega is used to do unbreakable dashes and -.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, -.\" nothing in troff, for use with C<>. -.tr \(*W- -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' -.ie n \{\ -. ds -- \(*W- -. ds PI pi -. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -. ds L" "" -. ds R" "" -. ds C` "" -. ds C' "" -'br\} -.el\{\ -. ds -- \|\(em\| -. ds PI \(*p -. ds L" `` -. ds R" '' -'br\} -.\" -.\" Escape single quotes in literal strings from groff's Unicode transform. -.ie \n(.g .ds Aq \(aq -.el .ds Aq ' -.\" -.\" If the F register is turned on, we'll generate index entries on stderr for -.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index -.\" entries marked with X<> in POD. Of course, you'll have to process the -.\" output yourself in some meaningful fashion. -.ie \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -.. -. nr % 0 -. rr F -.\} -.el \{\ -. de IX -.. -.\} -.\" -.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). -.\" Fear. Run. Save yourself. No user-serviceable parts. -. \" fudge factors for nroff and troff -.if n \{\ -. ds #H 0 -. ds #V .8m -. ds #F .3m -. ds #[ \f1 -. ds #] \fP -.\} -.if t \{\ -. ds #H ((1u-(\\\\n(.fu%2u))*.13m) -. ds #V .6m -. ds #F 0 -. ds #[ \& -. ds #] \& -.\} -. \" simple accents for nroff and troff -.if n \{\ -. ds ' \& -. ds ` \& -. ds ^ \& -. ds , \& -. ds ~ ~ -. ds / -.\} -.if t \{\ -. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" -. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' -. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' -. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' -. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' -. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' -.\} -. \" troff and (daisy-wheel) nroff accents -.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' -.ds 8 \h'\*(#H'\(*b\h'-\*(#H' -.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] -.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' -.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' -.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] -.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] -.ds ae a\h'-(\w'a'u*4/10)'e -.ds Ae A\h'-(\w'A'u*4/10)'E -. \" corrections for vroff -.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' -.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' -. \" for low resolution devices (crt and lpr) -.if \n(.H>23 .if \n(.V>19 \ -\{\ -. ds : e -. ds 8 ss -. ds o a -. ds d- d\h'-1'\(ga -. ds D- D\h'-1'\(hy -. ds th \o'bp' -. ds Th \o'LP' -. ds ae ae -. ds Ae AE -.\} -.rm #[ #] #H #V #F C -.\" ======================================================================== -.\" -.IX Title "echangelog 1" -.TH echangelog 1 "2009-04-28" "perl v5.10.0" "Gentoolkit" -.\" For nroff, turn off justification. Always turn off hyphenation; it makes -.\" way too many mistakes in technical documents. -.if n .ad l -.nh -.SH "NAME" -echangelog \- Gentoo: update portage ChangeLogs -.SH "SYNOPSIS" -.IX Header "SYNOPSIS" -echangelog [ \fItext\fR ] -.SH "DESCRIPTION" -.IX Header "DESCRIPTION" -This tool provides an easy way to create or update portage ChangeLogs -in Gentoo. The tool scans the current directory, which is assumed to -be a package directory such as /usr/portage/app\-editors/vim, finds -what files have been changed or added, and inserts the appropriate -entry to ChangeLog. If \fItext\fR is not provided on the command-line, -echangelog prompts for it. -.PP -All modifications should occur before running echangelog so that it -can include the appropriate file information in the ChangeLog entry. -For example, you should run \*(L"cvs add\*(R" on your files, otherwise -echangelog won't know those files are part of the update. -.PP -If your text would cause the ChangeLog entry to exceed 80 columns, it -will be rewrapped to keep the ChangeLog neat. If you need special -formatting in the ChangeLog, then you can either (1) run echangelog -with no text on the command-line, and make sure that your text won't -be too wide, (2) edit the ChangeLog manually. If you prefer (2), I'd -recommend something like \*(L"echangelog blah\*(R" so that the header lines -are computed correctly, then edit and change \*(L"blah\*(R" to your preferred -text. -.PP -In addition to updating the ChangeLog, echangelog will automatically -update the copyright year of all out-of-date ebuilds, as well as the -ChangeLog itself. These updates are included in the diff displayed by -echangelog when it finishes its work. -.SH "OPTIONS" -.IX Header "OPTIONS" -Presently echangelog is simple enough that it supplies no options. -Probably I'll add \fB\-\-help\fR and \fB\-\-version\fR in the future, but for -now it's enough to track the gentoolkit version. -.SH "EXAMPLES" -.IX Header "EXAMPLES" -To create a ChangeLog for a completely new package. The header is -parsed from skel.ebuild. -.PP -.Vb 2 -\& $ cvs add metalog\-0.1.ebuild -\& cvs server: use \*(Aqcvs commit\*(Aq to add this file permanently -\& -\& $ echangelog \*(AqNew ebuild, thanks to Harvey McGillicuddy\*(Aq -\& \-\-\- ChangeLog 1969\-12\-31 19:00:00.000000000 \-0500 -\& +++ ChangeLog.new 2003\-02\-23 14:04:06.000000000 \-0500 -\& @@ \-0,0 +1,9 @@ -\& +# ChangeLog for app\-admin/metalog -\& +# Copyright 2000\-2003 Gentoo Technologies, Inc.; Distributed under the GPL v2 -\& +# $Header$ -\& + -\& +*metalog\-0.1 (23 Feb 2003) -\& + -\& + 23 Feb 2003; Aron Griffis <agriffis@gentoo.org> metalog\-0.1.ebuild : -\& + New ebuild, thanks to Harvey McGillicuddy -\& + -.Ve -.PP -To bump a revision. Note you need to \*(L"cvs add\*(R" so that echangelog -will notice the new file. -.PP -.Vb 2 -\& $ cvs add metalog\-0.1\-r1.ebuild -\& cvs server: use \*(Aqcvs commit\*(Aq to add this file permanently -\& -\& $ echangelog \*(AqBump revision to fix bug #999\*(Aq -\& \-\-\- ChangeLog 2003\-02\-23 14:04:06.000000000 \-0500 -\& +++ ChangeLog.new 2003\-02\-23 14:07:48.000000000 \-0500 -\& @@ \-2,6 +2,11 @@ -\& # Copyright 2000\-2003 Gentoo Technologies, Inc.; Distributed under the GPL v2 -\& # $Header$ -\& -\& +*metalog\-0.1\-r1 (23 Feb 2003) -\& + -\& + 23 Feb 2003; Aron Griffis <agriffis@gentoo.org> metalog\-0.1\-r1.ebuild : -\& + Bump revision to fix bug #999 -\& + -\& *metalog\-0.1 (23 Feb 2003) -\& -\& 23 Feb 2003; Aron Griffis <agriffis@gentoo.org> metalog\-0.1.ebuild : -.Ve -.PP -For a multi-line entry, omit the command-line arg. -.PP -.Vb 10 -\& $ echangelog -\& Please type the log entry, finish with ctrl\-d -\& Bump revision to fix bug #999. Necessary to bump the revision because -\& the problem appears at run\-time, not compile\-time. This should also -\& give users the updated default configuration file. -\& \-\-\- ChangeLog 2003\-02\-23 14:09:12.000000000 \-0500 -\& +++ ChangeLog.new 2003\-02\-23 14:12:43.000000000 \-0500 -\& @@ \-2,6 +2,13 @@ -\& # Copyright 2000\-2003 Gentoo Technologies, Inc.; Distributed under the GPL v2 -\& # $Header$ -\& -\& +*metalog\-0.1\-r1 (23 Feb 2003) -\& + -\& + 23 Feb 2003; Aron Griffis <agriffis@gentoo.org> metalog\-0.1\-r1.ebuild : -\& + Bump revision to fix bug #999. Necessary to bump the revision because -\& + the problem appears at run\-time, not compile\-time. This should also -\& + give users the updated default configuration file. -\& + -\& *metalog\-0.1 (23 Feb 2003) -\& -\& 23 Feb 2003; Aron Griffis <agriffis@gentoo.org> metalog\-0.1.ebuild : -.Ve -.SH "ENVIRONMENT VARIABLES" -.IX Header "ENVIRONMENT VARIABLES" -.IP "\s-1ECHANGELOG_USER\s0" 4 -.IX Item "ECHANGELOG_USER" -If echangelog can't figure out your username for the entry, you should -set \s-1ECHANGELOG_USER\s0. For example, export ECHANGELOG_USER=\*(L"Aron -Griffis <agriffis@gentoo.org>\*(R" -.SH "NOTES" -.IX Header "NOTES" -As of the most recent version of echangelog (when this man-page -appeared), echangelog puts all new entries at the top of the file -instead of finding the appropriate *version line within the file. -This is because that \*(L"new\*(R" ChangeLog format was never agreed upon by -the Gentoo developers. Unfortunately the existence of both formats -will undoubtedly cause much confusion. -.PP -This also means that the examples above are wrong, since I just copied -them from some old email. However they're not much wrong. ;\-) -.PP -This tool was written by Aron Griffis <agriffis@gentoo.org>. Bugs -found should be filed against me at http://bugs.gentoo.org/ diff --git a/trunk/src/echangelog/test/TEST.pm b/trunk/src/echangelog/test/TEST.pm deleted file mode 100644 index 6632148..0000000 --- a/trunk/src/echangelog/test/TEST.pm +++ /dev/null @@ -1,26 +0,0 @@ -# We just return a static/predefined date because we're working with -# static md5 checksums. - -package TEST; - -use strict; -use warnings; - -BEGIN { - use Exporter(); - our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); - - $VERSION = 1.00; - - @ISA = qw(Exporter); - @EXPORT = qw(&strftime); - %EXPORT_TAGS = ( ); - @EXPORT_OK = qw(); -} -our @EXPORT_OK; - -sub strftime { - return "01 Jan 2009"; -} - -1; diff --git a/trunk/src/echangelog/test/templates/test.patch b/trunk/src/echangelog/test/templates/test.patch deleted file mode 100644 index 72d46fa..0000000 --- a/trunk/src/echangelog/test/templates/test.patch +++ /dev/null @@ -1,6 +0,0 @@ ---- test.patch 2009-04-28 14:13:26.171225175 +0200 -+++ test.patch 2009-04-28 14:12:26.246497830 +0200 -@@ -0,0 +1,3 @@ -+This is just an example. -+Its used for several echangelog tests. -+ diff --git a/trunk/src/echangelog/test/templates/vcstest-0.0.1.ebuild b/trunk/src/echangelog/test/templates/vcstest-0.0.1.ebuild deleted file mode 100644 index 2824b83..0000000 --- a/trunk/src/echangelog/test/templates/vcstest-0.0.1.ebuild +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright 1999-2009 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: $ - -DESCRIPTION="echangelog test ebuild" -HOMEPAGE="" -SRC_URI="" - -LICENSE="" -SLOT="0" -KEYWORDS="" -IUSE="" - -DEPEND="" -RDEPEND="" - diff --git a/trunk/src/echangelog/test/test.sh b/trunk/src/echangelog/test/test.sh deleted file mode 100755 index f2052f3..0000000 --- a/trunk/src/echangelog/test/test.sh +++ /dev/null @@ -1,178 +0,0 @@ -#!/bin/sh - -source /etc/init.d/functions.sh - -SUPPORTED_VCS=( "cvs" "svn" "git" ) -VCSTEST="echangelog-test/vcstest" -_ROOT=$(pwd) - -export ECHANGELOG_USER="Just a test <echangelogtest@gentoo.org>" - -MD5_INIT="34d54bc2ab1a2154b0c7bd5cdd7f6119" -MD5_PATCH="db1ab89bb7374824d0f198078f79a83f" -MD5_REVBUMP="31ddfa60d2ae4dd1fccd7e3d2bd2c06c" -MD5_COPYRIGHT="6f39fa409ea14bb6506347c53f6dee50" -MD5_OBSOLETE="0aedadf159c6f3add97a3f79fb867221" -MD5_FINAL="17eb0df69f501cc6fdaffebd118b7764" - -function md5() { - local fname=$1 - echo $(md5sum ${fname} | awk '{ print $1 }') -} - -function ech() { - local bin=$1 - local msg=$2 - - perl -I$(dirname $(dirname ${bin})) ${bin} "${msg}" -} - -function make_test() { - local root=$1 - local vcs=$2 - - local echangelog="${root}/tmp/echangelog" - local tmp="${root}/tmp/${vcs}" - local template="${root}/templates" - - cd $root - mkdir -p ${tmp} - cd ${tmp} - - [[ "${vcs}" == "cvs" ]] && mkdir -p ${tmp}/cvsroot - [[ "${vcs}" == "svn" ]] && mkdir -p ${tmp}/svnroot - - if [[ "${vcs}" == "git" ]]; - then - git init - touch .gitignore - git add .gitignore - git commit -a -m 'Initial Commit' - elif [[ "${vcs}" == "svn" ]]; - then - svnadmin create svnroot - svn co file://${tmp}/svnroot svn - cd svn - elif [[ "${vcs}" == "cvs" ]]; - then - CVSROOT="${tmp}/cvsroot" cvs init - mkdir cvsroot/cvs - cvs -d:local:${tmp}/cvsroot co cvs - cd cvs - fi - - mkdir -p ${VCSTEST} - - cp ${template}/vcstest-0.0.1.ebuild ${VCSTEST} - ${vcs} add $(dirname ${VCSTEST}) - if [[ "${vcs}" == "cvs" ]]; - then - ${vcs} add ${VCSTEST} - ${vcs} add "${VCSTEST}/vcstest-0.0.1.ebuild" - fi - - cd ${VCSTEST} - ech ${echangelog} 'New ebuild for bug <id>.' - - if [[ "${MD5_INIT}" != "$(md5 ChangeLog)" ]]; - then - eerror "WRONG MD5_INIT!" - fi - - mkdir files - cp ${template}/test.patch files - if [[ "${vcs}" == "cvs" ]]; - then - ${vcs} add files/ - ${vcs} add files/test.patch - else - ${vcs} add files - fi - - ech ${echangelog} "Added adittional patch to fix foo." - - if [[ "${MD5_PATCH}" != "$(md5 ChangeLog)" ]]; - then - eerror "WRONG MD5_PATCH!" - fi - - if [[ "${vcs}" == "svn" ]]; - then - ${vcs} commit -m 'New ebuild for bug <id>.' ../ - else - ${vcs} commit -m 'New ebuild for bug <id>.' - fi - - [[ "${vcs}" == "cvs" ]] && sed -i -e 's:# $Header\: .*$:# $Header\: $:' ChangeLog - - cp vcstest-0.0.1.ebuild vcstest-0.0.1-r1.ebuild - ${vcs} add vcstest-0.0.1-r1.ebuild - - ech ${echangelog} "Revbump..." - - if [[ "${MD5_REVBUMP}" != "$(md5 ChangeLog)" ]]; - then - eerror "WRONG MD5_REVBUMP!" - fi - - sed -i -e 's:# Copyright 1999-2009 Gentoo Foundation:# Copyright 1999-2010 Gentoo Foundation:' vcstest-0.0.1.ebuild - ech ${echangelog} "Revbump...; Just copyright changed." - - if [[ "${MD5_COPYRIGHT}" != "$(md5 ChangeLog)" ]]; - then - eerror "WRONG MD5_COPYRIGHT!" - fi - - if [[ "${vcs}" == "cvs" ]]; - then - rm -f files/test.patch - ${vcs} remove files/test.patch - else - ${vcs} rm files/test.patch - fi - - ech ${echangelog} "Revbump...; Just copyright changed; Removed obsolete patch." - - if [[ "${MD5_OBSOLETE}" != "$(md5 ChangeLog)" ]]; - then - eerror "WRONG MD5_OBSOLETE!" - fi - - echo>>vcstest-0.0.1.ebuild - ech ${echangelog} "Revbump...; Just copyright changed; Removed obsolete patch; Modified more then just the copyright." - - if [[ "${MD5_FINAL}" != "$(md5 ChangeLog)" ]]; - then - eerror "WRONG MD5_FINAL!" - fi -} - -[[ -d "${_ROOT}/tmp" ]] && rm -rf ${_ROOT}/tmp -mkdir -p ${_ROOT}/tmp - -ebegin "Preparing echangelog" - -if [[ -e ../echangelog ]]; -then - cp ../echangelog "${_ROOT}/tmp" || set $? - sed -i -e 's:use POSIX qw.*:use POSIX qw(setlocale getcwd);\nuse TEST qw(strftime);:' "${_ROOT}/tmp/echangelog" || set $? - eend ${1:-0} || exit ${1} -else - eerror "error" - eend ${1:-1} - exit 1 -fi - -for vcs in ${SUPPORTED_VCS[*]}; -do - if [[ -x "$(which ${vcs} 2>/dev/null)" ]]; - then - ebegin "Starting test with ${vcs}" - make_test $_ROOT "${vcs}" || set $? - eend ${1:-0} - else - ewarn "No ${vcs} executable found, skipping test..." - fi -done - -rm -rf "${_ROOT}/tmp" |
