chiark / gitweb /
WIP before reorgs?
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 28 Jan 2017 08:57:08 +0000 (08:57 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 24 Aug 2017 14:43:39 +0000 (15:43 +0100)
git-debrebase

index 0d9e936d978c38934be3476a3fd81ec90c5bf7d0..8911c057434cb637b43cec006d5268b27a37180a 100755 (executable)
@@ -35,5 +35,48 @@ sub cfg ($) {
 
 memoize('cfg');
 
+# usage
+#  git debrebase launder
+
+sub get_commit ($) {
+    my ($objid) = @_;
+    my ($type,$data) = git_cat_file $objid;
+    die unless $type eq 'commit';
+    $data =~ m/(?<=\n)\n/;
+    return ($`,$');
+}
+
+memoize('get_commit');
+
+sub DDEB () { return 0x1; }
+sub DUPS () { return 0x2; }
+sub DPAT () { return 0x4; }
+
+sub launder () {
+    # go through commits backwards
+    # we generate two lists of commits to apply
+    my (@deb_cl, @ups_cl);
+    my $cur = git_rev_parse('HEAD');
+    for (;;) {
+       my ($h,$m) = get_commit $cur;
+       my ($t) = $h =~ m/^tree (\w+)$/m;  defined $t or die $cur;
+       my (@p) = $h =~ m/^parent (\w+)$/m;
+       my (@d) = map { get_differs $t, $_ } @p;
+       if (@p == 1) {
+           my ($d) = $d[0];
+           if ($d == DPAT) {
+               # changes on debian/patches, discard it
+               $cur = $p[0];
+               next;
+           }
+           if ($d & DPAT) {
+           
+}   
+
+if ($ARGV[0] eq 'launder') {
+    launder();
+}
+
 use Data::Dumper;
 print Dumper(cfg('wombat.foo.bar'));
+