... | ... |
@@ -266,6 +266,14 @@ sub blob { |
266 | 266 |
return $lines; |
267 | 267 |
} |
268 | 268 |
|
269 |
+sub blob_is_image { |
|
270 |
+ my ($self, $user, $project, $rev, $file) = @_; |
|
271 |
+ |
|
272 |
+ my $mime_type = $self->blob_mime_type($user, $project, $rev, $file); |
|
273 |
+ |
|
274 |
+ return ($mime_type || '') =~ m#^image/#; |
|
275 |
+} |
|
276 |
+ |
|
269 | 277 |
sub blob_mime_type { |
270 | 278 |
my ($self, $user, $project, $rev, $file) = @_; |
271 | 279 |
|
... | ... |
@@ -2,6 +2,8 @@ |
2 | 2 |
my $rev = stash('rev'); |
3 | 3 |
my $from_rev = stash('from_rev'); |
4 | 4 |
|
5 |
+ my $git = app->git; |
|
6 |
+ |
|
5 | 7 |
my $diff_tree = stash('diff_tree'); |
6 | 8 |
my $blob_diff = stash('blob_diff'); |
7 | 9 |
my $from_mode_str = $diff_tree->{from_mode_str}; |
... | ... |
@@ -12,6 +14,36 @@ |
12 | 14 |
my $from_file = $blob_diff->{from_file}; |
13 | 15 |
$from_file = $file unless defined $from_file; |
14 | 16 |
my $status = $diff_tree->{status} || ''; |
17 |
+ |
|
18 |
+ my $binary_rev_shown; |
|
19 |
+ my $binary_from_rev_shown; |
|
20 |
+ my $binary_not_shown; |
|
21 |
+ |
|
22 |
+ if ($blob_diff->{binary}) { |
|
23 |
+ if ($status eq 'A') { |
|
24 |
+ if ($git->blob_is_image($user, $project, $rev, $file)) { |
|
25 |
+ $binary_rev_shown = 1; |
|
26 |
+ } |
|
27 |
+ else { |
|
28 |
+ $binary_not_shown = 1; |
|
29 |
+ } |
|
30 |
+ } elsif ($status eq 'D') { |
|
31 |
+ if ($git->blob_is_image($user, $project, $from_rev, $file)) { |
|
32 |
+ $binary_from_rev_shown = 1; |
|
33 |
+ } |
|
34 |
+ else { |
|
35 |
+ $binary_not_shown = 1; |
|
36 |
+ } |
|
37 |
+ } else { |
|
38 |
+ if ($git->blob_is_image($user, $project, $from_rev, $file) && $git->blob_is_image($user, $project, $from_rev, $file)) { |
|
39 |
+ $binary_from_rev_shown = 1; |
|
40 |
+ $binary_rev_shown = 1; |
|
41 |
+ } |
|
42 |
+ else { |
|
43 |
+ $binary_not_shown = 1; |
|
44 |
+ } |
|
45 |
+ } |
|
46 |
+ } |
|
15 | 47 |
%> |
16 | 48 |
|
17 | 49 |
<div style="margin-bottom:20px;"> |
... | ... |
@@ -44,57 +76,67 @@ |
44 | 76 |
</div> |
45 | 77 |
</div> |
46 | 78 |
<table class="border-gray" style="border-top:none"> |
47 |
- % if (@$lines) { |
|
79 |
+ % my $not_shown; |
|
80 |
+ % my $from_rev_shown; |
|
81 |
+ % my $rev_shown; |
|
82 |
+ |
|
83 |
+ |
|
84 |
+ % if ($blob_diff->{binary}) { |
|
85 |
+ % if ($binary_not_shown) { |
|
86 |
+ <div class="border-gray" style="padding:10px;margin-bottom:30px;border-top:none"> |
|
87 |
+ Binary file not shown. |
|
88 |
+ </div> |
|
89 |
+ % } else { |
|
90 |
+ <div class="border-gray" style="border-top:none;background:#ddd;text-align:center;padding-top:30px;padding-bottom:30px"> |
|
91 |
+ % if ($binary_from_rev_shown) { |
|
92 |
+ <a href="<%= url_for("/$user/$project/blob/$from_rev/$file") %>"> |
|
93 |
+ <img src="<%= url_for("/$user/$project/raw/$from_rev/$file") %>" style="border:1px solid red;padding:1px;margin-right:20px"> |
|
94 |
+ </a> |
|
95 |
+ % } |
|
96 |
+ |
|
97 |
+ % if ($binary_rev_shown) { |
|
98 |
+ <a href="<%= url_for("/$user/$project/blob/$rev/$file") %>"> |
|
99 |
+ <img src="<%= url_for("/$user/$project/raw/$rev/$file") %>" style="border:1px solid green;padding:1px;margin-left:20px"> |
|
100 |
+ </a> |
|
101 |
+ % } |
|
102 |
+ </div> |
|
103 |
+ % } |
|
104 |
+ % } elsif (@$lines) { |
|
48 | 105 |
% for my $line (@$lines) { |
49 | 106 |
% my $class = $line->{class}; |
50 | 107 |
% my $value = $line->{value}; |
51 |
- % if ($class eq 'binary_file') { |
|
52 |
- <div class="border-gray" style="border-top:none;background:#ddd;text-align:center;padding-top:30px;padding-bottom:30px"> |
|
53 |
- % if ($status ne 'A') { |
|
54 |
- <a href="<%= url_for("/$user/$project/blob/$from_rev/$file") %>"> |
|
55 |
- <img src="<%= url_for("/$user/$project/raw/$from_rev/$file") %>" style="border:1px solid red;padding:1px;margin-right:20px"> |
|
56 |
- </a> |
|
57 |
- % } |
|
58 |
- % if ($status ne 'D') { |
|
59 |
- <a href="<%= url_for("/$user/$project/blob/$rev/$file") %>"> |
|
60 |
- <img src="<%= url_for("/$user/$project/raw/$rev/$file") %>" style="border:1px solid green;padding:1px;margin-left:20px"> |
|
61 |
- </a> |
|
62 |
- % } |
|
63 |
- </div> |
|
64 |
- % last; |
|
65 |
- % } else { |
|
66 |
- <% |
|
67 |
- my $bk_color_line = ''; |
|
68 |
- my $bk_color = ''; |
|
69 |
- my $border_color; |
|
70 |
- if ($value =~ /^@/) { |
|
71 |
- $bk_color_line = '#f3f3ff'; |
|
72 |
- $border_color = '#e4e4ff'; |
|
73 |
- $bk_color = '#f8f8ff'; |
|
74 |
- } elsif ($value =~ /^\+/) { |
|
75 |
- $bk_color_line = '#ceffce'; |
|
76 |
- $border_color = '#b4e2b4'; |
|
77 |
- $bk_color = '#dfd'; |
|
78 |
- } elsif ($value =~ /^-/) { |
|
79 |
- $bk_color_line = '#f7c8c8'; |
|
80 |
- $border_color = '#e9aeae'; |
|
81 |
- $bk_color = '#fdd'; |
|
82 |
- } else { |
|
83 |
- $border_color = '#e5e5e5'; |
|
84 |
- } |
|
85 |
- %> |
|
86 |
- <tr > |
|
87 |
- <td style="font-size:12px;color:#aaa;padding:0 7px;border-right:1px <%= $border_color %> solid;background:<%= $bk_color_line %>;"> |
|
88 |
- <%= $line->{before_line_num} %> |
|
89 |
- </td> |
|
90 |
- <td style="font-size:12px;color:#aaa;padding:0 7px;border-right:1px <%= $border_color %> solid;background:<%= $bk_color_line %>;"> |
|
91 |
- <%= $line->{after_line_num} %> |
|
92 |
- </td> |
|
93 |
- <td style="width:100%;padding-left:7px;background:<%= $bk_color %>;"> |
|
94 |
- <pre style="border:none;background:none;padding:0;margin:0"><%= $value %></pre> |
|
95 |
- </td> |
|
96 |
- </tr> |
|
97 |
- % } |
|
108 |
+ |
|
109 |
+ <% |
|
110 |
+ my $bk_color_line = ''; |
|
111 |
+ my $bk_color = ''; |
|
112 |
+ my $border_color; |
|
113 |
+ if ($value =~ /^@/) { |
|
114 |
+ $bk_color_line = '#f3f3ff'; |
|
115 |
+ $border_color = '#e4e4ff'; |
|
116 |
+ $bk_color = '#f8f8ff'; |
|
117 |
+ } elsif ($value =~ /^\+/) { |
|
118 |
+ $bk_color_line = '#ceffce'; |
|
119 |
+ $border_color = '#b4e2b4'; |
|
120 |
+ $bk_color = '#dfd'; |
|
121 |
+ } elsif ($value =~ /^-/) { |
|
122 |
+ $bk_color_line = '#f7c8c8'; |
|
123 |
+ $border_color = '#e9aeae'; |
|
124 |
+ $bk_color = '#fdd'; |
|
125 |
+ } else { |
|
126 |
+ $border_color = '#e5e5e5'; |
|
127 |
+ } |
|
128 |
+ %> |
|
129 |
+ <tr > |
|
130 |
+ <td style="font-size:12px;color:#aaa;padding:0 7px;border-right:1px <%= $border_color %> solid;background:<%= $bk_color_line %>;"> |
|
131 |
+ <%= $line->{before_line_num} %> |
|
132 |
+ </td> |
|
133 |
+ <td style="font-size:12px;color:#aaa;padding:0 7px;border-right:1px <%= $border_color %> solid;background:<%= $bk_color_line %>;"> |
|
134 |
+ <%= $line->{after_line_num} %> |
|
135 |
+ </td> |
|
136 |
+ <td style="width:100%;padding-left:7px;background:<%= $bk_color %>;"> |
|
137 |
+ <pre style="border:none;background:none;padding:0;margin:0"><%= $value %></pre> |
|
138 |
+ </td> |
|
139 |
+ </tr> |
|
98 | 140 |
% } |
99 | 141 |
% } else { |
100 | 142 |
<div class="border-gray" style="padding:10px;margin-bottom:30px;border-top:none"> |
... | ... |
@@ -137,6 +137,18 @@ note 'Commit page'; |
137 | 137 |
$t->content_like(qr#/raw/0b6eca6a28538b1226961ca7655d2662f3522652/sample.png#); |
138 | 138 |
} |
139 | 139 |
|
140 |
+ note 'binary data'; |
|
141 |
+ { |
|
142 |
+ $t->get_ok("/$user/$project/commit/ed7b91659762fa612563f0595f3faca6aecfcfa0"); |
|
143 |
+ $t->content_like(qr/Binary file not shown/); |
|
144 |
+ } |
|
145 |
+ |
|
146 |
+ note 'binary data rename'; |
|
147 |
+ { |
|
148 |
+ $t->get_ok("/$user/$project/commit/3c617100f8e6d8ffe11d6c14ddf7b3646a198269"); |
|
149 |
+ $t->content_like(qr/File renamed without changes/); |
|
150 |
+ } |
|
151 |
+ |
|
140 | 152 |
note 'Branch name'; |
141 | 153 |
{ |
142 | 154 |
# Page access (branch name) |