On Sat, May 10, 2008 at 01:31:37PM +1000, James Sadler wrote:This is only lightly tested, but the script below should do the trick. It works as an index filter which munges all content in such a way that a particular line is always given the same replacement text. That means that diffs will look approximately the same, but will add and remove lines that say "Fake line XXX" instead of the actual content. You can munge the commit messages themselves by just replacing them with some unique text; in the example below, we just replace them with the md5sum of the content. This will leave the original author, committer, and date, which is presumably non-proprietary. -- >8 -- #!/usr/bin/perl # # Obscure a repository while still maintaining the same history # structure and diffs. # # Invoke as: # git filter-branch \ # --msg-filter md5sum \ # --index-filter /path/to/this/script use strict; use IPC::Open2; use DB_File; use Fcntl; tie my %blob_cache, 'DB_File', 'blob-cache', O_RDWR|O_CREAT, 0666; tie my %line_cache, 'DB_File', 'line-cache', O_RDWR|O_CREAT, 0666; open(my $lsfiles, '-|', qw(git ls-files --stage)) or die "unable to open ls-files: $!"; open(my $update, '|-', qw(git update-index --index-info)) or die "unable to open upate-inex: $!"; while(<$lsfiles>) { my ($mode, $hash, $path) = /^(\d+) ([0-9a-f]{40}) \d\t(.*)/ or die "bad ls-files line: $_"; $blob_cache{$hash} = munge($hash) unless exists $blob_cache{$hash}; print $update "$mode $blob_cache{$hash}\t$path\n"; } close($lsfiles); close($update); exit $?; sub munge { my $h = shift; open(my $in, '-|', qw(git show), $h) or die "unable to open git show: $!"; open2(my $hash, my $out, qw(git hash-object -w --stdin)); while(<$in>) { $line_cache{$_} ||= 'Fake line ' . $line_cache{CURRENT}++ . "\n"; print $out $line_cache{$_}; } close($in); close($out); my $r = <$hash>; chomp $r; return $r; } -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
| Alan Cox | [PATCH 01/76] drivers/serial/crisv10.c: add missing put_tty_driver |
| Greg KH | [GIT PATCH] driver core patches against 2.6.24 |
| Adrian Bunk | Re: Linux 2.6.21 |
| David Miller | Slow DOWN, please!!! |
git: | |
| Jon Smirl | Re: VCS comparison table |
| Junio C Hamano | [RFD] On deprecating "git-foo" for builtins |
| Eric Wong | [PATCH] archimport improvements |
| Johannes Schindelin | Re: [FAQ?] Rationale for git's way to manage the index |
| Richard Stallman | Real men don't attack straw men |
| GVG GVG | ssh_exchange_identification: Connection closed by remote host |
| Leon Dippenaar | New tcp stack attack |
| Henning Brauer | Re: About Xen: maybe a reiterative question but .. |
| David Miller | [GIT]: Networking |
| Mark Lord | Re: 2.6.25-rc8: FTP transfer errors |
| Alexey Dobriyan | [PATCH 01/33] nf_conntrack_sip: de-static helper pointers |
| Evgeniy Polyakov | Re: [BUG] New Kernel Bugs |
