Showing 3 changed files with 110 additions and 48 deletions
+8
lib/Gitprep/Git.pm
... ...
@@ -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
   
+90 -48
templates/include/blob_diff_body.html.ep
... ...
@@ -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">
+12
xt/basic.t
... ...
@@ -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)