diff mbox

Improving mklog [was: Re: RFC Asan instrumentation control]

Message ID 52B303B9.20003@samsung.com
State New
Headers show

Commit Message

Yury Gribov Dec. 19, 2013, 2:33 p.m. UTC
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.gribov@samsung.com>

	* mklog: Split generated message in parts.

Comments

Diego Novillo Dec. 19, 2013, 2:36 p.m. UTC | #1
On Thu, Dec 19, 2013 at 9:33 AM, Yury Gribov <y.gribov@samsung.com> wrote:

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

I suppose.

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

The patch is OK. Feel free to submit now, if you want.


Diego.
Yury Gribov Dec. 19, 2013, 2:51 p.m. UTC | #2
> The patch is OK. Feel free to submit now, if you want.

Thanks. Done in r206116.

-Y
diff mbox

Patch

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;