{"thread":{"id":"422","subject":"graphing commit trees","startedAt":"2005-05-01T20:01:07Z","lastAt":"2005-05-01T20:01:07Z","messageCount":1,"participants":["Lennert Buytenhek"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"2311","messageId":"20050501200107.GA32703@xi.wantstofly.org","threadId":"422","inReplyTo":null,"subject":"graphing commit trees","fromName":"Lennert Buytenhek","fromEmail":"buytenh@wantstofly.org","sentAt":"2005-05-01T20:01:07Z","receivedAt":"2005-05-01T20:01:07Z","isPatch":false,"sender":{"key":"buytenh@wantstofly.org","avatar":null},"body":"Hi!\n\nAs a 5-minute hack to see how easy it'd be to create trees from commit\nobjects: the attached perl script creates a file suitable for feeding\nto dot/dotty from the graphviz suite.  Example graph at:\n\n\thttp://www.liacs.nl/~buytenh/graph_42d4dc3f4e1ec1396371aac89d0dccfdd977191b.png\n\nWarning: big image (2746x41363), many apps can't display it properly.\n(mozilla gives an error, eog shows only the top 32768 pixel rows, gimp\nseems to work.)\n\n\n--L\n\n\n#!/usr/bin/perl\n\nmy %processed;\n\nsub traverse {\n        my $commit = shift;\n        my $parent;\n        my @parents;\n\n        return if (defined $processed{$commit});\n        $processed{$commit} = \"\";\n\n        @parents = split(\" \", `git-cat-file commit $commit | grep \"^parent \" | awk '{print \\$2}'`);\n\n        foreach $parent (@parents) {\n                print \"\\\"$parent\\\" -> \\\"$commit\\\"\\n\";\n                traverse($parent);\n        }\n}\n\nsub mk_graph {\n        my $root = shift;\n\n        print \"digraph blah_$root {\\n\";\n        traverse($root);\n        print \"}\\n\";\n}\n\n$root = `cat .git/HEAD`;\nchomp $root;\n\nmk_graph($root);\n\n\n"}]}