author | Lars Hjemli <hjemli@gmail.com> | 2007-09-19 22:00:06 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2007-09-19 22:05:59 (UTC) |
commit | ff7a39488adbee9cb57bf4549efd60e6b7d4fc1a (patch) (unidiff) | |
tree | 20dd27ce96d8b7b84e0da84b0cca94a7e17ea11c | |
parent | 63d5f5eaeadf060a0c8c94ac3b32e51b469b6af3 (diff) | |
download | cgit-ff7a39488adbee9cb57bf4549efd60e6b7d4fc1a.zip cgit-ff7a39488adbee9cb57bf4549efd60e6b7d4fc1a.tar.gz cgit-ff7a39488adbee9cb57bf4549efd60e6b7d4fc1a.tar.bz2 |
ui-tree: show last line of blob
The last line in a blob was never printed by ui-tree::print_object(), which
was particularly annoying when the blob missed a final newline. This fixes
the issue.
Noticed-by: <mkraai@beckman.com>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | ui-tree.c | 7 |
1 files changed, 5 insertions, 2 deletions
@@ -12,16 +12,17 @@ char *curr_rev; | |||
12 | char *match_path; | 12 | char *match_path; |
13 | int header = 0; | 13 | int header = 0; |
14 | 14 | ||
15 | static void print_object(const unsigned char *sha1, char *path) | 15 | static void print_object(const unsigned char *sha1, char *path) |
16 | { | 16 | { |
17 | enum object_type type; | 17 | enum object_type type; |
18 | unsigned char *buf; | 18 | unsigned char *buf; |
19 | unsigned long size, lineno, start, idx; | 19 | unsigned long size, lineno, start, idx; |
20 | const char *linefmt = "<tr><td class='no'><a name='%1$d'>%1$d</a></td><td class='txt'>"; | ||
20 | 21 | ||
21 | type = sha1_object_info(sha1, &size); | 22 | type = sha1_object_info(sha1, &size); |
22 | if (type == OBJ_BAD) { | 23 | if (type == OBJ_BAD) { |
23 | cgit_print_error(fmt("Bad object name: %s", | 24 | cgit_print_error(fmt("Bad object name: %s", |
24 | sha1_to_hex(sha1))); | 25 | sha1_to_hex(sha1))); |
25 | return; | 26 | return; |
26 | } | 27 | } |
27 | 28 | ||
@@ -38,24 +39,26 @@ static void print_object(const unsigned char *sha1, char *path) | |||
38 | 39 | ||
39 | html("<table class='blob'>\n"); | 40 | html("<table class='blob'>\n"); |
40 | idx = 0; | 41 | idx = 0; |
41 | start = 0; | 42 | start = 0; |
42 | lineno = 0; | 43 | lineno = 0; |
43 | while(idx < size) { | 44 | while(idx < size) { |
44 | if (buf[idx] == '\n') { | 45 | if (buf[idx] == '\n') { |
45 | buf[idx] = '\0'; | 46 | buf[idx] = '\0'; |
46 | htmlf("<tr><td class='no'><a name='%1$d'>%1$d</a></td><td class='txt'>", | 47 | htmlf(linefmt, ++lineno); |
47 | ++lineno); | ||
48 | html_txt(buf + start); | 48 | html_txt(buf + start); |
49 | html("</td></tr>\n"); | 49 | html("</td></tr>\n"); |
50 | start = idx + 1; | 50 | start = idx + 1; |
51 | } | 51 | } |
52 | idx++; | 52 | idx++; |
53 | } | 53 | } |
54 | htmlf(linefmt, ++lineno); | ||
55 | html_txt(buf + start); | ||
56 | html("</td></tr>\n"); | ||
54 | html("</table>\n"); | 57 | html("</table>\n"); |
55 | } | 58 | } |
56 | 59 | ||
57 | 60 | ||
58 | static int ls_item(const unsigned char *sha1, const char *base, int baselen, | 61 | static int ls_item(const unsigned char *sha1, const char *base, int baselen, |
59 | const char *pathname, unsigned int mode, int stage) | 62 | const char *pathname, unsigned int mode, int stage) |
60 | { | 63 | { |
61 | char *name; | 64 | char *name; |