On Mon, Feb 27, 2017 at 02:29:18PM +0100, René Scharfe wrote: > Am 25.02.2017 um 20:04 schrieb brian m. carlson: > >>> So I think that the current scope left is best estimated by the > >>> following command: > >>> > >>> git grep -P 'unsigned char\s+(\*|.*20)' | grep -v '^Documentation' > >>> > >>> So there are approximately 1200 call sites left, which is quite a bit of > >>> work. I estimate between the work I've done and other people's > >>> refactoring work (such as the refs backend refactor), we're about 40% > >>> done. > > > > As a note, I've been working on this pretty much nonstop since the > > collision announcement was made. After another 27 commits, I've got it > > down from 1244 to 1119. > > > > I plan to send another series out sometime after the existing series has > > hit next. People who are interested can follow the object-id-part* > > branches at https://github.com/bk2204/git. > > Perhaps the following script can help a bit; it converts local and static > variables in specified files. It's just a simplistic parser which can get > at least shadowing variables, strings and comments wrong, so its results > need to be reviewed carefully. > > I failed to come up with an equivalent Coccinelle patch so far. :-/ > > René > > > #!/bin/sh > while test $# -gt 0 > do > file="$1" > tmp="$file.new" > test -f "$file" && > perl -e ' > use strict; > my %indent; > my %old; > my %new; > my $in_struct = 0; > while (<>) { > if (/^(\s*)}/) { > my $len = length $1; > foreach my $key (keys %indent) { > if ($len < length($indent{$key})) { > delete $indent{$key}; > delete $old{$key}; > delete $new{$key}; > } > } > $in_struct = 0; > } > if (!$in_struct and /^(\s*)(static )?unsigned char (\w+)\[20\];$/) { > my $prefix = "$1$2"; > my $name = $3; > $indent{$.} = $1; > $old{$.} = qr/(?)(? $name =~ s/sha1/oid/; > print $prefix . "struct object_id " . $name . ";\n"; > $new{$.} = $name . ".hash"; > next; > } > if (/^(\s*)(static )?struct (\w+ )?\{$/) { > $in_struct = 1; > } > if (!$in_struct and ! /\/\*/) { > foreach my $key (keys %indent) { > s/$old{$key}/$new{$key}/g; > } > } > print; > } > ' "$file" >"$tmp" && > mv "$tmp" "$file" || > exit 1 > shift > done I'll see how it works. I'm currently in New Orleans visiting a friend until Thursday, so I'll have less time than normal to look at these, but I'll definitely give it a try. Most of the issue is not the actual conversion, but finding the right order in which to convert functions. For example, the object-id-part8 branch on my GitHub account converts parse_object, but parse_tree_indirect has to be converted before you can do parse_object. That leads to another handful of patches that have to be done. -- brian m. carlson / brian with sandals: Houston, Texas, US +1 832 623 2791 | https://www.crustytoothpaste.net/~bmc | My opinion only OpenPGP: https://keybase.io/bk2204