]>
Commit | Line | Data |
---|---|---|
c8b48ba4 JH |
1 | #!/usr/bin/perl -w |
2 | # | |
3 | # Copyright (c) 2005 Junio C Hamano | |
4 | # | |
5 | # Read .git/FETCH_HEAD and make a human readable merge message | |
6 | # by grouping branches and tags together to form a single line. | |
7 | ||
8 | use strict; | |
9 | ||
10 | my @src; | |
11 | my %src; | |
12 | sub andjoin { | |
13 | my ($label, $labels, $stuff) = @_; | |
14 | my $l = scalar @$stuff; | |
15 | my $m = ''; | |
16 | if ($l == 0) { | |
17 | return (); | |
18 | } | |
19 | if ($l == 1) { | |
20 | $m = "$label$stuff->[0]"; | |
21 | } | |
22 | else { | |
23 | $m = ("$labels" . | |
24 | join (', ', @{$stuff}[0..$l-2]) . | |
25 | " and $stuff->[-1]"); | |
26 | } | |
27 | return ($m); | |
28 | } | |
29 | ||
30 | while (<>) { | |
31 | my ($bname, $tname, $gname, $src); | |
32 | chomp; | |
33 | s/^[0-9a-f]* //; | |
05dd8e2e JH |
34 | next if (/^not-for-merge/); |
35 | s/^ //; | |
c8b48ba4 JH |
36 | if (s/ of (.*)$//) { |
37 | $src = $1; | |
38 | } else { | |
39 | # Pulling HEAD | |
40 | $src = $_; | |
41 | $_ = 'HEAD'; | |
42 | } | |
43 | if (! exists $src{$src}) { | |
44 | push @src, $src; | |
45 | $src{$src} = { | |
46 | BRANCH => [], | |
47 | TAG => [], | |
48 | GENERIC => [], | |
49 | # &1 == has HEAD. | |
50 | # &2 == has others. | |
51 | HEAD_STATUS => 0, | |
52 | }; | |
53 | } | |
54 | if (/^branch (.*)$/) { | |
55 | push @{$src{$src}{BRANCH}}, $1; | |
56 | $src{$src}{HEAD_STATUS} |= 2; | |
57 | } | |
58 | elsif (/^tag (.*)$/) { | |
59 | push @{$src{$src}{TAG}}, $1; | |
60 | $src{$src}{HEAD_STATUS} |= 2; | |
61 | } | |
62 | elsif (/^HEAD$/) { | |
63 | $src{$src}{HEAD_STATUS} |= 1; | |
64 | } | |
65 | else { | |
66 | push @{$src{$src}{GENERIC}}, $_; | |
67 | $src{$src}{HEAD_STATUS} |= 2; | |
68 | } | |
69 | } | |
70 | ||
71 | my @msg; | |
72 | for my $src (@src) { | |
73 | if ($src{$src}{HEAD_STATUS} == 1) { | |
74 | # Only HEAD is fetched, nothing else. | |
75 | push @msg, $src; | |
76 | next; | |
77 | } | |
78 | my @this; | |
79 | if ($src{$src}{HEAD_STATUS} == 3) { | |
80 | # HEAD is fetched among others. | |
81 | push @this, andjoin('', '', ['HEAD']); | |
82 | } | |
83 | push @this, andjoin("branch ", "branches ", | |
84 | $src{$src}{BRANCH}); | |
85 | push @this, andjoin("tag ", "tags ", | |
86 | $src{$src}{TAG}); | |
87 | push @this, andjoin("commit ", "commits ", | |
88 | $src{$src}{GENERIC}); | |
89 | my $this = join(', ', @this); | |
90 | if ($src ne '.') { | |
05dd8e2e | 91 | $this .= " of $src"; |
c8b48ba4 JH |
92 | } |
93 | push @msg, $this; | |
94 | } | |
95 | print "Merge ", join("; ", @msg), "\n"; |