Preparing for Gentoolkit relaunch; added basic gentoolkit library.
authorkarltk <karltk@gentoo.org>
Sat, 26 Jul 2003 20:50:03 +0000 (20:50 -0000)
committerkarltk <karltk@gentoo.org>
Sat, 26 Jul 2003 20:50:03 +0000 (20:50 -0000)
svn path=/; revision=32

12 files changed:
trunk/ChangeLog
trunk/TODO
trunk/src/dep-clean/dep-clean
trunk/src/echangelog/AUTHORS [new file with mode: 0644]
trunk/src/echangelog/README [new file with mode: 0644]
trunk/src/echangelog/echangelog [new file with mode: 0644]
trunk/src/echangelog/echangelog.1 [new file with mode: 0644]
trunk/src/echangelog/echangelog.pod [new file with mode: 0644]
trunk/src/ekeyword/AUTHORS [new file with mode: 0644]
trunk/src/ekeyword/README [new file with mode: 0644]
trunk/src/ekeyword/ekeyword [new file with mode: 0644]
trunk/src/etc-update/etc-update [new file with mode: 0755]

index a32edde7baed0b7178417a6a0cbefd01543ec2e9..6f1bc41f9115c38704367cdfaef0eab3d44c02ed 100644 (file)
@@ -1,4 +1,16 @@
 
+2003-06-26 Karl Trygve Kalleberg <karltk@gentoo.org>
+       * Added echangelog, by agenkin
+       * Added ekeyword, by agenkin
+       * Added gentoolkit, the common python library for all Gentoolkit
+       tools.
+       * Revived pkg-size as a testbed for the gentoolkit library
+       * Fixed some minor issues in qpkg
+       * Added revdep-rebuild-1
+       * Added revdep-rebuild-2
+       * Restructuring etcat
+       * Fixed some minor issues in dep-clean
+
 2002-11-21 Karl Trygve Kalleberg <karltk@gentoo.org>
        * Renamed pkg-size to gentool-package-size
        * Renamed pst-package-count to gentool-package-count
index 8b137891791fe96927ad78e64b0aad7bded08bdc..f85718a476939fdc74e6c47ad7930684675a2d58 100644 (file)
@@ -1 +1,13 @@
-
+- merge dep-clean and pkg-clean, use portage
+- rewrite ekeywords and echangelog to use portage
+- extract helper code from etcat
+- rewrite qpkg to use portage
+- rewrite epm to use portage
+- merge emerge-rsync and emerge-webrsync
+- drop pkg-size (callfwd to etcat size)
+- merge change and echangelog
+- merge useflag and euse
+- rewrite revdep-rebuild to use portage
+- rewrite distfiles-clean to use portage
+- rewrite etc-update to use portage, add UI
+- add genlop
index 5ab317c26be908b6753d9998850f4bdcf5d1da4b..b71042c74aebf98034cb840fb5fd95554b57afcc 100644 (file)
@@ -1,4 +1,4 @@
-#!/bin/bash
+#! /bin/bash
 #Shows unrequired packages and missing dependencies.
 #Author/Maintainer: Brandon Low <lostlogic@gentoo.org>
 #Author: Jerry Haltom <ssrit@larvalstage.net>
diff --git a/trunk/src/echangelog/AUTHORS b/trunk/src/echangelog/AUTHORS
new file mode 100644 (file)
index 0000000..36d5bfd
--- /dev/null
@@ -0,0 +1 @@
+Aron Griffis <agriffis@gentoo.org>
diff --git a/trunk/src/echangelog/README b/trunk/src/echangelog/README
new file mode 100644 (file)
index 0000000..5bb0444
--- /dev/null
@@ -0,0 +1,20 @@
+Package : echangelog
+Version : 0.1.0
+Author  : See AUTHORS
+
+MOTIVATION
+
+Update the ChangeLog for an ebuild. 
+
+MECHANICS
+
+N/A
+
+IMPROVEMENTS
+
+- Should rewrite to Python, and use Portage directly to select candidate
+  ebuild catalogs.
+- Should check the well-formedness of the current ChangeLog.
+
+For improvements, send a mail to agriffis@gentoo.org or make out a bug at 
+bugs.gentoo.org.
diff --git a/trunk/src/echangelog/echangelog b/trunk/src/echangelog/echangelog
new file mode 100644 (file)
index 0000000..f9fcba1
--- /dev/null
@@ -0,0 +1,168 @@
+#!/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 = 79;
+$Text::Wrap::unexpand = 0;
+
+my @files = ();
+my ($input, $entry, $user, $date, $text, $version);
+my %versions = ();
+
+# 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/;
+        # Okay, now we have a starter ChangeLog to work with.
+        # The entry will be added just like with any other ChangeLog.
+    } else {
+        die "This should be run in a directory with ebuilds...\n";
+    }
+}
+
+# Figure out what has changed around here
+open C, 'cvs diff --brief 2>&1 |' or die "Can't run cvs diff: $!\n";
+while (<C>) {
+    /ChangeLog/ and next;
+       if (/^cvs.*?: (([^\/]*?)\.ebuild) was removed/) { 
+               push @files, $1;
+               $versions{$2} = 0;      # existing ebuild that was removed
+       }
+    elsif (/^cvs.*?: (\S+) was removed/) {
+               push @files, $1;
+               # existing file that has been removed
+       }
+       elsif (/^Index: (([^\/]*?)\.ebuild)\s*$/) { 
+               push @files, $1;
+               $versions{$2} = 0;      # existing ebuild that has changed
+       }
+       elsif (/^Index: (\S+)/) {
+               push @files, $1;
+               # existing file, but not an ebuild, so no %version entry
+       }
+       elsif (/^cvs.*?: (([^\/]*?)\.ebuild) is a new entry/) { 
+               push @files, $1;
+               $versions{$2} = -1;     # new ebuild, will create a new entry
+       }
+       elsif (/^cvs.*?: (\S+) is a new entry/) {
+        push @files, $1;
+               # new file, but not an ebuild, so no %version entry
+       }
+       # other cvs output is ignored
+}
+close C;
+die "No changed files found (did you forget to cvs add?)\n" unless @files;
+
+# Get the input from the cmdline or stdin
+if ($ARGV[0]) {
+    $input = "@ARGV";
+} else {
+    local $/ = undef;
+    print "Please type the log entry, finish with ctrl-d\n";
+    $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 each end 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
+$user = $ENV{'ECHANGELOG_USER'} ||
+        sprintf("%s <%s\@gentoo.org>", (getpwuid($<))[6,0]);
+# 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", localtime);
+$entry = "$date; $user ";
+$entry .= join ', ', grep !/files.digest|Manifest/, @files;  # don't list digests
+$entry .= ':';
+$entry = Text::Wrap::fill('  ', '  ', $entry);  # does not append a \n
+$entry .= "\n$input";                           # append user input
+
+# Find the version that's highest in the file (or determine if we're
+# adding a new version).  Note that existing ebuilds have version=0,
+# new ebuilds have version=-1 to make them automatically rise to the
+# top.
+if (%versions) {
+    for (keys %versions) {
+        $versions{$_} = index $text, $_ unless $versions{$_};
+    }
+    $version = (sort { $versions{$a} <=> $versions{$b} } keys %versions)[0];
+}
+
+# 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.
+#
+# NOTE: The first two branches here are disabled via '&& 0'
+# because they use the new but unsanctioned ChangeLog format.
+if (0 && !defined $version) { # <--- NOTE disabled via '0'
+       # Changing a patch or something, not an ebuild, so put the entry
+       # after the first *version line (really guessing)
+       $text =~ s/^( \*.*? )             # find the *version line
+                               \s*\n(?=\ \ \d|\*|\z) # suck up trailing whitespace
+                               /$1\n\n$entry\n\n/mx
+               or die "Failed to insert new entry (1)\n";
+} elsif (0 && $versions{$version} > -1) { # <--- NOTE disabled via '0'
+       # Insert after the *version line
+       $text =~ s/^( \*\Q$version\E )    # find the *version line = $1
+                               (?:\.|\.ebuild)?      # some poorly formed entries
+                               \s+ ( \(.*\) )        # (date) = $2
+                               \s*\n(?=\ \ \d|\*|\z) # suck up trailing whitespace
+                               /$1 $2\n\n$entry\n\n/mx
+               or die "Failed to insert new entry (2)\n";
+} elsif (!defined $version || $versions{$version} > -1) {
+       # 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";
+} else {
+       # Insert at the top with a new version marker
+       $text =~ s/^( .*? )                               # grab header
+                               \s*\n(?=\ \ \d|\*|\z) # suck up trailing whitespace
+                               /$1\n\n*$version ($date)\n\n$entry\n\n/sx
+               or die "Failed to insert new entry (4)\n";
+}
+
+# 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";
+
+# Move things around
+system 'diff -Nu ChangeLog ChangeLog.new';
+rename 'ChangeLog.new', 'ChangeLog' or die "Can't rename: $!\n";
diff --git a/trunk/src/echangelog/echangelog.1 b/trunk/src/echangelog/echangelog.1
new file mode 100644 (file)
index 0000000..487fcfc
--- /dev/null
@@ -0,0 +1,270 @@
+.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13
+.\"
+.\" 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.  | will give a
+.\" real vertical bar.  \*(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-|\(bv\*(Tr
+.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\}
+.\"
+.\" 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.
+.if \nF \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    nr % 0
+.    rr F
+.\}
+.\"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" 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 "2003-04-27" "perl v5.8.0" "User Contributed Perl Documentation"
+.SH "NAME"
+echangelog \- 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.
+.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 'cvs commit' to add this file permanently
+.Ve
+.PP
+.Vb 13
+\&  $ echangelog 'New ebuild, thanks to Harvey McGillicuddy'
+\&  --- 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 'cvs commit' to add this file permanently
+.Ve
+.PP
+.Vb 6
+\&  $ echangelog 'Bump revision to fix bug #999'
+\&  --- 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$
+.Ve
+.PP
+.Vb 6
+\&  +*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)
+.Ve
+.PP
+.Vb 1
+\&     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$
+.Ve
+.PP
+.Vb 8
+\&  +*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)
+.Ve
+.PP
+.Vb 1
+\&     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/echangelog.pod b/trunk/src/echangelog/echangelog.pod
new file mode 100644 (file)
index 0000000..0612aa9
--- /dev/null
@@ -0,0 +1,131 @@
+=head1 NAME
+
+echangelog - update portage ChangeLogs
+
+=head1 SYNOPSIS
+
+echangelog [ I<text> ]
+
+=head1 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 I<text> is not provided on the command-line,
+echangelog prompts for it.
+
+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 "cvs add" on your files, otherwise
+echangelog won't know those files are part of the update.
+
+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 "echangelog blah" so that the header lines
+are computed correctly, then edit and change "blah" to your preferred
+text.
+
+=head1 OPTIONS
+
+Presently echangelog is simple enough that it supplies no options.
+Probably I'll add B<--help> and B<--version> in the future, but for
+now it's enough to track the gentoolkit version.
+
+=head1 EXAMPLES
+
+To create a ChangeLog for a completely new package.  The header is
+parsed from skel.ebuild.
+
+  $ cvs add metalog-0.1.ebuild
+  cvs server: use 'cvs commit' to add this file permanently
+
+  $ echangelog 'New ebuild, thanks to Harvey McGillicuddy'
+  --- 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
+  +
+
+To bump a revision.  Note you need to "cvs add" so that echangelog
+will notice the new file.
+
+  $ cvs add metalog-0.1-r1.ebuild
+  cvs server: use 'cvs commit' to add this file permanently
+
+  $ echangelog 'Bump revision to fix bug #999'
+  --- 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 :
+
+For a multi-line entry, omit the command-line arg.
+
+  $ 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 :
+
+=head1 ENVIRONMENT VARIABLES
+
+=over
+
+=item ECHANGELOG_USER
+
+If echangelog can't figure out your username for the entry, you should
+set ECHANGELOG_USER.  For example, export ECHANGELOG_USER="Aron
+Griffis <agriffis@gentoo.org>"
+
+=back
+
+=head1 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 "new" ChangeLog format was never agreed upon by
+the Gentoo developers.  Unfortunately the existence of both formats
+will undoubtedly cause much confusion.
+
+This also means that the examples above are wrong, since I just copied
+them from some old email.  However they're not much wrong. ;-)
+
+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/ekeyword/AUTHORS b/trunk/src/ekeyword/AUTHORS
new file mode 100644 (file)
index 0000000..36d5bfd
--- /dev/null
@@ -0,0 +1 @@
+Aron Griffis <agriffis@gentoo.org>
diff --git a/trunk/src/ekeyword/README b/trunk/src/ekeyword/README
new file mode 100644 (file)
index 0000000..ec7ff5e
--- /dev/null
@@ -0,0 +1,20 @@
+Package : ekeyword
+Version : 0.1.0
+Author  : See AUTHORS
+
+MOTIVATION
+
+Update the KEYWORDS in an ebuild.
+
+MECHANICS
+
+N/A
+
+IMPROVEMENTS
+
+- Should rewrite to Python, and use Portage directly to select candidate
+  ebuilds.
+- Should add entry to ChangeLog.
+
+For improvements, send a mail to agriffis@gentoo.org or make out a bug at 
+bugs.gentoo.org.
diff --git a/trunk/src/ekeyword/ekeyword b/trunk/src/ekeyword/ekeyword
new file mode 100644 (file)
index 0000000..f5eb133
--- /dev/null
@@ -0,0 +1,38 @@
+#!/usr/bin/perl -w
+#
+# Copyright 2003, Gentoo Technologies, Inc.
+# Author: Aron Griffis <agriffis@gentoo.org>
+#
+# ekeyword: Update the KEYWORDS in an ebuild.  For example:
+#
+#   $ ekeyword ~alpha oaf-0.6.8-r1.ebuild
+#   12c12
+#   < KEYWORDS="x86 ppc sparc"
+#   ---
+#   > KEYWORDS="x86 ppc sparc ~alpha"
+
+
+die "syntax: ekeyword { arch | ~arch | -arch } ebuild...\n" unless @ARGV > 1;
+
+my $kw = shift @ARGV;
+(my $arch = $kw) =~ s|^[-~]||;
+
+die "$kw doesn't look like a keyword to me\n" unless $arch =~ /^\w+$/;
+
+for my $f (@ARGV) {
+    open I, "<$f"       or die "Can't read $f: $!\n";
+    open O, ">$f.new"   or die "Can't create $f.new: $!\n";
+    select O;
+
+    while (<I>) {
+        /^KEYWORDS/ or print, next;
+        s/[-~]?$arch/$kw/ || s/(.*?['"].*?)\s*(?=['"])/$1 $kw/;
+        print $_, <I> or die "Can't write $f.new: $!\n";
+    }
+
+    close I;
+    close O;
+
+    system "diff $f $f.new"; # don't die because the files might be the same
+    rename "$f.new", "$f"       or die "Can't rename: $!\n";
+}
diff --git a/trunk/src/etc-update/etc-update b/trunk/src/etc-update/etc-update
new file mode 100755 (executable)
index 0000000..a92159b
--- /dev/null
@@ -0,0 +1,72 @@
+#! /usr/bin/python
+#
+# $Header$
+#
+#  Distributed under the terms of the GNU General Public License v2
+#  Copyright (c) 2003 Karl Trygve Kalleberg
+
+import portage
+import re
+import os
+
+globals = portage.settings.configdict["globals"]
+
+for i in globals["CONFIG_PROTECT"].split():
+    print i
+
+# list all files in all CONFIG_PROTECT dirs
+# list them in the gui
+# one-by-one:
+#  - is update to header only? 
+#  - is the original unmodified from the previous package? (not checkable - duh!)
+#  - 
+
+class Config:
+    pass
+
+def loadConfig():
+    cfg = Config()
+    globals = portage.settings.configdict["globals"]
+    cfg.config_protect = globals["CONFIG_PROTECT"].split()
+    return cfg
+
+def _recurseFiles(path):
+    files = []
+    if os.path.exists(path):
+        try:
+            tmpfiles = os.listdir(path)
+            for i in tmpfiles:
+                fn = path + "/" + i
+                if os.path.isdir(fn):
+                    files += _recurseFiles(fn)
+                elif os.path.isfile(fn):
+                    m = re.search("\._cfg...._",fn)
+                    if m:
+                        files.append(fn)
+                else:
+                    print "What is this anyway?:", fn
+        except OSError:
+            print "Access denied:", path
+            
+    return files
+                
+def findAllFiles(config):
+    files = []
+    for i in config.config_protect:
+        files += _recurseFiles(i)
+    return files
+
+def displayFiles(config,files):
+    print files
+
+def main():
+    config = loadConfig()
+    files = findAllFiles(config)
+    displayFiles(config,files)
+    
+    
+if __name__ == "__main__":
+    try:
+        main()
+    except KeyboardInterrupt:
+        print "Operation aborted!"