r3651 - developers/werner
werner at sita.openmoko.org
werner at sita.openmoko.org
Fri Dec 14 16:37:38 CET 2007
Author: werner
Date: 2007-12-14 16:37:33 +0100 (Fri, 14 Dec 2007)
New Revision: 3651
Added:
developers/werner/svnlogdir
Log:
- svnlogdir: recursively extract the SVN log for a list of files and
directories (more reliable than "svn log")
Added: developers/werner/svnlogdir
===================================================================
--- developers/werner/svnlogdir 2007-12-14 11:59:47 UTC (rev 3650)
+++ developers/werner/svnlogdir 2007-12-14 15:37:33 UTC (rev 3651)
@@ -0,0 +1,87 @@
+#!/usr/bin/perl
+
+#
+# Recursively extract the SVN log for a list of files and directories
+#
+
+#
+# What does this do that plain SVN doesn't or does differently ?
+#
+# - really retrieves all entries (svn <directory> often misses some)
+# - includes the names of the files that changed in the log entries in a
+# single line
+#
+
+sub usage
+{
+ print STDERR "usage: $0 [file|directory ...]\n";
+ exit(1);
+}
+
+
+sub filelog
+{
+ local ($file) = @_;
+ local (*PIPE);
+ local ($s);
+
+ print STDERR "$file\n";
+ open(PIPE, "svn log $file |") || die "svn log $file: $!";
+ $s = join("", <PIPE>);
+ $s =~ s/^-{72}\n//s;
+ while ($s =~ /^r(\d+).*?\n-{72}\n/s) {
+ $s = $';
+ $c[$1] = $&;
+ if (defined $f[$1]) {
+ $f[$1] .= ", $file";
+ }
+ else {
+ $f[$1] = $file;
+ }
+ }
+ die if length $s;
+ close PIPE;
+}
+
+
+sub dirlog
+{
+ local ($dir) = @_;
+ local (*FILE);
+
+ open(FILE, "$dir.svn/entries") || die "$dir.svn/entries: $!";
+ while (<FILE>) {
+ next unless /name="([^"]+)"/;
+ &log("$dir$1");
+ }
+}
+
+
+sub log
+{
+ local ($item) = @_;
+
+ if (-d $item) {
+ &dirlog("$item/");
+ }
+ elsif (-f $item) {
+ &filelog($item);
+ }
+}
+
+
+&usage if $ARGV[0] =~ /^-/;
+
+if (defined $ARGV[0]) {
+ for (@ARGV) {
+ &log($_);
+ }
+}
+else {
+ &dirlog("");
+}
+
+for ($i = $#c; $i ; $i--) {
+ next unless defined $f[$i];
+ print "$f[$i]:\n$c[$i]";
+}
Property changes on: developers/werner/svnlogdir
___________________________________________________________________
Name: svn:executable
+ *
More information about the commitlog
mailing list