summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 090ea12)
raw | patch | inline | side by side (parent: 090ea12)
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | |
Wed, 7 Mar 2012 10:54:19 +0000 (17:54 +0700) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Wed, 7 Mar 2012 17:07:38 +0000 (09:07 -0800) |
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/log.c | patch | blob | history | |
t/t1050-large.sh | patch | blob | history |
diff --git a/builtin/log.c b/builtin/log.c
index 7d1f6f88a0e0f76bc8ee35155a532b641c14a845..d1702e75807a94d75176451e9d8ef6b194263780 100644 (file)
--- a/builtin/log.c
+++ b/builtin/log.c
#include "string-list.h"
#include "parse-options.h"
#include "branch.h"
+#include "streaming.h"
/* Set a default date-time format for git log ("log.date" config variable) */
static const char *default_date_mode = NULL;
strbuf_release(&out);
}
-static int show_object(const unsigned char *sha1, int show_tag_object,
- struct rev_info *rev)
+static int show_blob_object(const unsigned char *sha1, struct rev_info *rev)
+{
+ fflush(stdout);
+ return stream_blob_to_fd(1, sha1, NULL, 0);
+}
+
+static int show_tag_object(const unsigned char *sha1, struct rev_info *rev)
{
unsigned long size;
enum object_type type;
if (!buf)
return error(_("Could not read object %s"), sha1_to_hex(sha1));
- if (show_tag_object)
- while (offset < size && buf[offset] != '\n') {
- int new_offset = offset + 1;
- while (new_offset < size && buf[new_offset++] != '\n')
- ; /* do nothing */
- if (!prefixcmp(buf + offset, "tagger "))
- show_tagger(buf + offset + 7,
- new_offset - offset - 7, rev);
- offset = new_offset;
- }
+ assert(type == OBJ_TAG);
+ while (offset < size && buf[offset] != '\n') {
+ int new_offset = offset + 1;
+ while (new_offset < size && buf[new_offset++] != '\n')
+ ; /* do nothing */
+ if (!prefixcmp(buf + offset, "tagger "))
+ show_tagger(buf + offset + 7,
+ new_offset - offset - 7, rev);
+ offset = new_offset;
+ }
if (offset < size)
fwrite(buf + offset, size - offset, 1, stdout);
const char *name = objects[i].name;
switch (o->type) {
case OBJ_BLOB:
- ret = show_object(o->sha1, 0, NULL);
+ ret = show_blob_object(o->sha1, NULL);
break;
case OBJ_TAG: {
struct tag *t = (struct tag *)o;
diff_get_color_opt(&rev.diffopt, DIFF_COMMIT),
t->tag,
diff_get_color_opt(&rev.diffopt, DIFF_RESET));
- ret = show_object(o->sha1, 1, &rev);
+ ret = show_tag_object(o->sha1, &rev);
rev.shown_one = 1;
if (ret)
break;
diff --git a/t/t1050-large.sh b/t/t1050-large.sh
index f662fefa6740ccea0d2a60621c43f1cc7262dfc3..dd1bb8422c42ae527c845a8e06a24b830d315e50 100755 (executable)
--- a/t/t1050-large.sh
+++ b/t/t1050-large.sh
git cat-file blob largefiletag >/dev/null
'
-test_expect_failure 'git-show a large file' '
+test_expect_success 'git-show a large file' '
git show :large1 >/dev/null
'