On 12/19/2013 05:47 PM, Diego Novillo wrote:
The patch is fine (some tweaks below).
If someone volunteers to re-write it in Python,
I think it would make it easier to keep extending.

Frankly in my experience Perl with `use warnings' and `use strict' isn't that bad. We could just as well massage existing script.

Ultimately, mklog ought to write the ChangeLog itself.
We get rid of that headache, at least.

Right, we definitely can get rid of routine comments like 'New test/New function/Remove/Likewise'.

I'd rather continue using 'cl' to abbreviate ChangeLog, instead of 'clog'.

Got it. Attached new version of script and ChangeLog entry. Will submit tomorrow if noone objects.

-Y
2013-12-19  Yury Gribov  <y.gri...@samsung.com>

        * mklog: Split generated message in parts.

diff --git a/contrib/mklog b/contrib/mklog
index a874c72..d3f044e 100755
--- a/contrib/mklog
+++ b/contrib/mklog
@@ -34,6 +34,10 @@ $name = @n[1]; chop($name);
 $addr = $username . "\@my.domain.org";
 $date = `date +%Y-%m-%d`; chop ($date);
 
+$gcc_root = $0;
+$gcc_root =~ s/[^\\\/]+$/../;
+chdir $gcc_root;
+
 
 #-----------------------------------------------------------------------------
 # Program starts here. You should not need to edit anything below this
@@ -50,16 +54,28 @@ if ( $#ARGV != 0 ) {
 $diff = $ARGV[0];
 $dir = `dirname $diff`; chop ($dir);
 $basename = `basename $diff`; chop ($basename);
-$cl = `mktemp /tmp/$basename.XXXXXX` || exit 1; chop ($cl);
 $hdrline = "$date  $name  <$addr>";
 
-open (CLFILE, ">$cl") or die "Could not open file $cl for writing";
-
-print CLFILE "$hdrline\n\n";
+my %cl_entries;
+
+sub get_clname($) {
+	my $dirname = $_[0];
+	while ($dirname) {
+		my $clname = "$dirname/ChangeLog";
+		if (-f $clname) {
+			my $filename_rel = substr ($_[0], length ($dirname) + 1);
+			return ($filename_rel, $clname);
+		} else {
+			$dirname =~ s/[\/\\]?[^\/\\]*$//;
+		} 
+	}
+	return ($_[0], 'Unknown Changelog');
+}
 
 # For every file in the .diff print all the function names in ChangeLog
 # format.
 $bof = 0;
+$clname = get_clname('');
 open (DFILE, $diff) or die "Could not open file $diff for reading";
 while (<DFILE>) {
     # Check if we found a new file.
@@ -68,10 +84,11 @@ while (<DFILE>) {
 	# $bof == 1), we just write out a ':' before starting the next
 	# file.
 	if ($bof == 1) {
-	    print CLFILE ":\n";
+		$cl_entries{$clname} .= ":\n";
 	}
 	$filename = $2;
-	print CLFILE "\t* $filename";
+	($filename_rel, $clname) = get_clname ($filename);
+	$cl_entries{$clname} .= "\t* $filename_rel";
 	$bof = 1;
     }
 
@@ -122,13 +139,13 @@ while (<DFILE>) {
 	    # to the filename, so we need an extra space before the opening
 	    # brace.
 	    if ($bof) {
-		print CLFILE " ";
+		$cl_entries{$clname} .= " ";
 		$bof = 0;
 	    } else {
-		print CLFILE "\t";
+		$cl_entries{$clname} .= "\t";
 	    }
 
-	    print CLFILE "($fn):\n";
+		$cl_entries{$clname} .= "($fn):\n";
 	    $seen_names{$fn} = 1;
 	}
     }
@@ -138,14 +155,20 @@ while (<DFILE>) {
 # write out a ':'. This happens when there is only one file with no
 # functions.
 if ($bof == 1) {
-    print CLFILE ":\n";
+	$cl_entries{$clname} .= ":\n";
+}
+
+$temp = `mktemp /tmp/$basename.XXXXXX` || exit 1; chop ($temp);
+open (CLFILE, ">$temp") or die "Could not open file $temp for writing";
+
+foreach my $clname (keys %cl_entries) {
+	print CLFILE "$clname:\n\n$hdrline\n\n$cl_entries{$clname}\n";
 }
 
-print CLFILE "\n";
 close (DFILE);
 
 # Concatenate the ChangeLog template and the original .diff file.
-system ("cat $diff >>$cl && mv $cl $diff") == 0
+system ("cat $diff >>$temp && mv $temp $diff") == 0
     or die "Could not add the ChangeLog entry to $diff";
 
 exit 0;

Reply via email to