[yum-cvs] yum-utils: Makefile tools/git2cl tools/README
Tim Lauridsen
timlau at linux.duke.edu
Tue Jul 24 10:03:01 UTC 2007
Makefile | 13 +-
tools/README | 15 ++
tools/git2cl | 308 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 330 insertions(+), 6 deletions(-)
commit a9c2c76cd0e711202797c3f64bc2d50987253bc7
Author: Tim Lauridsen <tla at rasmil.dk>
Date: Tue Jul 24 12:01:17 2007 +0200
Make the Makefile targets work with git insted of cvs.
Added tools\git2cl perl script to create ChangeLog from a git repository
diff --git a/Makefile b/Makefile
index 5808c1c..1048999 100644
--- a/Makefile
+++ b/Makefile
@@ -5,12 +5,11 @@ VERSION=$(shell awk '/Version:/ { print $$2 }' ${PKGNAME}.spec)
RELEASE=$(shell awk '/Release:/ { print $$2 }' ${PKGNAME}.spec)
WEBHOST = login.dulug.duke.edu
WEBPATH = /home/groups/yum/web/download/yum-utils/
-CVS_TAG = ${PKGNAME}-$(shell echo $(VERSION) | sed -e 's/\./-/g')
-
clean:
rm -f *.pyc *.pyo *~
rm -f test/*~
+ rm -f *.tar.gz
install:
mkdir -p $(DESTDIR)/usr/bin/
@@ -28,6 +27,7 @@ archive:
@rm -f /tmp/${PKGNAME}/${PKGNAME}-daily.spec
@mv /tmp/${PKGNAME} /tmp/${PKGNAME}-$(VERSION)
@rm -rf /tmp/${PKGNAME}-$(VERSION)/.git
+ @rm -rf /tmp/${PKGNAME}-$(VERSION)/tools
@dir=$$PWD; cd /tmp; tar cvzf $$dir/${PKGNAME}-$(VERSION).tar.gz ${PKGNAME}-$(VERSION)
@rm -rf /tmp/${PKGNAME}-$(VERSION)
@echo "The archive is in ${PKGNAME}-$(VERSION).tar.gz"
@@ -37,10 +37,11 @@ srpm: archive
rpmbuild -ts ${PKGNAME}-${VERSION}.tar.gz
release:
- @cvs commit -m "bumped yum-utils version to $(VERSION)"
+ @git commit -a -m "bumped yum-utils version to $(VERSION)"
@$(MAKE) ChangeLog
- @cvs commit -m "updated ChangeLog"
- @cvs tag $(CVS_TAG)
+ @git commit -a -m "updated ChangeLog"
+ @git tag ${PKGNAME}-$(VERSION)
+ @git push
@$(MAKE) upload
upload: archive srpm
@@ -49,7 +50,7 @@ upload: archive srpm
@rm -rf ${PKGNAME}-${VERSION}.tar.gz
ChangeLog: FORCE
- @cvs2cl --utc --follow trunk
+ @git log --pretty --numstat --summary | ./tools/git2cl > ChangeLog
FORCE:
diff --git a/tools/README b/tools/README
new file mode 100644
index 0000000..2e71f60
--- /dev/null
+++ b/tools/README
@@ -0,0 +1,15 @@
+The Tools directory contains tools to support the Makefile.
+
+The tools is not included in the tarball, they only exist in the repository
+
+TOOLS:
+
+git2cl
+======
+git2cl is a tool to create GNU Changelog from a git repository.
+
+Homepage:
+http://josefsson.org/git2cl/
+
+git Repository:
+http://repo.or.cz/w/git2cl.git
\ No newline at end of file
diff --git a/tools/git2cl b/tools/git2cl
new file mode 100755
index 0000000..aa1e8c1
--- /dev/null
+++ b/tools/git2cl
@@ -0,0 +1,308 @@
+#!/usr/bin/perl
+
+# Copyright (C) 2007 Simon Josefsson.
+#
+# The functions mywrap, last_line_len, wrap_log_entry are derived from
+# the cvs2cl tool, see <http://www.red-bean.com/cvs2cl/>:
+# Copyright (C) 2001,2002,2003,2004 Martyn J. Pearce <fluffy at cpan.org>
+# Copyright (C) 1999 Karl Fogel <kfogel at red-bean.com>
+#
+# git2cl is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# git2cl is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with git2cl; see the file COPYING. If not, write to the Free
+# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+use strict;
+use Date::Parse qw(strptime);
+use POSIX qw(strftime);
+use Text::Wrap qw(wrap);
+
+use constant EMPTY_LOG_MESSAGE => '*** empty log message ***';
+
+sub mywrap {
+ my ($indent1, $indent2, @text) = @_;
+ # If incoming text looks preformatted, don't get clever
+ my $text = Text::Wrap::wrap($indent1, $indent2, @text);
+ if ( grep /^\s+/m, @text ) {
+ return $text;
+ }
+ my @lines = split /\n/, $text;
+ $indent2 =~ s!^((?: {8})+)!"\t" x (length($1)/8)!e;
+ $lines[0] =~ s/^$indent1\s+/$indent1/;
+ s/^$indent2\s+/$indent2/
+ for @lines[1..$#lines];
+ my $newtext = join "\n", @lines;
+ $newtext .= "\n"
+ if substr($text, -1) eq "\n";
+ return $newtext;
+}
+
+sub last_line_len {
+ my $files_list = shift;
+ my @lines = split (/\n/, $files_list);
+ my $last_line = pop (@lines);
+ return length ($last_line);
+}
+
+# A custom wrap function, sensitive to some common constructs used in
+# log entries.
+sub wrap_log_entry {
+ my $text = shift; # The text to wrap.
+ my $left_pad_str = shift; # String to pad with on the left.
+
+ # These do NOT take left_pad_str into account:
+ my $length_remaining = shift; # Amount left on current line.
+ my $max_line_length = shift; # Amount left for a blank line.
+
+ my $wrapped_text = ''; # The accumulating wrapped entry.
+ my $user_indent = ''; # Inherited user_indent from prev line.
+
+ my $first_time = 1; # First iteration of the loop?
+ my $suppress_line_start_match = 0; # Set to disable line start checks.
+
+ my @lines = split (/\n/, $text);
+ while (@lines) # Don't use `foreach' here, it won't work.
+ {
+ my $this_line = shift (@lines);
+ chomp $this_line;
+
+ if ($this_line =~ /^(\s+)/) {
+ $user_indent = $1;
+ }
+ else {
+ $user_indent = '';
+ }
+
+ # If it matches any of the line-start regexps, print a newline now...
+ if ($suppress_line_start_match)
+ {
+ $suppress_line_start_match = 0;
+ }
+ elsif (($this_line =~ /^(\s*)\*\s+[a-zA-Z0-9]/)
+ || ($this_line =~ /^(\s*)\* [a-zA-Z0-9_\.\/\+-]+/)
+ || ($this_line =~ /^(\s*)\([a-zA-Z0-9_\.\/\+-]+(\)|,\s*)/)
+ || ($this_line =~ /^(\s+)(\S+)/)
+ || ($this_line =~ /^(\s*)- +/)
+ || ($this_line =~ /^()\s*$/)
+ || ($this_line =~ /^(\s*)\*\) +/)
+ || ($this_line =~ /^(\s*)[a-zA-Z0-9](\)|\.|\:) +/))
+ {
+ $length_remaining = $max_line_length - (length ($user_indent));
+ }
+
+ # Now that any user_indent has been preserved, strip off leading
+ # whitespace, so up-folding has no ugly side-effects.
+ $this_line =~ s/^\s*//;
+
+ # Accumulate the line, and adjust parameters for next line.
+ my $this_len = length ($this_line);
+ if ($this_len == 0)
+ {
+ # Blank lines should cancel any user_indent level.
+ $user_indent = '';
+ $length_remaining = $max_line_length;
+ }
+ elsif ($this_len >= $length_remaining) # Line too long, try breaking it.
+ {
+ # Walk backwards from the end. At first acceptable spot, break
+ # a new line.
+ my $idx = $length_remaining - 1;
+ if ($idx < 0) { $idx = 0 };
+ while ($idx > 0)
+ {
+ if (substr ($this_line, $idx, 1) =~ /\s/)
+ {
+ my $line_now = substr ($this_line, 0, $idx);
+ my $next_line = substr ($this_line, $idx);
+ $this_line = $line_now;
+
+ # Clean whitespace off the end.
+ chomp $this_line;
+
+ # The current line is ready to be printed.
+ $this_line .= "\n${left_pad_str}";
+
+ # Make sure the next line is allowed full room.
+ $length_remaining = $max_line_length - (length ($user_indent));
+
+ # Strip next_line, but then preserve any user_indent.
+ $next_line =~ s/^\s*//;
+
+ # Sneak a peek at the user_indent of the upcoming line, so
+ # $next_line (which will now precede it) can inherit that
+ # indent level. Otherwise, use whatever user_indent level
+ # we currently have, which might be none.
+ my $next_next_line = shift (@lines);
+ if ((defined ($next_next_line)) && ($next_next_line =~ /^(\s+)/)) {
+ $next_line = $1 . $next_line if (defined ($1));
+ # $length_remaining = $max_line_length - (length ($1));
+ $next_next_line =~ s/^\s*//;
+ }
+ else {
+ $next_line = $user_indent . $next_line;
+ }
+ if (defined ($next_next_line)) {
+ unshift (@lines, $next_next_line);
+ }
+ unshift (@lines, $next_line);
+
+ # Our new next line might, coincidentally, begin with one of
+ # the line-start regexps, so we temporarily turn off
+ # sensitivity to that until we're past the line.
+ $suppress_line_start_match = 1;
+
+ last;
+ }
+ else
+ {
+ $idx--;
+ }
+ }
+
+ if ($idx == 0)
+ {
+ # We bottomed out because the line is longer than the
+ # available space. But that could be because the space is
+ # small, or because the line is longer than even the maximum
+ # possible space. Handle both cases below.
+
+ if ($length_remaining == ($max_line_length - (length ($user_indent))))
+ {
+ # The line is simply too long -- there is no hope of ever
+ # breaking it nicely, so just insert it verbatim, with
+ # appropriate padding.
+ $this_line = "\n${left_pad_str}${this_line}";
+ }
+ else
+ {
+ # Can't break it here, but may be able to on the next round...
+ unshift (@lines, $this_line);
+ $length_remaining = $max_line_length - (length ($user_indent));
+ $this_line = "\n${left_pad_str}";
+ }
+ }
+ }
+ else # $this_len < $length_remaining, so tack on what we can.
+ {
+ # Leave a note for the next iteration.
+ $length_remaining = $length_remaining - $this_len;
+
+ if ($this_line =~ /\.$/)
+ {
+ $this_line .= " ";
+ $length_remaining -= 2;
+ }
+ else # not a sentence end
+ {
+ $this_line .= " ";
+ $length_remaining -= 1;
+ }
+ }
+
+ # Unconditionally indicate that loop has run at least once.
+ $first_time = 0;
+
+ $wrapped_text .= "${user_indent}${this_line}";
+ }
+
+ # One last bit of padding.
+ $wrapped_text .= "\n";
+
+ return $wrapped_text;
+}
+
+# main
+
+my @date;
+my $author;
+my @files;
+my $comment;
+my $merge;
+
+my $state; # 0-header 1-comment 2-files
+my $done = 0;
+
+$state = 0;
+
+while (<>) {
+ #print STDERR "debug ($state, " . (@date ? (strftime "%Y-%m-%d", @date) : "") . "): `$_'\n";
+
+ if ($state == 0) {
+ if (m,^Author: (.*),) {
+ $author = $1;
+ }
+ if (m,^Date: (.*),) {
+ @date = strptime($1);
+ }
+ if (m,^Merge: (.*),) {
+ $merge = 1;
+ }
+ $state = 1 if (m,^$,);
+ } elsif ($state == 1) {
+ $state = 2 if (m,^$,);
+ s/^ //g;
+ s/\n/ /g;
+ $comment = $comment . $_;
+ } elsif ($state == 2 && $merge) {
+ $done = 1;
+ } elsif ($state == 2) {
+ if (m,^([-0-9]+)\t([-0-9]+)\t(.*)$,) {
+ push @files, $3;
+ } elsif (m,^[^ ],) {
+ # No file changes.
+ $done = 1;
+ }
+ $done = 1 if (m,^$,);
+ }
+
+ if ($done && @date == ()) {
+ print STDERR "warning: could not parse entry\n";
+ } elsif ($done) {
+ print (strftime "%Y-%m-%d $author\n\n", @date);
+
+ my $files = join (", ", @files);
+ $files = mywrap ("\t", "\t", "* $files"), ": ";
+
+ if (index($comment, EMPTY_LOG_MESSAGE) > -1 ) {
+ $comment = "[no log message]\n";
+ }
+
+ my $files_last_line_len = 0;
+ $files_last_line_len = last_line_len($files) + 1;
+ my $msg = wrap_log_entry($comment, "\t", 69-$files_last_line_len, 69);
+
+ $msg =~ s/[ \t]+\n/\n/g;
+
+ if ($merge) {
+ print "\t$msg\n";
+ } else {
+ print "$files: $msg\n";
+ }
+
+ @date = ();
+ $author = "";
+ @files = ();
+ $comment = "";
+ $merge = 0;
+
+ $state = 0;
+ $done = 0;
+ }
+}
+
+if (@files) {
+ print (strftime "%Y-%m-%d $author\n\n", @date);
+ my $msg = wrap_log_entry($comment, "\t", 69, 69);
+ $msg =~ s/[ \t]+\n/\n/g;
+ print "\t* $msg\n";
+}
More information about the Yum-cvs-commits
mailing list