add tool to create .tgz snapshot files with .patch file included
[p5sagit/p5-mst-13.2.git] / Porting / make_dot_patch.pl
1 #!/usr/bin/perl
2 use strict;
3 use warnings;
4
5 # This is a quickie script which I wrote to generate the .patch file for
6 # an arbitrary commit. It takes on sha1 as an argument, or saving that
7 # uses the sha1 associated to HEAD.
8 # It tries to find which of our primary branches the sha1 can be found on,
9 # and then prints to standard out something similar to what our rsync feed
10 # would produce for that situation. The main difference being, in that case
11 # we KNOW what branch we are on, and in this one we dont, and in that case
12 # the $tstamp field holds the time the snapshot was generated (so that multiple
13 # fetches will always have an increasing tstamp field), however in this case
14 # we use the commit date of the sha1.
15 #
16 # This is more or less intended to be used as a utility to generated .patch
17 # files for other processes, like gitweb and snapshots.
18 #
19 # The script assumes it is being run from a git WD.
20 #
21 # Yves
22
23 use POSIX qw(strftime);
24 sub isotime { strftime "%Y-%m-%d.%H:%M:%S",gmtime(shift||time) }
25
26 my $sha1= shift || `git rev-parse HEAD`;
27 chomp($sha1);
28 my @branches=(
29           'origin/blead',
30           'origin/maint-5.10',
31           'origin/maint-5.8',
32           'origin/maint-5.8-dor',
33           'origin/maint-5.6',
34           'origin/maint-5.005',
35           'origin/maint-5.004',
36 );
37 my $branch;
38 foreach my $b (@branches) {
39     $branch= $b and last 
40         if `git log --pretty='format:%H' $b | grep $sha1`;
41 }
42
43 $branch ||= "unknown-branch";
44 my $tstamp= isotime(`git log -1 --pretty="format:%ct" $sha1`);
45 chomp(my $describe= `git describe`);
46 print join(" ", $branch, $tstamp, $sha1, $describe) . "\n";
47