Ok, last shoot, then let put this stuff to sleep. Description of the attachment at the end:
Chris Gianelloni wrote: > On Mon, 2006-01-02 at 11:25 -0600, Lance Albertson wrote: >>> I'm also for telling the users to rsync exclude the ChangeLogs if they >>> don't want them instead of getting rid of them or crippling them. >> I don't think that's really a solution. That's just a way to minimize >> what they get. If you really want to look at a solution, you should >> reduce whats actually in the changelog. All the changelogs are in CVS, >> and if someone wanted to go look back at any changes, they can either >> look at viewcvs or (hopefully soon), grab it via anoncvs. I bet you >80% >> of things in the changelogs are for things that are in the attic. I say >> we need a way to either have echangelog (or another script) to clean out >> changelog entries for things that are in the attic (and make sense to >> take out). Maybe another option would be to remove any 'version bump' >> type entries that are old as well. > > OK. I keep seeing this argument about ChangeLog stuff for ebuilds in > the Attic and I just think people might not be thinking it totally > trough. For example, I made changes to the vmware-workstation ebuilds > to force group membership a while back because of a security bug. > However, there's been another security bug since, so those changes were > made on ebuilds now in Attic, but the change is still valid in the > current ebuilds. Could ignore the revision (-r*) address this issue ? > > I don't see a problem with removing version bump and stabilization > messages, but everything else should stay in the ChangeLog for as long > as the package is still around. > >> I just don't see the point of keeping changelog entries for stuff that >> isn't even viewable in the tree anymore. We have CVS, the record will be >> there, lets use it. We can't cater to every user out there, but come up >> with a solid solution that makes sense and still gives them some form of >> ability to look back. > > Because as I stated before, there are many times where the ChangeLog > entry for an older ebuild applies to the newer ones. This is especially > true when ebuilds are simply copied for version bumps. Removing this > information removes a lot of data. Forcing users/developers to use CVS > makes it more of a hassle than the gains will give us. same as before > > Again, I think this is another case of us doing things that aren't > necessary rather than educating users. > > I wouldn't have a problem with seeing ChangeLog in a default > RSYNC_EXCLUDES with a nice comment explaining how to get the ChangeLog > files. This way we are removing the problem by default, educating > users, and still not removing any data or options for our users and > developers. > IMHO RSYNC_EXCLUDES it's a bad option, in it's extended version, exclude foo/bar could bring to every sort of problems, difficult to address (but I've never tryed that ;-). The attached bash script attempt to purge the ChangeLog (it broke a bit but could be solved) It clean out all entries without corresponding files (*.ebuild files/*) It left in place date of addition of euilds and developer that changed something The test is moved in two new files Changelog.{new,old} be careful, it leave a ".tmp__revisions" in place The size of the resulting ChangeLog may be less han 50% than the original.
#! /bin/bash function exit_no_changelog() { echo "No ChangeLog found" exit 1 } function main() { local ChangeLog="ChangeLog" local ChangeLogNew="ChangeLog.new" local ChangeLogOld="ChangeLog.old" local inside=0 local buffer CWD="." pushd "${CVD}" &> /dev/null [[ -f "${ChangeLog}" ]] || exit_no_changelog # create a list of each version, remove gentoo specific revisions #grep ^\* ChangeLog \ # | sed -e 's/^*//;s/ .*//;s/-r[[:digit:]][[:digit:]]*//' \ # | sort \ # | uniq \ # > .tmp__versions # create a list of each version grep ^\* "${ChangeLog}" \ | sed -e 's/^*//;s/ .*//' \ | sort \ | uniq \ > .tmp__revisions # keep track of each modify and author # FIXME this is a sed job local entry_pattern='[[:digit:]][[:digit:]]\ [[:alnum:]][[:alnum:]][[:alnum:]]\ 20[[:digit:]][[:digit:]]; ' echo -n "" > .tmp__revisions while read line ; do case "${line}" in ${entry_pattern}*:*) echo "${line}" >> .tmp__revisions ;; ${entry_pattern}*) echo -n ${line} >> .tmp__revisions inside=1 ;; *:*) if [[ inside -eq 1 ]] ; then echo ${line} >> .tmp__revisions inside=0 fi ;; *) [[ inside -eq 1 ]] && echo -n ${line} >> .tmp__revisions ;; esac done < "${ChangeLog}" sed -i -e 's/:.*$/:/' .tmp__revisions # mark revisions to keep local sed_prg f for e in *.ebuild files/* ; do buffer="${e%.ebuild}" buffer="${buffer%-r*}" sed_prg="${sed_prg};s!^\(.*${buffer}.*$\)!K\1!" done sed -i -e "${sed_prg}" \ -e 's/^KK*/K/' \ -e 's/^\([^K]\)/D\1/' \ .tmp__revisions # attempt to write the purged ChangeLog echo -n "" > "${ChangeLogNew}" echo -n "" > "${ChangeLogOld}" local cl="${ChangeLogNew}" inside=0 while read line ; do case "${line}" in \#*) echo "${line}" >> "${ChangeLogNew}" ;; \**) echo "${line}" >> "${ChangeLogNew}" echo "${line}" >> "${ChangeLogOld}" ;; ${entry_pattern}*) if $(grep -q "D${line%%:*}" .tmp__revisions) ; then cl="${ChangeLogOld}" echo " ${line%%>*}>:" >> "${ChangeLogNew}" else cl="${ChangeLogNew}" fi echo " ${line}" >> "${cl}" ;; *) echo " ${line}" >> "${cl}" ;; esac done < "${ChangeLog}" # further cleaning sed -i -e 's/[ \t]*$//' "${ChangeLogNew}" sed -i -e '$!N; /^ .. ... ....; \(.*\)\n .. ... ....; \1$/!P; D' "${ChangeLogNew}" popd &> /dev/null } main