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